From 0ab05a0cdf5b05fac92ac6d4b89a30896fb5f86d Mon Sep 17 00:00:00 2001 From: asmeron Date: Thu, 11 Dec 2025 14:34:58 +0600 Subject: [PATCH] Fix 20-grub --- ublinux/rc.halt.pre/20-grub | 7 ++++--- ublinux/rc.local.d/10-sudoers | 33 ++++++++++++++++++------------ ublinux/templates/ublinux-data.ini | 12 +++++++++-- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/ublinux/rc.halt.pre/20-grub b/ublinux/rc.halt.pre/20-grub index b9bfe8f..8be8ce6 100755 --- a/ublinux/rc.halt.pre/20-grub +++ b/ublinux/rc.halt.pre/20-grub @@ -31,13 +31,13 @@ control_grub_var_cfg(){ local STR_EXPORT=${3} if [[ -n ${STR_SET_VALUE} ]]; then grep -q "${STR_EXPORT}" ${FILE_GRUB_VAR_USER} 2>/dev/null || echo -e "${STR_EXPORT}" >> ${FILE_GRUB_VAR_USER} - if ! grep -q "^\s*${STR_SET}${STR_SET_VALUE}\s*$" ${FILE_GRUB_VAR_USER} 2>/dev/null; then + if ! grep -q "^\s*$(ere_quote_grep "${STR_SET}${STR_SET_VALUE}")\s*$" ${FILE_GRUB_VAR_USER} 2>/dev/null; then local QUOTA [[ ${STR_SET_VALUE} =~ " " ]] && QUOTA="\"" if grep -q "${STR_SET}" ${FILE_GRUB_VAR_USER} 2>/dev/null; then - sed -E "s/^\s*(${STR_SET}).*/\1${QUOTA}${STR_SET_VALUE}${QUOTA}/" -i ${FILE_GRUB_VAR_USER} + sed -E "s/^\s*(${STR_SET}).*/\1$(ere_quote_sed "${QUOTA}${STR_SET_VALUE}${QUOTA}")/" -i ${FILE_GRUB_VAR_USER} else - sed "/${STR_EXPORT}/i${STR_SET}${QUOTA}${STR_SET_VALUE}${QUOTA}" -i ${FILE_GRUB_VAR_USER} + sed -E "/${STR_EXPORT}/i$(ere_quote_sed "${STR_SET}${QUOTA}${STR_SET_VALUE}${QUOTA}")" -i ${FILE_GRUB_VAR_USER} fi fi elif grep -q "${STR_SET}" ${FILE_GRUB_VAR_USER} 2>/dev/null; then @@ -210,6 +210,7 @@ exec_grub_kernel_boot(){ control_grub_var_cfg "set UBLINUX_FILE=" "${STR_SET_VALUE_UBLINUX}" "export UBLINUX_FILE" [[ -n ${STR_SET_VALUE_ADDOD} ]] && STR_SET_VALUE_ADDOD="\${PATH_DISTR_BOOT}/${STR_SET_VALUE_ADDOD}" control_grub_var_cfg "set ADDON_FILE=" "${STR_SET_VALUE_ADDOD}" "export ADDON_FILE" + true } ################ diff --git a/ublinux/rc.local.d/10-sudoers b/ublinux/rc.local.d/10-sudoers index 4654a8f..baa88e8 100755 --- a/ublinux/rc.local.d/10-sudoers +++ b/ublinux/rc.local.d/10-sudoers @@ -1,21 +1,28 @@ -#!/bin/bash +#!/usr/bin/bash ENABLED=yes -[[ ${ENABLED} == "yes" ]] || exit 0 +[[ ${ENABLED} == yes ]] || exit 0 DEBUGMODE=no -ALLOWEDSUDO=ldconfig,ubupdate,ntpdate -PATH=/usr/lib/ublinux/scripts:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin: +PATH=/usr/lib/ublinux/scripts:/usr/bin:/bin:/sbin:/usr/local/bin:/usr/local/sbin -. /usr/lib/ublinux/functions -. /usr/lib/ublinux/default - -SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +ALLOWED_SUDO="ldconfig,ubupdate,ntpdate" +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" -echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers.d/ubwheel -for a in $(echo $ALLOWEDSUDO | tr ',;' ' ') ;do - b=$(which $a 2>/dev/null) - grep -sq "NOPASSWD: $b" /etc/sudoers.d/ubnopasswd || echo "%users ALL=NOPASSWD: $b" >> /etc/sudoers.d/ubnopasswd -done +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +FILE_UBWHEEL="/etc/sudoers.d/ubwheel" +[[ -w ${FILE_UBWHEEL} ]] && chmod 440 ${FILE_UBWHEEL} || install -Dm0440 -o root -g root /dev/null ${FILE_UBWHEEL} +[[ $(< ${FILE_UBWHEEL}) =~ (^|$'\n')"%wheel ALL=(ALL) ALL"($'\n'|$) ]] || echo "%wheel ALL=(ALL) ALL" >> ${FILE_UBWHEEL} + +FILE_UBNOPASSWD="/etc/sudoers.d/ubnopasswd" +[[ -w ${FILE_UBNOPASSWD} ]] && chmod 440 ${FILE_UBNOPASSWD} || install -Dm0440 -o root -g root /dev/null ${FILE_UBNOPASSWD} +[[ -w ${FILE_UBNOPASSWD} ]] && DATA_UBNOPASSWD=$(< ${FILE_UBNOPASSWD}) +[[ -n ${ALLOWED_SUDO} && -w ${FILE_UBNOPASSWD} ]] && while IFS= read -ru3 SELECT_APP; do + SELECT_APP=$(which ${SELECT_APP} 2>/dev/null) + [[ -n ${SELECT_APP} ]] || continue + [[ ${DATA_UBNOPASSWD} =~ (^|$'\n')"%users ALL=NOPASSWD: ${SELECT_APP}"($'\n'|$) ]] || echo "%users ALL=NOPASSWD: ${SELECT_APP}" >> ${FILE_UBNOPASSWD} +done 3< <(tr ',;' '\n' <<< ${ALLOWED_SUDO}) \ No newline at end of file diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 27a6665..5a0f1d6 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -231,6 +231,11 @@ VERSION= ## USERADD=no|none|disable # Отключить управление пользователями конфигурации ## USERADD[]=':::::' ## # Имя пользователя, обязательное поле +## # Разрешено только латинские символы +## # Разрешёно regexp [a-zA-Z_][a-zA-Z0-9_-]* +## # Разрешено начинать имя логина только c [a-zA-Z_] +## # Разрешено использовать символы в имени логина [a-zA-Z0-9_-] +## # Ограничение максимально в 32 символов ## # Поле GECOS, с подробным описанием пользователя, можно локализованное, не обязательное ## # UID пользователя, если необходимо автоматически рассчитывать, то оставить пустым или 'x' ## # Если не указан и существует каталог /home/ , то будет взят у этого каталога @@ -248,7 +253,9 @@ VERSION= ## -N, --no-user-group # Не создавать группу с тем же именем что и у пользователя ## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID, использовать только совместно с параметром ## --badnames # Не проверять имя на несоответствие правилам использования символов -## # Хеш пароля пользователя +## # Хеш пароля пользователя, +## # Разрешено использовать только ланинские символы +## # Ограничение в 256 символов ## # Если пароль пустой или состоит из символа 'x', то 'password=${DEFAULTPASSWD}' ## # Если user_name=root, то пароль не применяется, а используется password=${DEFAULTROOTPASSWD} ## # Если пароль состоит из символов ' ' (пробел), то вход без пароля @@ -656,7 +663,8 @@ VERSION= ## RuntimeMaxUse # Указывает максимальное дисковое пространство, которое можно использовать в энергозависимом хранилище (в файловой системе /run) ## RuntimeKeepFree # Указывает объем пространства, которое будет выделено для других целей при записи данных в энергозависимое хранилище (в файловой системе /run) ## RuntimeMaxFileSize # Указывает объем места, которое отдельный файл журнала может занимать в энергозависимом хранилище (в файловой системе /run) перед ротацией -## ForwardToConsole # Перенаправить журнал на консоль, yes|no +## ForwardToConsole # Перенаправить журнал в консоль, yes|no +## ForwardToSyslog # Перенаправить журнал в syslog, yes|no ## TTYPath # Измените используемый консольный TTY, если используется ForwardToConsole=yes. По умолчанию /dev/console. ## MaxLevelConsole # Тип сообщений перенаправляемые в журнал, варианты: emerg|alert|crit|err|warning|notice|info|debug или целочисленные значения в диапазоне 0–7 ## # Значение переменной настройки журнала