diff --git a/ublinux/functions b/ublinux/functions index 309da1b..c3794cb 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -736,6 +736,8 @@ user_add_group(){ SELECT_GID=${VOL_FILEP_GID} [[ -n ${SELECT_GID} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_GID}":([^$'\n']*)($'\n'|$)+ ]] \ && SELECT_GROUPNAME=${BASH_REMATCH[2]} + # Убираем дубликаты групп + SELECT_GROUPS=$(sort -u <<< ${SELECT_GROUPS//,/$'\n'}); SELECT_GROUPS=${SELECT_GROUPS//$'\n'/,} # Проверяем, если группа является основной у пользователя, то исключить из списка групп SELECT_GROUPS=$(sed "s/^${SELECT_GROUPNAME}$//g;s/^${SELECT_GROUPNAME},//g;s/,${SELECT_GROUPNAME}$//g;s/,${SELECT_GROUPNAME},/,/g" <<< "${SELECT_GROUPS}") while IFS= read -ru4 SELECT_GROUPNAME; do diff --git a/ublinux/rc.halt.pre/25-accounts-sync b/ublinux/rc.halt.pre/25-accounts-sync index 4411cfb..09b2c0a 100755 --- a/ublinux/rc.halt.pre/25-accounts-sync +++ b/ublinux/rc.halt.pre/25-accounts-sync @@ -48,34 +48,43 @@ exec_useradd_sync(){ # Все пользователи кроме системных local UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") local UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + local STR_REMOVE_USERS=() [[ -n ${!USERADD[@]} ]] && while IFS= read -u3 SELECT_USER; do IFS=':' read -u4 SELECT_GECOS SELECT_UID NULL 4<<< ${USERADD[${SELECT_USER}]} if [[ ${SELECT_UID} == @(""|"x"|"X") ]] || [[ ${SELECT_UID} -ge ${UID_MIN} && ${SELECT_UID} -le ${UID_MAX} ]]; then - ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] USERADD[${SELECT_USER}] USERSHADOW[${SELECT_USER}] + STR_REMOVE_USERS+=("USERADD[${SELECT_USER}]") + STR_REMOVE_USERS+=("USERSHADOW[${SELECT_USER}]") fi done 3< <(printf "%s\n" "${!USERADD[@]}") + [[ ${#STR_REMOVE_USERS[@]} -ge 0 ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] "${STR_REMOVE_USERS[@]}" elif [[ ${PARAM} == '@systems' ]]; then # Удалить пользователей 500<=UID<=999 из глобальной конфигурации # Пользователи системные local UID_MIN_SYS=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") local UID_MAX_SYS=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + local STR_REMOVE_USERS=() [[ -n ${!USERADD[@]} ]] && while IFS= read -u3 SELECT_USER; do IFS=':' read -u4 SELECT_GECOS SELECT_UID NULL 4<<< ${USERADD[${SELECT_USER}]} if [[ ${SELECT_UID} != @(""|"x"|"X") && ${SELECT_UID} -ge ${UID_MIN_SYS} && ${SELECT_UID} -le ${UID_MAX_SYS} ]]; then - ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] USERADD[${SELECT_USER}] USERSHADOW[${SELECT_USER}] + STR_REMOVE_USERS+=("USERADD[${SELECT_USER}]") + STR_REMOVE_USERS+=("USERSHADOW[${SELECT_USER}]") fi done 3< <(printf "%s\n" "${!USERADD[@]}") + [[ ${#STR_REMOVE_USERS[@]} -ge 0 ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] "${STR_REMOVE_USERS[@]}" elif [[ ${PARAM} =~ ^([[:digit:]]+)'-'*([[:digit:]]*)$ ]]; then # Удалить пользователей X<=UID<=Y из глобальной конфигурации local UID_MIN=${BASH_REMATCH[1]} local UID_MAX=${BASH_REMATCH[2]} + local STR_REMOVE_USERS=() [[ -n ${UID_MAX} ]] || UID_MAX=${UID_MIN} [[ -n ${!USERADD[@]} ]] && while IFS= read -u3 SELECT_USER; do IFS=':' read -u4 SELECT_GECOS SELECT_UID NULL 4<<< ${USERADD[${SELECT_USER}]} if [[ ${SELECT_UID} != @(""|"x"|"X") && ${SELECT_UID} -ge ${UID_MIN} && ${SELECT_UID} -le ${UID_MAX} ]]; then - ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] USERADD[${SELECT_USER}] USERSHADOW[${SELECT_USER}] + STR_REMOVE_USERS+=("USERADD[${SELECT_USER}]") + STR_REMOVE_USERS+=("USERSHADOW[${SELECT_USER}]") fi done 3< <(printf "%s\n" "${!USERADD[@]}") + [[ ${#STR_REMOVE_USERS[@]} -ge 0 ]] && ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] "${STR_REMOVE_USERS[@]}" else # Входящий параметр - имя пользователя ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] USERADD[${PARAM}] USERSHADOW[${PARAM}] diff --git a/ublinux/rc.local.d/41-x11vnc b/ublinux/rc.local.d/41-x11vnc index 75cd51b..24975df 100755 --- a/ublinux/rc.local.d/41-x11vnc +++ b/ublinux/rc.local.d/41-x11vnc @@ -70,6 +70,7 @@ exec_x11vnc(){ #/usr/bin/x11vnc -showrfbauth /root/.vnc/passwd fi [[ -f /root/.vnc/.passwd ]] && OPTION_RFBAUTH_PASSWD="-rfbauth /root/.vnc/.passwd" + # Создать сервис x11vnc для дисплейного менеджера if systemctl --quiet is-enabled lightdm.service &>/dev/null || systemctl --quiet is-enabled lightdm-plymouth.service &>/dev/null; then #$(cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done) for ID_DISPLAY in /var/run/lightdm/root/:*; do @@ -87,7 +88,7 @@ After=graphical.target [Service] #ExecStartPre=/bin/sh -c 'while ! pgrep -U "root" Xorg; do sleep 2; done' ExecStart= -ExecStart=/usr/bin/x11vnc ${OPTION_GLOBAL} ${OPTION_PORT} ${OPTION_DISPLAY} ${OPTION_RFBAUTH_PASSWD} ${OPTION_LOG} ${X11VNC[options]} +ExecStart=/usr/bin/x11vnc ${X11VNC[options]} ${OPTION_PORT} ${OPTION_DISPLAY} ${OPTION_RFBAUTH_PASSWD} ${OPTION_LOG} ${OPTION_GLOBAL} Restart=always RestartSec=5 SuccessExitStatus=2 @@ -134,7 +135,7 @@ Description=VNC Server - ${X11VNC_NEW}" SERVICE_INSTALL="[Install] WantedBy=multi-user.target" fi - mkdir -p "${FILE_X11VNC_SERVICE%/*}" + mkdir -p "${FILE_X11VNC_SERVICE%/*}" cat << EOF > "${FILE_X11VNC_SERVICE}" ${SERVICE_UNIT} @@ -151,7 +152,7 @@ EOF [[ -f ${FILE_X11VNC_SERVICE} ]] && systemctl --quiet enable ${FILE_X11VNC_SERVICE##*/} &>/dev/null && systemctl --quiet restart ${FILE_X11VNC_SERVICE##*/} &>/dev/null fi done - else + else ## Если в режиме полного сохранения настройку убрали, то отключаем local DAEMON_RELOAD= [[ -f ${FILE_ROOT_USERS} ]] && sed "/X11VNC\[password\]=/d" -i "${FILE_ROOT_USERS}" @@ -159,7 +160,8 @@ EOF rm -f /root/.vnc/.passwd for FILE_X11VNC_SERVICE in /usr/lib/systemd/system/x11vnc-ublinux*.service; do if [[ -e ${FILE_X11VNC_SERVICE} ]]; then - systemctl --quiet disable --now ${FILE_X11VNC_SERVICE##*/} &>/dev/null + systemctl --quiet disable ${FILE_X11VNC_SERVICE##*/} &>/dev/null + systemctl --quiet stop ${FILE_X11VNC_SERVICE##*/} &>/dev/null rm -f ${FILE_X11VNC_SERVICE} DAEMON_RELOAD=yes fi diff --git a/ublinux/rc.post.d/10-brand-backgrounds b/ublinux/rc.post.d/10-brand-backgrounds index 2d05bf7..801b99f 100755 --- a/ublinux/rc.post.d/10-brand-backgrounds +++ b/ublinux/rc.post.d/10-brand-backgrounds @@ -35,7 +35,7 @@ ## ublinux_liveoffice ## ublinux_unknown ## STATE_MODE -## "changes" # Полное сохранение ub.mode=changes +## "changes" # Полное сохранение ub.mode=changes ## "toxzm" or "machines" # Сохранение в модуль ub.mode=toxzm ub.mode=machines ## "/" # Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes ## "" # Полная песочница RAM ub.mode= (clean); ub.home= @@ -284,7 +284,7 @@ insert_background_icon(){ xres=$(cmdline_value xres) && [[ -n ${xres} ]] && RESOLUTION=${xres} # Определение разрешения экрана - [[ -n $1 ]] && [[ $1 =~ ^([[:digit:]]+'x'[[:digit:]]+)$ ]] && RESOLUTION=${BASH_REMARCH[1]} + [[ -n $1 ]] && [[ $1 =~ ^([[:digit:]]+'x'[[:digit:]]+)$ ]] && RESOLUTION=${BASH_REMATCH[1]} [[ ${RESOLUTION} == "" ]] && get_max_resolution # Если не обнаружено ни одно разрешение, то статическое из /usr/lib/ublinux/default [[ ${RESOLUTION} == "" ]] && RESOLUTION=${BACKGROUND_RES} diff --git a/ublinux/rc.preinit/10-accounts b/ublinux/rc.preinit/10-accounts index 5ea5bad..0c12bb2 100755 --- a/ublinux/rc.preinit/10-accounts +++ b/ublinux/rc.preinit/10-accounts @@ -738,6 +738,8 @@ exec_08_user_members(){ [[ ${SELECT_EXTRAGROUPS} == @(""|"x") ]] && SELECT_EXTRAGROUPS="${USERGROUPS},${DEFAULTGROUP}" || SELECT_EXTRAGROUPS+=",${USERGROUPS},${DEFAULTGROUP}" [[ ${SELECT_UID} == ${ADMUID} && ${ADDADM} == "yes" ]] && SELECT_EXTRAGROUPS+=",${ADMGROUPS}" SELECT_EXTRAGROUPS="${SELECT_EXTRAGROUPS//;/,}"; SELECT_EXTRAGROUPS="${SELECT_EXTRAGROUPS//,,/,}" + # Убираем дубликаты групп + SELECT_EXTRAGROUPS=$(sort -u <<< ${SELECT_EXTRAGROUPS//,/$'\n'}); SELECT_EXTRAGROUPS=${SELECT_EXTRAGROUPS//$'\n'/,} [[ ${SELECT_EXTRAGROUPS} =~ ','$ ]] && SELECT_EXTRAGROUPS=${SELECT_EXTRAGROUPS%*,} [[ ${SELECT_EXTRAGROUPS:0:1} == "," ]] && SELECT_EXTRAGROUPS="${SELECT_EXTRAGROUPS:1}" # Создавать группы из параметра SELECT_EXTRAGROUPS @@ -749,7 +751,7 @@ exec_08_user_members(){ user_remove_group "$(printf "%s," "${!USERADD[@]}")" "%all" # Добавить пользователей в группы while IFS= read -ru3 SELECT_USERNAME; do - useradd_local ${SELECT_USERNAME} + useradd_local "${SELECT_USERNAME}" done 3< <(printf "%s\n" "${!USERADD[@]}" | sort -V) elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]] && [[ ${#USERADD[@]} -ne 0 ]]; then if [[ ${PARAM%%=*} =~ ^'USERADD['(.*)']' ]]; then diff --git a/ublinux/rc.preinit/50-install-pkg b/ublinux/rc.preinit/50-install-pkg index 1fc0bce..932e7d4 100755 --- a/ublinux/rc.preinit/50-install-pkg +++ b/ublinux/rc.preinit/50-install-pkg @@ -20,6 +20,11 @@ debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +exec_unblock_pacman(){ + # Снимаем блокировку с пакетного менеджера + rm -f ${ROOTFS}/var/lib/pacman/db.lck +} + exec_install_pkg_tar(){ LIST_PKG=$(find /memory/layer-base/*/install/preinit -type f -name "*.pkg.tar.*" -print 2>/dev/null) if [[ -n ${ROOTFS} && -n ${LIST_PKG} ]]; then @@ -42,4 +47,5 @@ exec_install_pkg_tar(){ # Если файл подключен как ресурс с функциями, то выйти return 0 2>/dev/null && return 0 + exec_unblock_pacman exec_install_pkg_tar $@ diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index e56d936..109b54a 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -1059,7 +1059,7 @@ VERSION= ## REALM_SSSD[services:sssd]=nss,pam,pac,ssh ## REALM_SSSD[default_shell:nss]=/bib/bash ## REALM_SSSD[ad_hostname:domain/mydomain.ru]=hostname.mydomain.ru -## +## ## Пользователи могут проходить аутентификацию в автономном режиме в течение 3 дней с момента последнего успешного входа в систему ## REALM_SSSD[offline_credentials_expiration:pam]=3 ## Короткие имена пользователей домена "user" | полные "user@domain.ru" [False|*True] @@ -1497,7 +1497,6 @@ VERSION= ## POLKIT[org.debian.pcsc-lite.access_pcsc]="yes:@users" ## POLKIT[org.debian.pcsc-lite.access_card]="yes:@users" - [/etc/ublinux/kiosk] ## Настройка режима киоска ################################################################################