From 2657895adba4070583f0b65793392f03c8be7bed Mon Sep 17 00:00:00 2001 From: asmeron Date: Fri, 29 Nov 2024 21:50:54 +0600 Subject: [PATCH] Fix fast null in shadow file --- ublinux/functions | 22 ++++++++++------ ublinux/rc.halt.pre/25-accounts-sync | 39 ++++++++++++++++++++-------- ublinux/templates/ublinux-data.ini | 27 ++++++++++++------- 3 files changed, 60 insertions(+), 28 deletions(-) diff --git a/ublinux/functions b/ublinux/functions index 1ff17f3..27fdeed 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -420,13 +420,15 @@ user_add(){ # Если нет изменений, то ничего не делать if [[ "${SELECT_USERNAME}" != "${VOL_FILEP_USERNAME}" && "${SELECT_PLAINPASSWORD}" != "${VOL_FILEP_PLAINPASSWORD}" || "${SELECT_UID}" != "${VOL_FILEP_UID}" || "${SELECT_GID}" != "${VOL_FILEP_GID}" || "${SELECT_GECOS}" != "${VOL_FILEP_GECOS}" \ || "${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 "/^${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}" 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 "/^${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}" 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}" } @@ -604,13 +606,15 @@ group_add(){ [[ ${SELECT_ADMINISTRATORS} == "+" ]] && SELECT_ADMINISTRATORS=${VOL_FILEGS_ADMINISTRATORS} # Если нет изменений, то ничего не делать 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 /^${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}" #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 /^${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}" #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}" @@ -1425,7 +1429,9 @@ ubconfig_exec_system(){ USERSHADOW\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit/10-accounts exec_07_usershadow "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; GROUPADD\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit/10-accounts exec_04_groupadd "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; USERADD_SYNC) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_useradd_sync ;; + USERADD_SYNC\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_useradd_sync ;; GROUPADD_SYNC) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_groupadd_sync ;; + GROUPADD_SYNC\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_groupadd_sync ;; *) NO_FIND_EXCUTE=1 ;; esac ;; diff --git a/ublinux/rc.halt.pre/25-accounts-sync b/ublinux/rc.halt.pre/25-accounts-sync index 5b0b287..7627bee 100755 --- a/ublinux/rc.halt.pre/25-accounts-sync +++ b/ublinux/rc.halt.pre/25-accounts-sync @@ -13,12 +13,22 @@ SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/users; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -# Синхронизировать пользователе системы в глобальную конфигурацию USERADD и USERSHADOW -## Синхронизация пользователей системы /etc/passwd с глобальной конфигурацией -## USERADD_SYNC[user_name]='boot,shutdown' -## user_name # Имя пользователя, необязательное поле. Если не указано, то применяется для всех пользователей -## boot # При загрузке системы принудительно применить глобальную конфигурацию на пользователя -## shutdown # При завершении работы системы синхронизировать указанных пользователей в системе с глобальной конфигурацией +## Синхронизация пользователей системы /etc/passwd и их параметры /etc/shadow с глобальной конфигурацией +## USERADD_SYNC='boot,shutdown,shutdown@all,shutdown@users,shutdown@systems,shutdown@-,shutdown@' +## boot # При загрузке системы принудительно применить глобальную конфигурацию на пользователя +## shutdown # Аналогичен shutdown@users + shutdown@systems +## shutdown@all # При завершении работы системы синхронизировать всех пользователей в системе с глобальной конфигурацией +## shutdown@users # При завершении работы системы синхронизировать пользователей 1000<=UID<=6000 в системе с глобальной конфигурацией +## shutdown@systems # При завершении работы системы синхронизировать системных пользователей 500<=UID<=999 в системе с глобальной конфигурацией +## shutdown@- # При завершении работы системы синхронизировать диапазон UID пользователей в системе с глобальной конфигурацией +## shutdown@ # При завершении работы системы синхронизировать UID пользователя в системе с глобальной конфигурацией +## USERADD_SYNC=boot,shutdown +## +## USERADD_SYNC[]='boot,shutdown' +## # Имя пользователя, необязательное поле. Если не указано, то применяется для всех пользователей +## boot # При загрузке системы принудительно применить глобальную конфигурацию на пользователя +## shutdown # При завершении работы системы синхронизировать указанного пользователя в системе с глобальной конфигурацией +## USERADD_SYNC[superadmin]=boot,shutdown exec_useradd_sync(){ set_ubconfig(){ local PARAM=$1 @@ -42,7 +52,6 @@ exec_useradd_sync(){ fi if [[ "$(declare -p USERADD_SYNC 2>/dev/null)" == "declare -A"* ]]; then while IFS= read -u3 SELECT_USER; do - #[[ ${USERADD_SYNC[${SELECT_USER}]} =~ 'shutdown' ]] && sync_user ${SELECT_USER} # В массиве 0 запись игнорируем, т.к. это параметр не ассоциативного массива if [[ ${SELECT_USER} != 0 && ${USERADD_SYNC[${SELECT_USER}]} =~ 'shutdown' ]]; then set_ubconfig "${SELECT_USER}" @@ -51,12 +60,20 @@ exec_useradd_sync(){ fi } -# Синхронизировать группы системы в глобальную конфигурацию GROUPADD ## Синхронизация группы системы /etc/groups и их параметры /etc/gshadow с глобальной конфигурацией -## GROUPADD_SYNC[group_name]='boot,shutdown' +## GROUPADD_SYNC='shutdown,shutdown@all,shutdown@users,shutdown@systems,shutdown@-,shutdown@' +## shutdown # Аналогичен shutdown@users + shutdown@systems +## shutdown@all # При завершении работы системы синхронизировать все группы в системе с глобальной конфигурацией +## shutdown@users # При завершении работы системы синхронизировать группы 1000<=GID<=6000 в системе с глобальной конфигурацией +## shutdown@systems # При завершении работы системы синхронизировать системные группы 500<=GID<=999 в системе с глобальной конфигурацией +## shutdown@- # При завершении работы системы синхронизировать диапазон GID групп в системе с глобальной конфигурацией +## shutdown@ # При завершении работы системы синхронизировать GID группы в системе с глобальной конфигурацией +## GROUPADD_SYNC=shutdown +## +## GROUPADD_SYNC[group_name]='shutdown' ## group_name # Имя группы, необязательное поле. Если не указано, то применяется для всех групп -## boot # При загрузке системы принудительно применить глобальную конфигурацию на группу -## shutdown # При завершении работы системы синхронизировать указанные группы в системе с глобальной конфигурацией +## shutdown # При завершении работы системы синхронизировать указанную группу в системе с глобальной конфигурацией +## GROUPADD_SYNC[users]='shutdown' exec_groupadd_sync(){ set_ubconfig(){ local PARAM=$1 diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 6f5d409..732d25c 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -323,6 +323,8 @@ VERSION= ## # Если не указаны дополнитеьные репозитории в параметре REPOSITORY[*] и включен любой режим песочницы, то активен только репозиторий 'modules' ## only # Включить управление списком репозиториев ## # Используются только репозитории указанные в параметре REPOSITORY[*] +## REPOSITORY=enable +## ## Порядок указания репозиториев важен ## По умолчанию включены системные репозитории, имена: core,extra,community,multilib,modules ## REPOSITORY[]=,,...,;;;disable @@ -353,7 +355,7 @@ VERSION= ## TrustAll # Если подпись проверена, она должна находиться в связке ключей, но ей не требуется назначать уровень доверия (например, неизвестное или предельное доверие) ## PackageTrustAll # Если подпись проверена только для пакетов ## DatabaseTrustAll # Если подпись проверена только для базы данных -## # Уровень использования этого репозитория. Не обязательный +## # Уровень использования этого репозитория. Список с разделителем запятая. Не обязательный ## *All # Включать все перечисленные функции для репозитория, по умолчанию ## Sync # Включать обновления для этого репозитория ## Search # Включать поиск этого репозитория @@ -409,12 +411,13 @@ VERSION= ## enable|yes # Включить ленивое зеркало ## disable|no|none # Выключить ленивое зеркало ## -## Если задано только "REPOPUBLIC_CACHE=enable" без указания рпозиториев пользователем, то создаётся зеркало по умолчанию, где "2405" версия текущего дистрибутива: -## : REPOPUBLIC_CACHE[ublinux_2405]=url@http://repo.ublinux.ru/2405,url@https://repo.ublinux.ru/2405 -## На клиенте необходимо указать: -## либо в файле "/etc/pacman.conf" у каждого репозитория: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch -## либо в файле "/etc/pacman.d/mirrorlist" для всех репозиториев: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch -## либо параметры в конфигурации REPOSITORY[core]='http://ipadress:8080/repo/ublinux_2204/$repo/$arch' +## Если задано только "REPOPUBLIC_CACHE=enable" без указания рпозиториев пользователем, то создаётся зеркало по умолчанию, где "2405" версия текущего дистрибутива: +## : REPOPUBLIC_CACHE[ublinux_2405]=url@http://repo.ublinux.ru/2405,url@https://repo.ublinux.ru/2405 +## На клиенте необходимо указать: +## либо в файле "/etc/pacman.conf" у каждого репозитория: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch +## либо в файле "/etc/pacman.d/mirrorlist" для всех репозиториев: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch +## либо параметры в конфигурации REPOSITORY[core]='http://ipadress:8080/repo/ublinux_2204/$repo/$arch' +## REPOPUBLIC_CACHE=enable ## ## REPOPUBLIC_CACHE[]= ## : # Параметр управления, возможные варианты: @@ -446,12 +449,16 @@ VERSION= ## Настройка автообновления системы ## AUTOUPDATE=enable -## enable # Включает автообновление. Параметрами по умолчанию: modsys boot core,extra,community,multilib,modules +## enable # Включает автообновление. Параметрами по умолчанию: AUTOUPDATE[mode]=modsys AUTOUPDATE[interval]=boot AUTOUPDATE[repos]=core,extra,community,multilib,modules +## AUTOUPDATE=enable +## ## Настройка режимов обновления ## AUTOUPDATE[mode]=*modsys|modules|system ## *modsys # Вначале обновлять все модули и после систему. Очищает параметр [update] REPOSITORY= ## modules # Обновлять только модули. Очищает параметр [update] REPOSITORY= ## system # Обновлять всё в порядке указанных репозиториев +## AUTOUPDATE[mode]=modsys +## ## Настройка интервала обновления ## AUTOUPDATE[interval]=*boot,30min|12h|*7d|1M ## *boot # Каждую загрузку @@ -459,10 +466,12 @@ VERSION= ## 12h # Каждые 12 часов, возможно указать любую цифру ## *7d # Каждые 7 дней, возможно указать любую цифру ## 1M # Один раз в месяц, возможно указать любую цифру +## AUTOUPDATE[interval]=boot +## ## TODO: Настройка репозиториев обновления ## AUTOUPDATE[repos]=,, ## # Имена репозиториев с которых будет происходить обновление. Если не указано, то по умолчанию все системные -## AUTOUPDATE=enable +## AUTOUPDATE[repos]=core,extra,community,multilib,modules ## ## Врямя проведения последнего обновления ## AUTOUPDATE[timestamp]=