diff --git a/ublinux/functions b/ublinux/functions index 27fdeed..a2cee49 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -7,6 +7,20 @@ SYSCONF="${ROOTFS}${SYSCONF}" export TEXTDOMAINDIR=/usr/share/locale export TEXTDOMAIN=ublinux_functions +ere_quote_grep() { + # Что экранировать + sed 's/[][\.|$(){}?+*^]/\\&/g' <<< "$*" + # Что не экранировать + #sed 's/[^a-zA-Z0-9=",;/_@#%&<> -]/\\&/g' <<< "$*" +} + +ere_quote_sed() { + # Что экранировать + sed 's/[][\.|$(){}!?+*^;/]/\\&/g' <<< "$*" + # Что не экранировать + #sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "$*" +} + # https://en.wikipedia.org/wiki/Crypt_(C) # https://man.archlinux.org/man/core/libxcrypt/crypt.5.en # /etc/shadow file format # user:$6$.n.:17736:0:99999:7::: @@ -232,10 +246,10 @@ user_add(){ local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" local FILE_DEFAULT_USERADD="${ROOTFS}/etc/default/useradd" - local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD}) - local DATA_FILE_SHADOW=$(cat ${FILE_SHADOW}) - local DATA_FILE_LOGINDEFS=$(cat ${FILE_LOGINDEFS}) - local DATA_FILE_DEFAULT_USERADD=$(cat ${FILE_DEFAULT_USERADD}) + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local DATA_FILE_SHADOW=$(< ${FILE_SHADOW}) + local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS}) + local DATA_FILE_DEFAULT_USERADD=$(< ${FILE_DEFAULT_USERADD}) [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+HOME=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_HOME_USER=${BASH_REMATCH[2]:-/home} [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+SHELL=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_SHELL_USER=${BASH_REMATCH[2]:-/bin/bash} @@ -422,13 +436,21 @@ user_add(){ || "${SELECT_HOME}" != "${VOL_FILEP_HOME}" || "${SELECT_SHELL}" != "${VOL_FILEP_SHELL}" ]]; then #sed "/^${SELECT_USERNAME}:/d" -i "${FILE_PASSWD}" #printf "%s:%s:%d:%d:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" >> "${FILE_PASSWD}" - sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}" + #sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}" + #sed -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}" + while [[ ${DATA_FILE_PASSWD} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_PASSWD="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_PASSWD} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_PASSWD="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%d:%d:%s:%s:%s\n" "${DATA_FILE_PASSWD}" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" > "${FILE_PASSWD}" fi if [[ "${SELECT_PASSWORD}" != "${VOL_FILEPS_PASSWORD}" || "${SELECT_LASTCHANGED}" != "${VOL_FILEPS_LASTCHANGED}" || "${SELECT_MINDAY}" != "${VOL_FILEPS_MINDAY}" || "${SELECT_MAXDAY}" != "${VOL_FILEPS_MAXDAY}" \ || "${SELECT_WARN}" != "${VOL_FILEPS_WARN}" || "${SELECT_INACTIVE}" != "${VOL_FILEPS_INACTIVE}" || "${SELECT_EXPIRE}" != "${VOL_FILEPS_EXPIRE}" ]]; then #sed "/^${SELECT_USERNAME}:/d" -i "${FILE_SHADOW}" #printf "%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" >> "${FILE_SHADOW}" - sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}" + #sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}" + #sed -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}" + while [[ ${DATA_FILE_SHADOW} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_SHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_SHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_SHADOW="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${DATA_FILE_SHADOW}" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" > "${FILE_SHADOW}" fi [[ -z ${VERBOSE} ]] || printf "%s:%s:%d:%d:%s:%s:%s:%d:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_GECOS}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_PASSWORD}" "${SELECT_HOME}" "${SELECT_SHELL}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" } @@ -444,10 +466,10 @@ user_add(){ user_del(){ local FILE_PASSWD="${ROOTFS}/etc/passwd" local FILE_SHADOW="${ROOTFS}/etc/shadow" - local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD}) + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) local FILE_GROUP="${ROOTFS}/etc/group" local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) local PARAM="$@" local SELECT_USERNAME= SELECT_UID= IFS=: read -r SELECT_USERNAME SELECT_UID NULL <<< "${PARAM}" @@ -512,9 +534,9 @@ group_add(){ local FILE_GROUP="${ROOTFS}/etc/group" local FILE_GSHADOW="${ROOTFS}/etc/gshadow" local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) - local DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW}) - local DATA_FILE_LOGINDEFS=$(cat ${FILE_LOGINDEFS}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) + local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS}) get_free_gid(){ local PARAM="$@" local GID_MIN= GID_MAX= GID_NEW= @@ -608,13 +630,23 @@ group_add(){ if [[ "${SELECT_GROUPNAME}" != "${VOL_FILEG_GROUPNAME}" && "${SELECT_PLAINPASSWORD}" != "${VOL_FILEG_PLAINPASSWORD}" || "${SELECT_GID}" != "${VOL_FILEG_GID}" || "${SELECT_MEMBERS}" != "${VOL_FILEG_MEMBERS}" ]]; then #sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GROUP}" #printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" >> "${FILE_GROUP}" - sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PLAINPASSWORD}:${SELECT_GID}:${SELECT_MEMBERS}" -i "${FILE_GROUP}" + #sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PLAINPASSWORD}:${SELECT_GID}:${SELECT_MEMBERS}" -i "${FILE_GROUP}" + + while [[ ${DATA_FILE_GROUP} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GROUP="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_GROUP} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GROUP="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%d:%s\n" "${DATA_FILE_GROUP}" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" > "${FILE_GROUP}" + #printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" fi if [[ "${SELECT_PASSWORD}" != "${VOL_FILEGS_PASSWORD}" || "${SELECT_ADMINISTRATORS}" != "${VOL_FILEGS_ADMINISTRATORS}" || "${SELECT_MEMBERS}" != "${VOL_FILEGS_MEMBERS}" ]]; then #sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GSHADOW}" #printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" >> "${FILE_GSHADOW}" - sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}:${SELECT_MEMBERS}" -i "${FILE_GSHADOW}" + #sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}:${SELECT_MEMBERS}" -i "${FILE_GSHADOW}" + + while [[ ${DATA_FILE_GSHADOW} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GSHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_GSHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GSHADOW="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%d:%s\n" "${DATA_FILE_GSHADOW}" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" > "${FILE_GSHADOW}" + #printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" fi [[ -z ${VERBOSE} ]] || printf "%s:%d:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_GID}" "${SELECT_MEMBERS}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" @@ -631,9 +663,9 @@ group_add(){ group_del(){ local FILE_GROUP="${ROOTFS}/etc/group" local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) local FILE_PASSWD="${ROOTFS}/etc/passwd" - local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD}) + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) local PARAM="$@" local SELECT_GROUPNAME= SELECT_GID= NULL= IFS=: read -r SELECT_GROUPNAME SELECT_GID NULL <<< "${PARAM}" @@ -674,11 +706,11 @@ group_del(){ # Пример: user_add_group user-1:1001 wheel,lp,disk user_add_group(){ local FILE_PASSWD="${ROOTFS}/etc/passwd" - local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD}) + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) local FILE_GROUP="${ROOTFS}/etc/group" local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) - local DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) local SELECT_USERNAME_UID_LIST=$1 local SELECT_GROUPS=$2 while IFS= read -r SELECT_USERNAME_UID; do @@ -727,11 +759,11 @@ user_add_group(){ # Пример: user_remove_group user-1:1001 %all user_remove_group(){ local FILE_PASSWD="${ROOTFS}/etc/passwd" - local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD}) + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) local FILE_GROUP="${ROOTFS}/etc/group" local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) - local DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) local SELECT_USERNAME_UID_LIST=$1 local SELECT_GROUPS=$2 local SELECT_USERNAME_UID= @@ -792,8 +824,8 @@ get_conf_useradd_from_system(){ local FILE_PASSWD="${ROOTFS}/etc/passwd" local FILE_SHADOW="${ROOTFS}/etc/shadow" local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" - local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD}) - local DATA_FILE_SHADOW=$(cat ${FILE_SHADOW}) + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local DATA_FILE_SHADOW=$(< ${FILE_SHADOW}) # Загрузить файлы которые совпадают в каталогах /usr/lib/sysusers.d/ и /usr/share/ublinux-sysusers/. И загрузить которые уникальные в /usr/lib/sysusers.d/ local DATA_SYSUSERS=$(cat \ $(comm --nocheck-order -12 <(cd /usr/lib/sysusers.d/ && ls -v1 *.conf | sed "s/\.conf//g") <(cd /usr/share/ublinux-sysusers/ && ls -v1 *.sysusers | sed "s/\.sysusers//g") | sed 's|^|/usr/share/ublinux-sysusers/|;s|$|.sysusers|') \ @@ -863,15 +895,15 @@ get_conf_useradd_from_system(){ while IFS= read -r SELECT_PARAM; do if [[ ${SELECT_PARAM} == "@users" ]]; then # Все пользователи кроме системных - UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") while IFS= read -r SELECT_USER; do show_user "${SELECT_USER}" done < <(awk -F':' -v USER_MIN=${UID_MIN:=1000} -v USER_MAX=${UID_MAX:=65534} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD}) elif [[ ${SELECT_PARAM} == "@systems" ]]; then # Пользователи системные - UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") while IFS= read -r SELECT_USER; do show_user "${SELECT_USER}" done < <(awk -F':' -v USER_MIN=${UID_MIN:=500} -v USER_MAX=${UID_MAX:=999} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD}) @@ -905,7 +937,7 @@ get_conf_usershadow_from_system(){ FILE_PASSWD="${ROOTFS}/etc/passwd" FILE_SHADOW="${ROOTFS}/etc/shadow" FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" - DATA_FILE_SHADOW=$(cat ${FILE_SHADOW}) + DATA_FILE_SHADOW=$(< ${FILE_SHADOW}) DATE_STARTUP_SYSTEM=$(date -d "$(cut -f1 -d. /proc/uptime) seconds ago" +'%Y-%m-%d') #" # Дата когда был установлен пакет и впервые добавлены пользователи DATE_SYSUSERS=$(stat --printf=%y ${ROOTFS}/usr/share/ublinux-sysusers/README | cut -d' ' -f1) @@ -936,15 +968,15 @@ get_conf_usershadow_from_system(){ while IFS= read -r SELECT_PARAM; do if [[ ${SELECT_PARAM} == "@users" ]]; then # Все пользователи кроме системных - UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") while IFS= read -r SELECT_USER; do show_user "${SELECT_USER}" done < <(awk -F':' -v USER_MIN=${UID_MIN:=1000} -v USER_MAX=${UID_MAX:=65534} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD}) elif [[ ${SELECT_PARAM} == "@systems" ]]; then # Пользователи системные - UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") while IFS= read -r SELECT_USER; do show_user "${SELECT_USER}" done < <(awk -F':' -v USER_MIN=${UID_MIN:=500} -v USER_MAX=${UID_MAX:=999} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD}) @@ -978,8 +1010,8 @@ get_conf_groupadd_from_system(){ FILE_GROUP="${ROOTFS}/etc/group" FILE_GSHADOW="${ROOTFS}/etc/gshadow" FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" - DATA_FILE_GROUP=$(cat ${FILE_GROUP}) - DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW}) + DATA_FILE_GROUP=$(< ${FILE_GROUP}) + DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) # Загрузить файлы которые совпадают в каталогах /usr/lib/sysusers.d/ и /usr/share/ublinux-sysusers/. И загрузить которые уникальные в /usr/lib/sysusers.d/ DATA_SYSUSERS=$(cat \ $(comm --nocheck-order -12 <(cd /usr/lib/sysusers.d/ && ls -v1 *.conf | sed "s/\.conf//g") <(cd /usr/share/ublinux-sysusers/ && ls -v1 *.sysusers | sed "s/\.sysusers//g") | sed 's|^|/usr/share/ublinux-sysusers/|;s|$|.sysusers|') \ @@ -1011,15 +1043,15 @@ get_conf_groupadd_from_system(){ while IFS= read -r SELECT_PARAM; do if [[ ${SELECT_PARAM} == "@groups" ]]; then # Все группы кроме системных - GID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - GID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + GID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + GID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") while IFS= read -r SELECT_GROUP; do show_group "${SELECT_GROUP}" done < <(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=60000} '$3 >= GROUP_MIN && $3 <= GROUP_MAX && $1 != "nobody" { print $1}' ${FILE_GROUP}) elif [[ ${SELECT_PARAM} == "@systems" ]]; then # Группы системные - GID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - GID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + GID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + GID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") while IFS= read -r SELECT_GROUP; do show_group "${SELECT_GROUP}" done < <(awk -F':' -v GROUP_MIN=${GID_MIN:=500} -v GROUP_MAX=${GID_MAX:=999} '$3 >= GROUP_MIN && $3 <= GROUP_MAX && $1 != "nobody" { print $1}' ${FILE_GROUP}) @@ -1258,8 +1290,8 @@ show_info(){ VIDEO=$(lspci | sed -e '/VGA/!d' -e 's/^.*://') GLXINFO=$(glxinfo | sed '2,3!d') AUDIO=$(lspci | sed -e '/Audio/!d' -e 's/^.*://') - CMDLINE=$(cat /proc/cmdline) - VERSION=$(cat /etc/ublinux-release) + CMDLINE=$(< /proc/cmdline) + VERSION=$(< /etc/ublinux-release) if [ $(cmdline_parameter unionfs) ] ;then PROF_SIZE=$(df -h / |grep unionfs | awk '{print " ["$5"] total - "$2", free - "$4}') else diff --git a/ublinux/rc.preinit/10-accounts b/ublinux/rc.preinit/10-accounts index 58dea87..9c01c40 100755 --- a/ublinux/rc.preinit/10-accounts +++ b/ublinux/rc.preinit/10-accounts @@ -33,7 +33,7 @@ shopt -s extglob FILE_GROUP="${ROOTFS}/etc/group" FILE_GSHADOW="${ROOTFS}/etc/gshadow" FILE_DEFAULT_USERADD="${ROOTFS}/etc/default/useradd" - DATA_FILE_DEFAULT_USERADD=$(cat ${FILE_DEFAULT_USERADD}) + DATA_FILE_DEFAULT_USERADD=$(< ${FILE_DEFAULT_USERADD}) DEFAULT_HOME_USER="/home" NAME_REGEX="^[a-z_][-a-z0-9_]*\$" @@ -162,7 +162,7 @@ exec_03_add_groups(){ [[ -n ${COMMAND} ]] || local COMMAND="set=" local PARAM="$@" local GROUPADD_GROUPS= SELECT_GROUP= SELECT_GID= - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) # Загрузить файлы которые совпадают в каталогах /usr/lib/sysusers.d/ и /usr/share/ublinux-sysusers/. И загрузить которые уникальные в /usr/lib/sysusers.d/ local DATA_SYSUSERS=$(cat ${ROOTFS}/usr/lib/sysusers.d/*.conf ${ROOTFS}/usr/share/ublinux-sysusers/*.sysusers) if [[ -n ${PARAM} ]]; then @@ -232,7 +232,7 @@ exec_04_groupadd(){ local ARG_SELECT_USERS ARG_SELECT_GID SELECT_OPTIONAL ARG_SELECT_PASSWORD ARG_NON_UNIQUE local DATA_FILE_PASSWD REAL_SELECT_USERS REAL_SELECT_ADMINISTRATORS local FILE_GROUP="${ROOTFS}/etc/group" - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) local DATA_SYSUSERS=$(cat ${ROOTFS}/usr/lib/sysusers.d/*.conf ${ROOTFS}/usr/share/ublinux-sysusers/*.sysusers) if [[ -n ${PARAM} ]]; then local GROUPADD= @@ -452,8 +452,8 @@ exec_06_useradd(){ fi if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then [[ ${NOSECUREROOTPASSWD} == ${DEFAULTROOTPASSWD} ]] && ADDADM=yes - local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD}) - local DATA_FILE_GROUP=$(cat ${FILE_GROUP}) + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) useradd_local(){ local SELECT_USERNAME=$1 local SELECT_GECOS= SELECT_UID= SELECT_GROUP= SELECT_EXTRAGROUPS= SELECT_OPTIONAL= SELECT_PASSWORD= NULL= @@ -513,7 +513,7 @@ exec_06_useradd(){ if [[ -n ${SELECT_GROUP} && -n ${GROUPADD[${SELECT_GROUP}]} ]]; then # Если группа указана и присутствует в списке групп GROUPADD[.] exec_04_groupadd "GROUPADD[${SELECT_GROUP}]=${GROUPADD[${SELECT_GROUP}]}" - DATA_FILE_GROUP=$(cat ${FILE_GROUP}) + DATA_FILE_GROUP=$(< ${FILE_GROUP}) [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUP}":[^$'\n']+:([[:digit:]]+):.*($'\n'|$) ]] \ && SELECT_GROUP=${BASH_REMATCH[2]} elif [[ ${SELECT_GROUP} =~ ^[[:digit:]]+$ && ${SELECT_GROUP} == ${SELECT_UID} ]]; then @@ -633,7 +633,7 @@ exec_07_usershadow(){ [[ $(declare -p USERSHADOW 2>/dev/null) =~ ^"declare -A" ]] || declare -gA USERSHADOW local SELECT_USERNAME= SELECT_LASTCHANGED= SELECT_MINDAY= SELECT_MAXDAY= SELECT_WARN= SELECT_INACTIVE= SELECT_EXPIRE= NULL= local PARAM="$@" - local DATA_FILE_SHADOW=$(cat ${FILE_SHADOW}) + local DATA_FILE_SHADOW=$(< ${FILE_SHADOW}) if [[ -n ${PARAM} ]]; then local USERSHADOW declare -A USERSHADOW