@ -117,21 +117,24 @@ exec_01_defaultrootpasswd(){
[[ -n ${COMMAND} ]] || local COMMAND="set="
[[ -n ${COMMAND} ]] || local COMMAND="set="
local PARAM="$@"
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ -n ${DEFAULTROOTPASSWD} && ! ${DEFAULTROOTPASSWD,,} == @(no|none|disable) ]]; then
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]]; then
[[ ${DEFAULTROOTPASSWD,,} == @(no|none|disable|" ") ]] && DEFAULTROOTPASSWD=" "
# Добавить параметр в ${FILE_ROOT_USERS}=.users_credential и удалить параметр DEFAULTROOTPASSWD из '/etc/ublinux/users
# Добавить параметр в ${FILE_ROOT_USERS}=.users_credential и удалить параметр DEFAULTROOTPASSWD из '/etc/ublinux/users
if [[ -f ${FILE_ROOT_USERS} ]]; then
if [[ -f ${FILE_ROOT_USERS} ]]; then
sed "/DEFAULTROOTPASSWD=/d" -i "${FILE_ROOT_USERS}"
sed "/DEFAULTROOTPASSWD=/d" -i "${FILE_ROOT_USERS}"
echo "DEFAULTROOTPASSWD='${DEFAULTROOTPASSWD}'" >> ${FILE_ROOT_USERS}
[[ -n ${DEFAULTROOTPASSWD} ]] && echo "DEFAULTROOTPASSWD='${DEFAULTROOTPASSWD}'" >> ${FILE_ROOT_USERS}
fi
fi
[[ -f "${SYSCONF}/users" ]] && sed "/DEFAULTROOTPASSWD=/d" -i "${SYSCONF}/users"
[[ -f "${SYSCONF}/users" ]] && sed "/DEFAULTROOTPASSWD=/d" -i "${SYSCONF}/users"
DEFAULTROOTPASSWD=$(return_hash_password hash ${HASHPASSWD} ${DEFAULTROOTPASSWD})
[[ -n ${DEFAULTROOTPASSWD} ]] && DEFAULTROOTPASSWD=$(return_hash_password hash ${HASHPASSWD} ${DEFAULTROOTPASSWD})
#set_passwd root "${DEFAULTROOTPASSWD}"
#set_passwd root "${DEFAULTROOTPASSWD}"
user_add "root:+:+:+:${DEFAULTROOTPASSWD}:+:+:+:+:+:+:+:+"
user_add "root:+:+:+:${DEFAULTROOTPASSWD}:+:+:+:+:+:+:+:+"
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
[[ -f ${FILE_ROOT_USERS} ]] && sed "/DEFAULTROOTPASSWD=/d" -i "${FILE_ROOT_USERS}"
[[ -f ${FILE_ROOT_USERS} ]] && sed "/DEFAULTROOTPASSWD=/d" -i "${FILE_ROOT_USERS}"
[[ -f "${SYSCONF}/users" ]] && sed "/DEFAULTROOTPASSWD=/d" -i "${SYSCONF}/users"
[[ -f "${SYSCONF}/users" ]] && sed "/DEFAULTROOTPASSWD=/d" -i "${SYSCONF}/users"
# Если пробел " " пробел, то пароль не будет установлен
user_add "root:+:+:+: :+:+:+:+:+:+:+:+"
fi
fi
}
}
@ -142,13 +145,13 @@ exec_02_defaultpasswd(){
[[ -n ${COMMAND} ]] || local COMMAND="set="
[[ -n ${COMMAND} ]] || local COMMAND="set="
local PARAM="$@"
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ -n ${DEFAULTPASSWD} ]] ; then
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]]; then
# Добавить параметр в ${FILE_ROOT_USERS}=.users_credential и удалить параметр DEFAULTROOTPASSWD из '/etc/ublinux/users
# Добавить параметр в ${FILE_ROOT_USERS}=.users_credential и удалить параметр DEFAULTROOTPASSWD из '/etc/ublinux/users
if [[ -f ${FILE_ROOT_USERS} ]]; then
if [[ -f ${FILE_ROOT_USERS} ]]; then
sed "/DEFAULTPASSWD=/d" -i "${FILE_ROOT_USERS}"
sed "/DEFAULTPASSWD=/d" -i "${FILE_ROOT_USERS}"
echo "DEFAULTPASSWD='${DEFAULTPASSWD}'" >> ${FILE_ROOT_USERS}
[[ -n ${DEFAULTPASSWD} ]] && echo "DEFAULTPASSWD='${DEFAULTPASSWD}'" >> ${FILE_ROOT_USERS}
fi
fi
[[ -f "${SYSCONF}/users" ]] && sed "/DEFAULTPASSWD=/d" -i "${SYSCONF}/users"
[[ -f "${SYSCONF}/users" ]] && sed "/DEFAULTPASSWD=/d" -i "${SYSCONF}/users"
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
@ -238,8 +241,8 @@ exec_04_groupadd(){
local DATA_SYSUSERS=$(cat ${ROOTFS}/usr/lib/sysusers.d/*.conf ${ROOTFS}/usr/share/ublinux-sysusers/*.sysusers)
local DATA_SYSUSERS=$(cat ${ROOTFS}/usr/lib/sysusers.d/*.conf ${ROOTFS}/usr/share/ublinux-sysusers/*.sysusers)
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
local GROUPADD=
local GROUPADD=
declare -A GROUPADD
declare -A GROUPADD=()
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#GROUPADD[@]} != 0 ]]; then
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#GROUPADD[@]} != 0 ]]; then
groupadd_local(){
groupadd_local(){
@ -272,8 +275,8 @@ exec_04_groupadd(){
[[ ${SELECT_OPTIONAL} == 'x' ]] && SELECT_OPTIONAL=
[[ ${SELECT_OPTIONAL} == 'x' ]] && SELECT_OPTIONAL=
[[ ${SELECT_OPTIONAL} =~ ('-r'|'--system') ]] && SELECT_GID="system"
[[ ${SELECT_OPTIONAL} =~ ('-r'|'--system') ]] && SELECT_GID="system"
#[[ ! ${SELECT_OPTIONAL} =~ ('-o'|'--non-unique') && ${DATA_FILE_GROUP} =~ ($'\n'|^)+[^:]*:[^:]*:"${SELECT_GID}": ]] && { >&2 echo "ERROR: '${SELECT_GROUP}' non unique a group ID (GID)"; return 1; }
#[[ ! ${SELECT_OPTIONAL} =~ ('-o'|'--non-unique') && ${DATA_FILE_GROUP} =~ ($'\n'|^)+[^:]*:[^:]*:"${SELECT_GID}": ]] && { >&2 echo "ERROR: '${SELECT_GROUP}' non unique a group ID (GID)"; return 1; }
[[ ${SELECT_PASSWORD} == @(""|"x") ]] && SELECT_PASSWORD=
[[ ${SELECT_PASSWORD} == @(""|" "|" x") ]] && SELECT_PASSWORD=
[[ ${SELECT_PASSWORD} != @(""|'!*'|'!'|'*') ]] && SELECT_PASSWORD=$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})
[[ ${SELECT_PASSWORD} != @(""|" "| '!*'|'!'|'*') ]] && SELECT_PASSWORD=$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})
#echo "==> exec_04_groupadd: ${SELECT_GROUP}:${SELECT_USERS}:${SELECT_GID}:${SELECT_OPTIONAL}:${SELECT_ADMINISTRATORS}:${SELECT_PASSWORD}"
#echo "==> exec_04_groupadd: ${SELECT_GROUP}:${SELECT_USERS}:${SELECT_GID}:${SELECT_OPTIONAL}:${SELECT_ADMINISTRATORS}:${SELECT_PASSWORD}"
group_add "${SELECT_GROUP}:${SELECT_GID}:${SELECT_USERS}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}"
group_add "${SELECT_GROUP}:${SELECT_GID}:${SELECT_USERS}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}"
if [[ -n ${PARAM} && -z ${ROOTFS} ]]; then
if [[ -n ${PARAM} && -z ${ROOTFS} ]]; then
@ -322,10 +325,10 @@ exec_05_neededusers(){
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || local COMMAND="set="
[[ -n ${COMMAND} ]] || local COMMAND="set="
local PARAM="$@"
local PARAM="$@"
local SELECT_USERNAME SELECT_UID SELECT_PASSWORD SELECT_GECOS NULL ADDGROUPS
local SELECT_USERNAME= SELECT_UID= SELECT_PASSWORD= SELECT_GECOS= NULL= ADDGROUPS=
local ARG_DEFAULTGROUP ARG_SELECT_UID ARG_SELECT_GECOS
local ARG_DEFAULTGROUP= ARG_SELECT_UID= ARG_SELECT_GECOS=
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
# Если по умолчанию нет ни одного пользователя, то создаём администратора
# Если по умолчанию нет ни одного пользователя, то создаём администратора
#[[ -z ${NEEDEDUSERS} ]] && NEEDEDUSERS="${DEFAULTUSER}:${ADMUID}:${DEFAULTPASSWD}:Administrator"
#[[ -z ${NEEDEDUSERS} ]] && NEEDEDUSERS="${DEFAULTUSER}:${ADMUID}:${DEFAULTPASSWD}:Administrator"
@ -411,9 +414,10 @@ exec_05_neededusers(){
## -N, --no-user-group # Н е создавать группу с тем же именем что и у пользователя
## -N, --no-user-group # Н е создавать группу с тем же именем что и у пользователя
## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID, использовать только совместно с параметром <uid>
## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID, использовать только совместно с параметром <uid>
## --badnames # Н е проверять имя на несоответствие правилам использования символов
## --badnames # Н е проверять имя на несоответствие правилам использования символов
## <password|x> # Хеш пароля пользователя, если 'x', то 'password=${DEFAULTPASSWD}'
## <password|x> # Хеш пароля пользователя
## # Если пароль пустой или состоит из символа 'x', то 'password=${DEFAULTPASSWD}'
## # Если user_name=root, то пароль не применяется, а используется password=${DEFAULTROOTPASSWD}
## # Если user_name=root, то пароль не применяется, а используется password=${DEFAULTROOTPASSWD}
## # Если пароль не задан, поле пустое , то вход без пароля
## # Если пароль состоит из символов ' ' (пробел) , то вход без пароля
## # Если пароль состоит из символов '!*' или '!' или '*' или '!!', то аутентификация запрещена
## # Если пароль состоит из символов '!*' или '!' или '*' или '!!', то аутентификация запрещена
## # Если первый символ '!' , то аутентификация по паролю заблокирована,
## # Если первый символ '!' , то аутентификация по паролю заблокирована,
## # но другие методы входа, такие как аутентификация на основе ключей или переключение на пользователя, по-прежнему разрешены.
## # но другие методы входа, такие как аутентификация на основе ключей или переключение на пользователя, по-прежнему разрешены.
@ -446,8 +450,8 @@ exec_06_useradd(){
local PARAM="$@"
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
local USERADD=
local USERADD=
declare -A USERADD
declare -A USERADD=()
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
# Если в GRUB указан параметр useradd, то создать пользователя
# Если в GRUB указан параметр useradd, то создать пользователя
[[ -n ${ROOTFS} ]] && while IFS=':' read -u3 SELECT_USERNAME SELECT_UID SELECT_GROUP SELECT_EXTRAGROUP SELECT_PASSWORD NULL; do
[[ -n ${ROOTFS} ]] && while IFS=':' read -u3 SELECT_USERNAME SELECT_UID SELECT_GROUP SELECT_EXTRAGROUP SELECT_PASSWORD NULL; do
@ -479,9 +483,9 @@ exec_06_useradd(){
[[ ${SELECT_OPTIONAL} =~ ("--shell "|"-s ")([^' ']*)(' '|$) ]] && SELECT_SHELL="${BASH_REMATCH[2]}" || SELECT_SHELL="+"
[[ ${SELECT_OPTIONAL} =~ ("--shell "|"-s ")([^' ']*)(' '|$) ]] && SELECT_SHELL="${BASH_REMATCH[2]}" || SELECT_SHELL="+"
[[ ${SELECT_OPTIONAL} =~ ("--no-create-home"|"-M") ]] && SELECT_MKHOME= || SELECT_MKHOME="yes"
[[ ${SELECT_OPTIONAL} =~ ("--no-create-home"|"-M") ]] && SELECT_MKHOME= || SELECT_MKHOME="yes"
# -----------
# -----------
[[ ${SELECT_PASSWORD} == "x" && ${SELECT_USERNAME} != "root" ]] && SELECT_PASSWORD="${DEFAULTPASSWD}"
[[ ${SELECT_PASSWORD} == @(""| "x") && ${SELECT_USERNAME} != "root" ]] && SELECT_PASSWORD="${DEFAULTPASSWD}"
[[ ${SELECT_USERNAME} == "root" ]] && SELECT_PASSWORD="${DEFAULTROOTPASSWD}"
[[ ${SELECT_USERNAME} == "root" ]] && SELECT_PASSWORD="${DEFAULTROOTPASSWD}"
[[ ${SELECT_PASSWORD} != @(""|'!*'|'!'|'!!'|'*') ]] && SELECT_PASSWORD="$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})"
[[ ${SELECT_PASSWORD} != @(""|" "| '!*'|'!'|'!!'|'*') ]] && SELECT_PASSWORD="$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})"
# -----------
# -----------
[[ ${SELECT_GECOS,,} == "x" ]] && SELECT_GECOS=
[[ ${SELECT_GECOS,,} == "x" ]] && SELECT_GECOS=
# -----------
# -----------
@ -517,7 +521,7 @@ exec_06_useradd(){
elif [[ ${SELECT_OPTIONAL} =~ ("--system"|"-r") ]]; then
elif [[ ${SELECT_OPTIONAL} =~ ("--system"|"-r") ]]; then
# Если указан параметр создавать системную группу
# Если указан параметр создавать системную группу
SELECT_GROUP="system"
SELECT_GROUP="system"
else
else
if [[ -n ${SELECT_GROUP} && -n ${GROUPADD[${SELECT_GROUP}]} ]]; then
if [[ -n ${SELECT_GROUP} && -n ${GROUPADD[${SELECT_GROUP}]} ]]; then
# Если группа указана и присутствует в списке групп GROUPADD[.]
# Если группа указана и присутствует в списке групп GROUPADD[.]
exec_04_groupadd "GROUPADD[${SELECT_GROUP}]=${GROUPADD[${SELECT_GROUP}]}"
exec_04_groupadd "GROUPADD[${SELECT_GROUP}]=${GROUPADD[${SELECT_GROUP}]}"
@ -595,7 +599,7 @@ exec_06_useradd(){
eval "${LIST_USERADD_NOUID}"
eval "${LIST_USERADD_NOUID}"
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' ]]; then
# Удалим пользователей
# Удалим пользователей
local SELECT_USERNAME=${BASH_REMATCH[1]}
local SELECT_USERNAME=${BASH_REMATCH[1]}
delete_select_username(){
delete_select_username(){
local SELECT_USERNAME=$1
local SELECT_USERNAME=$1
@ -643,9 +647,9 @@ exec_07_usershadow(){
local PARAM="$@"
local PARAM="$@"
local DATA_FILE_SHADOW=$(< ${FILE_SHADOW})
local DATA_FILE_SHADOW=$(< ${FILE_SHADOW})
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
local USERSHADOW
local USERSHADOW=
declare -A USERSHADOW
declare -A USERSHADOW=()
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#USERSHADOW[@]} -ne 0 ]]; then
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#USERSHADOW[@]} -ne 0 ]]; then
while IFS= read -ru3 SELECT_USERNAME; do
while IFS= read -ru3 SELECT_USERNAME; do
@ -695,10 +699,10 @@ exec_08_user_members(){
local PARAM="$@"
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
local USERADD=
local USERADD=
declare -A USERADD
declare -A USERADD=()
local GROUPADD=
local GROUPADD=
declare -A GROUPADD
declare -A GROUPADD=()
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
local SELECT_USERNAME= SELECT_UID= SELECT_GROUP= SELECT_EXTRAGROUP= SELECT_PASSWORD= NULL=
local SELECT_USERNAME= SELECT_UID= SELECT_GROUP= SELECT_EXTRAGROUP= SELECT_PASSWORD= NULL=
# Если в GRUB указан параметр useradd, то создать пользователя
# Если в GRUB указан параметр useradd, то создать пользователя
@ -775,7 +779,7 @@ exec_99_dm_hint_password(){
local PARAM="$@"
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
if [[ -n ${PARAM} ]]; then
local DM_HINT_PASSWORD=
local DM_HINT_PASSWORD=
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
fi
if [[ -n ${ROOTFS} ]]; then
if [[ -n ${ROOTFS} ]]; then
if grep -q "^$(grep ".*:x:${ADMUID}:" ${ROOTFS}/etc/passwd | cut -d: -f1):${NOSECUREROOTPASSWD}:" ${ROOTFS}/etc/shadow; then
if grep -q "^$(grep ".*:x:${ADMUID}:" ${ROOTFS}/etc/passwd | cut -d: -f1):${NOSECUREROOTPASSWD}:" ${ROOTFS}/etc/shadow; then
@ -793,7 +797,7 @@ exec_99_dm_hint_password(){
################
################
##### MAIN #####
##### MAIN #####
################
################
# Если файл подключен как р е с у р с с функциями, то выйти
# Если файл подключен как р е с у р с с функциями, то выйти
return 0 2>/dev/null && return 0
return 0 2>/dev/null && return 0
#rm -f "${FILE_ROOT_USERS}"
#rm -f "${FILE_ROOT_USERS}"
@ -804,7 +808,7 @@ exec_99_dm_hint_password(){
else
else
FUNCTION=
FUNCTION=
while [[ $# -gt 0 ]]; do
while [[ $# -gt 0 ]]; do
[[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
[[ -z ${1} ]] || { declare -f " ${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/ }'"; }
shift
shift
done
done
eval ${FUNCTION#*; }
eval ${FUNCTION#*; }