diff --git a/ublinux/cron/readme.txt b/ublinux/cron/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/default b/ublinux/default index 29f22e7..e7b05a6 100644 --- a/ublinux/default +++ b/ublinux/default @@ -238,10 +238,11 @@ MKSQFS_OPTS="-b 32K -comp gzip" SAMBA_USERSHARE=enable AUTHPAM[minimal]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess" +AUTHPAM[local]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess" AUTHPAM[nis]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess" AUTHPAM[winbind]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess" AUTHPAM[sssd]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess,with-sudo,with-mdns4,with-mdns6,with-files-domain" -AUTHPAM=minimal +AUTHPAM=local JOURNALD[Storage]=persistent JOURNALD[Compress]=yes diff --git a/ublinux/functions b/ublinux/functions index ccaa2ee..344541f 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -1547,6 +1547,10 @@ ubconfig_exec_system(){ XFCE4_KIOSK\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc ;; XFCE4_KIOSK_USER_LOCKED) ${ROOTFS}/usr/lib/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc ;; XFCE4_KIOSK_USER_UNLOCKED) ${ROOTFS}/usr/lib/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc ;; + APPDESKTOP_PLACEONDESKTOP_INIT) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_02_place_on_desktop_init "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + APPDESKTOP_PLACEONDESKTOP_INIT\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_02_place_on_desktop_init "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + APPDESKTOP_PLACEONDESKTOP) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_03_place_on_desktop "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + APPDESKTOP_PLACEONDESKTOP\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_03_place_on_desktop "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; *) NO_FIND_EXCUTE=1 ;; esac ;; diff --git a/ublinux/rc.d/rc.desktop b/ublinux/rc.d/rc.desktop index 8ed2e35..4c9e143 100755 --- a/ublinux/rc.d/rc.desktop +++ b/ublinux/rc.d/rc.desktop @@ -5,10 +5,9 @@ ENABLED=yes NOEXEC="i3term:xbindkeys;i3term:fusion-icon;i3term:ublinuxupdate" -. /usr/lib/ublinux/functions -. /usr/lib/ublinux/default - -SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null DE=$(detectDE) cd $HOME diff --git a/ublinux/rc.d/rc.halt b/ublinux/rc.d/rc.halt index 2010c54..11479c9 100755 --- a/ublinux/rc.d/rc.halt +++ b/ublinux/rc.d/rc.halt @@ -1,5 +1,8 @@ #!/bin/bash +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + for a in /usr/lib/ublinux/rc.halt/* ;do [ -x $a ] && $a 2>/dev/null done diff --git a/ublinux/rc.d/rc.halt.pre b/ublinux/rc.d/rc.halt.pre index e17d556..455b4f1 100755 --- a/ublinux/rc.d/rc.halt.pre +++ b/ublinux/rc.d/rc.halt.pre @@ -1,5 +1,8 @@ #!/bin/bash +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + for a in /usr/lib/ublinux/rc.halt.pre/* ;do [ -x $a ] && $a 2>/dev/null done diff --git a/ublinux/rc.d/rc.local b/ublinux/rc.d/rc.local index cf2548c..d928736 100755 --- a/ublinux/rc.d/rc.local +++ b/ublinux/rc.d/rc.local @@ -1,11 +1,15 @@ #!/bin/bash +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + DEBUGMODE=no -. /usr/lib/ublinux/functions -. /usr/lib/ublinux/default -debug_mode "$0" "$@" -SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +debug_mode "$0" "$@" # We have to launch some rc scripts for a in /usr/lib/ublinux/rc.local.d/* ;do diff --git a/ublinux/rc.d/rc.network b/ublinux/rc.d/rc.network index f0d00e1..9f04119 100755 --- a/ublinux/rc.d/rc.network +++ b/ublinux/rc.d/rc.network @@ -1,15 +1,19 @@ #!/bin/bash +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + DEBUGMODE=no -. /usr/lib/ublinux/functions -. /usr/lib/ublinux/default -debug_mode "$0" "$@" -SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +debug_mode "$0" "$@" -# We have to launch some rc scripts -for a in /usr/lib/ublinux/rc.network.d/* ;do - [ -x $a ] && $a 2>/dev/null & -done + # We have to launch some rc scripts + for a in /usr/lib/ublinux/rc.network.d/* ;do + [ -x $a ] && $a 2>/dev/null & + done -true + true diff --git a/ublinux/rc.d/rc.pamaccount b/ublinux/rc.d/rc.pamaccount new file mode 100755 index 0000000..caffd69 --- /dev/null +++ b/ublinux/rc.d/rc.pamaccount @@ -0,0 +1,14 @@ +#!/bin/bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + + for SCRIPT in /usr/lib/ublinux/rc.pamaccount.d/*; do + [[ -x ${SCRIPT} ]] && ${SCRIPT} & + done + + true diff --git a/ublinux/rc.d/rc.pamauth b/ublinux/rc.d/rc.pamauth new file mode 100755 index 0000000..9015f94 --- /dev/null +++ b/ublinux/rc.d/rc.pamauth @@ -0,0 +1,14 @@ +#!/bin/bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + + for SCRIPT in /usr/lib/ublinux/rc.pamauth.d/*; do + [[ -x ${SCRIPT} ]] && ${SCRIPT} & + done + + true diff --git a/ublinux/rc.d/rc.pampassword b/ublinux/rc.d/rc.pampassword new file mode 100755 index 0000000..7d039b6 --- /dev/null +++ b/ublinux/rc.d/rc.pampassword @@ -0,0 +1,14 @@ +#!/bin/bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + + for SCRIPT in /usr/lib/ublinux/rc.pampassword.d/*; do + [[ -x ${SCRIPT} ]] && ${SCRIPT} & + done + + true diff --git a/ublinux/rc.d/rc.pamsession b/ublinux/rc.d/rc.pamsession new file mode 100755 index 0000000..9f2f165 --- /dev/null +++ b/ublinux/rc.d/rc.pamsession @@ -0,0 +1,14 @@ +#!/bin/bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + + for SCRIPT in /usr/lib/ublinux/rc.pamsession.d/*; do + [[ -x ${SCRIPT} ]] && ${SCRIPT} & + done + + true diff --git a/ublinux/rc.d/rc.post b/ublinux/rc.d/rc.post index 21c6f5a..59078df 100755 --- a/ublinux/rc.d/rc.post +++ b/ublinux/rc.d/rc.post @@ -1,7 +1,12 @@ #!/usr/bin/env bash +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + DEBUGMODE=no -. /usr/lib/ublinux/functions + +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + debug_mode "$0" "$@" for a in /usr/lib/ublinux/rc.post.d/* ;do diff --git a/ublinux/rc.d/rc.preinit b/ublinux/rc.d/rc.preinit index b012456..18fd9fe 100755 --- a/ublinux/rc.d/rc.preinit +++ b/ublinux/rc.d/rc.preinit @@ -1,5 +1,8 @@ #!/bin/bash +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 + PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin DEBUGMODE=no diff --git a/ublinux/rc.d/rc.xorg b/ublinux/rc.d/rc.xorg index d0e6b77..eee1435 100755 --- a/ublinux/rc.d/rc.xorg +++ b/ublinux/rc.d/rc.xorg @@ -1,7 +1,10 @@ -#!/bin/sh +#!/bin/bash -for a in /usr/lib/ublinux/rc.xorg/* ;do - [ -x $a ] && $a 2>/dev/null -done +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 -true + for a in /usr/lib/ublinux/rc.xorg/* ;do + [ -x $a ] && $a 2>/dev/null + done + + true diff --git a/ublinux/rc.d/readme.txt b/ublinux/rc.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.desktop/all/placeondesktop b/ublinux/rc.desktop/all/placeondesktop deleted file mode 100755 index 06a6778..0000000 --- a/ublinux/rc.desktop/all/placeondesktop +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -ENABLED=yes -[[ ${ENABLED} == yes ]] || exit 0 - -SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - -SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -SOURCE=${SYSCONF}/kiosk; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null - - -declare -A APPDESKTOP_PLACEONDESKTOP APPDESKTOP_PLACEONDESKTOP_INIT - -place_on_desktop_ubinstall(){ - [[ $(cmdline_value ub.sgnfiles) =~ .*"-iso.sgn" ]] && APPDESKTOP_PLACEONDESKTOP+=",${UBINSTALL_DESKTOP}" -} - -place_on_desktop_init(){ - [[ -f ${HOME}/.config/.desktopinitialized ]] && return 0 - if [[ -n ${APPDESKTOP_PLACEONDESKTOP_INIT[@]} ]]; then - for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do - APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]+=",${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" - touch ${HOME}/.config/.desktopinitialized - done - fi -} - -place_on_desktop(){ - copy_desktop(){ - local APPDESKTOP_PLACEONDESKTOP="$1" - APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/} - APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,} - [[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1} - [[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,} - find /usr/share/applications -type f $(awk 'NR > 1 {print "-o"}; {print "-name", $0".desktop"}' <<< "${APPDESKTOP_PLACEONDESKTOP//,/$'\n'}") | while IFS= read -r FIND_SELECT_DESKTOP; do - if [[ ! -f "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" ]]; then - cp -f "${FIND_SELECT_DESKTOP}" "${XDG_DESKTOP_DIR}" - #grep "#!/usr/bin/env xdg-open" "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" || sed -i 1s%^%'\#\!/usr/bin/env xdg-open\n'% "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" - chmod ugo+x "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" - fi - done - } - if [[ -n ${APPDESKTOP_PLACEONDESKTOP[@]} ]]; then - SOURCE=${HOME}/.config/user-dirs.dirs; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - [[ -n ${XDG_DESKTOP_DIR} ]] || XDG_DESKTOP_DIR="${HOME}/$(gettext -d xdg-user-dirs "Desktop")" - [[ -n ${XDG_DESKTOP_DIR} ]] || XDG_DESKTOP_DIR="${HOME}/Desktop" - [[ -d ${XDG_DESKTOP_DIR} ]] || mkdir -p "${XDG_DESKTOP_DIR}" - ID_GROUPS=$(id --name --groups) - for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP[@]}"; do - while IFS= read -r READ_USER_GROUP; do - [[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]] \ - && copy_desktop ${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]} - done <<< ${SELECT_USERS_GROUPS//,/$'\n'} - done - - fi -} - - -################ -##### MAIN ##### -################ - - place_on_desktop_ubinstall - place_on_desktop_init - place_on_desktop diff --git a/ublinux/rc.desktop/deonly/xfce4-placeondesktop-trust b/ublinux/rc.desktop/deonly/xfce4-placeondesktop-trust index 7bd6e05..9f703b8 100755 --- a/ublinux/rc.desktop/deonly/xfce4-placeondesktop-trust +++ b/ublinux/rc.desktop/deonly/xfce4-placeondesktop-trust @@ -1,4 +1,6 @@ #!/bin/bash +# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching +shopt -s extglob ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 @@ -11,11 +13,11 @@ SOURCE=${SYSCONF}/kiosk; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null declare -A APPDESKTOP_PLACEONDESKTOP APPDESKTOP_PLACEONDESKTOP_INIT -place_on_desktop_ubinstall(){ +01_place_on_desktop_ubinstall(){ [[ $(cmdline_value ub.sgnfiles) =~ .*"-iso.sgn" ]] && APPDESKTOP_PLACEONDESKTOP+=",${UBINSTALL_DESKTOP}" } -place_on_desktop_init(){ +02_place_on_desktop_init(){ [[ -f ${HOME}/.config/.desktopinitialized ]] && return 0 if [[ -n ${APPDESKTOP_PLACEONDESKTOP_INIT[@]} ]]; then for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do @@ -24,16 +26,17 @@ place_on_desktop_init(){ fi } -place_on_desktop_trust(){ +03_place_on_desktop_trust(){ trust_desktop(){ local APPDESKTOP_PLACEONDESKTOP="$1" APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/} + APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//@lock/} + APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//@dislock/} APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,} [[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1} [[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,} find "${XDG_DESKTOP_DIR}" -type f $(tr ',;' $'\n' <<< "${APPDESKTOP_PLACEONDESKTOP}" | awk 'NR > 1 {print "-o"}; {print "-name", $0".desktop"}') | while IFS= read -r FIND_SELECT_DESKTOP; do if ! gio info "${FIND_SELECT_DESKTOP}" | grep metadata::xfce-exe-checksum > /dev/null 2>&1; then - chmod ugo+x "${FIND_SELECT_DESKTOP}" gio set -t string "${FIND_SELECT_DESKTOP}" metadata::xfce-exe-checksum "$(sha256sum "${FIND_SELECT_DESKTOP}" | awk '{print $1}')" 2>/dev/null fi done @@ -47,19 +50,17 @@ place_on_desktop_trust(){ while IFS= read -r READ_USER_GROUP; do [[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]] \ && trust_desktop ${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]} - done <<< ${SELECT_USERS_GROUPS//,/$'\n'} + done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'} done fi - } ################ ##### MAIN ##### ################ - - /usr/lib/ublinux/rc.desktop/all/placeondesktop - place_on_desktop_ubinstall - place_on_desktop_init - place_on_desktop_trust + + 01_place_on_desktop_ubinstall + 02_place_on_desktop_init + 03_place_on_desktop_trust diff --git a/ublinux/rc.desktop/readme.txt b/ublinux/rc.desktop/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.domain.d/readme.txt b/ublinux/rc.domain.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.domain/readme.txt b/ublinux/rc.domain/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.halt.pre/readme.txt b/ublinux/rc.halt.pre/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.halt/readme.txt b/ublinux/rc.halt/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.local.d/98-ubpile b/ublinux/rc.local.d/98-ubpile index b7db2ac..a2e925d 100755 --- a/ublinux/rc.local.d/98-ubpile +++ b/ublinux/rc.local.d/98-ubpile @@ -254,8 +254,7 @@ exec_03_ubpile_reverse_proxy(){ fi if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ -n ${UBPILE_REVERSE_PROXY} ]]; then if [[ ${UBPILE_REVERSE_PROXY} == @(disable|no) ]]; then - systemctl --quiet stop haproxy-ubpile.service &>/dev/null - systemctl --quiet disable haproxy-ubpile.service &>/dev/null + stop_haproxy elif [[ ${UBPILE_REVERSE_PROXY} == @(enable|yes) ]]; then UBPILE_PORT="$(sed -En '/^\s*frontend http/,/^\s*backend/{s/^\s*bind.*:([[:digit:]]*).*/\1/p}' ${PATH_HAPROXY_UBPILE_CONF})" #[[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[web_direct_connect]} ]] || { ubconfig set [server] UBPILE[web_direct_connect]="true"; RESTART_UBPILE=yes; } @@ -275,8 +274,6 @@ exec_03_ubpile_reverse_proxy(){ [[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[web_direct_connect]} ]] && { ubconfig remove [server] UBPILE[web_direct_connect]; RESTART_UBPILE=yes; } [[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[base_app_url]} ]] && { ubconfig remove [server] UBPILE[base_app_url]; RESTART_UBPILE=yes; } stop_haproxy - systemctl --quiet stop haproxy-ubpile.service &>/dev/null - systemctl --quiet disable haproxy-ubpile.service &>/dev/null fi [[ -n ${RESTART_UBPILE} && -n ${APP_UBPILE} ]] && { systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null; message_motd; } [[ -n ${RESTART_UBPILE} && -n ${APP_UBPILE_WORKFLOW} ]] && systemctl --quiet is-active ubpile-workflow.service &>/dev/null && systemctl --quiet restart ubpile-workflow.service &>/dev/null diff --git a/ublinux/rc.local.d/readme.txt b/ublinux/rc.local.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.network.d/readme.txt b/ublinux/rc.network.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.pamaccount.d/readme.txt b/ublinux/rc.pamaccount.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.pamauth.d/readme.txt b/ublinux/rc.pamauth.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.pampassword.d/readme.txt b/ublinux/rc.pampassword.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.pamsession.d/01-placeondesktop b/ublinux/rc.pamsession.d/01-placeondesktop new file mode 100755 index 0000000..068b8b6 --- /dev/null +++ b/ublinux/rc.pamsession.d/01-placeondesktop @@ -0,0 +1,395 @@ +#!/usr/bin/env bash +# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching +shopt -s extglob + +ENABLED=yes +[[ ${ENABLED} == yes ]] || exit 0 + +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/kiosk; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null + +## Назначение модулей: +## account подтвердить личность, проверив учетные данные, такие как пароль, ключ, токен и другие +## auth проверить авторизацию для таких действий, как разрешения, ограничения и т. д. +## password обновить учетные данные +## session распределять ресурсы во время входа в систему, такие как личные данные, лимиты и другие. +## +## Выполнение из /etc/pam.d/system-login +## Тип модуля: session +## Глобальные переменные: +## PAM_RHOST Удалённый хост +## PAM_RUSER Удалённый пользователь +## PAM_SERVICE Сервис выполняющий вход /etc/pam.d/service_name +## PAM_TTY Консоль, может быть как "/dev/tty2" так и ":0" +## PAM_USER Текущий пользователь +## PAM_TYPE Тип сессии, возможные значения: account, auth, password, open_session, close_session +## +## PAM_RHOST= PAM_RUSER= PAM_SERVICE=login PAM_TTY=/dev/tty2 PAM_USER=superadmin PAM_TYPE=open_session +## PAM_RHOST= PAM_RUSER= PAM_SERVICE=login PAM_TTY=/dev/tty2 PAM_USER=superadmin PAM_TYPE=close_session +## PAM_RHOST= PAM_RUSER= PAM_SERVICE=lightdm-autologin PAM_TTY=:0 PAM_USER=superadmin PAM_TYPE=open_session +## PAM_RHOST= PAM_RUSER= PAM_SERVICE=systemd-user PAM_TTY= PAM_USER=lightdm PAM_TYPE=open_session +## PAM_RHOST= PAM_RUSER= PAM_SERVICE=systemd-user PAM_TTY= PAM_USER=user-2 PAM_TYPE=open_session +## PAM_RHOST= PAM_RUSER= PAM_SERVICE=lightdm PAM_TTY=:0 PAM_USER=user-2 PAM_TYPE=open_session +## PAM_RHOST=1.2.3.4 PAM_RUSER= PAM_SERVICE=sshd PAM_TTY=ssh PAM_USER=user-2 PAM_TYPE=open_session + + +if [[ ${PAM_TYPE} == "open_session" && -n ${PAM_USER} ]]; then +# Выполнение функции вызвано используя PAM, получаем имя пользователя вызвавшего PAM, будем пременять только для пользователя + SELECT_USER="${PAM_USER}" +fi + +declare -A APPDESKTOP_PLACEONDESKTOP APPDESKTOP_PLACEONDESKTOP_INIT + +exec_01_place_on_desktop_ubinstall(){ + [[ $(cmdline_value ub.sgnfiles) =~ .*"-iso.sgn" ]] && APPDESKTOP_PLACEONDESKTOP+=",${UBINSTALL_DESKTOP}" +} + +## На рабочий стол поместить ярлыки приложений из /usr/share/applications/ , только для нового пользователя +## APPDESKTOP_PLACEONDESKTOP_INIT[|<@groups>|*]=[@lock],[@lock] +## [] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель запятая(,) или точка с запятой(;) +## [<@groups>] # Применить для группы, пример: [@whell,@users] +## # Можно комбинировать группы с пользователями, пример: @wheel,user-1 +## [*] # Все пользователи системы. Если не указано, то все пользователи системы +## = # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop" +## =@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения +## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог "Рабочего стола" рекурсивно +## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог "Рабочего стола" рекурсивно +## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop@lock +## APPDESKTOP_PLACEONDESKTOP_INIT=gimp,pinta +exec_02_place_on_desktop_init(){ + [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift + [[ -n ${COMMAND} ]] || local COMMAND="set=" + [[ $(declare -p APPDESKTOP_PLACEONDESKTOP_INIT 2>/dev/null) =~ ^"declare -A" ]] || declare -gA APPDESKTOP_PLACEONDESKTOP_INIT + local PARAM="$@" + if [[ -n ${PARAM} ]]; then + local APPDESKTOP_PLACEONDESKTOP_INIT + declare -A APPDESKTOP_PLACEONDESKTOP_INIT + [[ ${PARAM%%=*} =~ [!\$%\&()*+/\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" + fi + if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#APPDESKTOP_PLACEONDESKTOP_INIT[@]} -ne 0 ]]; then + local ID_GROUPS= SELECT_USER_HOME= + for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do + while IFS= read -r READ_USER_GROUP; do + if [[ -n ${SELECT_USER} ]]; then + # Применить для PAM пользователя + [[ -z ${ID_GROUPS} ]] && ID_GROUPS=$(id --name --groups ${SELECT_USER}) + if [[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${SELECT_USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]]; then + SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6) + [[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue + copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init + fi + elif [[ ${READ_USER_GROUP} == "0" ]]; then + # Применить для всех пользователей + for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do + SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6) + [[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue + copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init + SELECT_USER_HOME= + done + SELECT_USER= + elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then + # Применить для выбанного пользователь + SELECT_USER=${READ_USER_GROUP} + SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6) + [[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue + copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init + SELECT_USER=; SELECT_USER_HOME= + elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then + # Применить для выбраной группа + for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do + SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6) + [[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue + copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init + SELECT_USER_HOME= + done + SELECT_USER= + fi + done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'} + done + elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then + if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' && ${BASH_REMATCH[1]} == @("*"|"**"|"/"|"//") ]]; then + PARAM_VALUE="${PARAM#*=}" + APPDESKTOP_PLACEONDESKTOP_INIT+="${PARAM_VALUE// /,}" + fi + local ID_GROUPS= SELECT_USER_HOME= + for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do + while IFS= read -r READ_USER_GROUP; do + if [[ ${READ_USER_GROUP} == "0" ]]; then + # Применить для всех пользователей + for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do + SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6) + remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && rm -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init + SELECT_USER_HOME= + done + SELECT_USER= + elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then + # Применить для выбанного пользователь + SELECT_USER=${READ_USER_GROUP} + SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6) + remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && rm -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init + SELECT_USER=; SELECT_USER_HOME= + elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then + # Применить для выбраной группа + for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do + SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6) + remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && rm -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init + SELECT_USER_HOME= + done + SELECT_USER= + fi + done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'} + done + fi + +} + +## На рабочий стол поместить ярлыки приложений из /usr/share/applications/ +## APPDESKTOP_PLACEONDESKTOP[|<@groups>|*]=[@lock],[@lock] +## [] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель запятая(,) или точка с запятой(;) +## [<@groups>] # Применить для группы, пример: [@whell,@users] +## # Можно комбинировать группы с пользователями, пример: @wheel,user-1 +## [*] # Все пользователи системы. Если не указано, то все пользователи системы +## = # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop" +## =@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения +## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог рабочего стола рекурсивно +## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог рабочего стола рекурсивно +## APPDESKTOP_PLACEONDESKTOP[superadmin,@wheel]=ubinstall,htop +## APPDESKTOP_PLACEONDESKTOP[user-1]=htop@lock +## APPDESKTOP_PLACEONDESKTOP[user-2]=*@lock +## APPDESKTOP_PLACEONDESKTOP=gimp,pinta +exec_03_place_on_desktop(){ + [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift + [[ -n ${COMMAND} ]] || local COMMAND="set=" + [[ $(declare -p APPDESKTOP_PLACEONDESKTOP 2>/dev/null) =~ ^"declare -A" ]] || declare -gA APPDESKTOP_PLACEONDESKTOP + local PARAM="$@" + if [[ -n ${PARAM} ]]; then + local APPDESKTOP_PLACEONDESKTOP + declare -A APPDESKTOP_PLACEONDESKTOP + [[ ${PARAM%%=*} =~ [!\$%\&()*+/\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" + fi + if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#APPDESKTOP_PLACEONDESKTOP[@]} -ne 0 ]]; then + local ID_GROUPS= SELECT_USER_HOME= + for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP[@]}"; do + while IFS= read -r READ_USER_GROUP; do + if [[ -n ${SELECT_USER} ]]; then + # Применить для PAM пользователя + [[ -z ${ID_GROUPS} ]] && ID_GROUPS=$(id --name --groups ${SELECT_USER}) + [[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${SELECT_USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]] \ + && copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}" + elif [[ ${READ_USER_GROUP} == "0" ]]; then + # Применить для всех пользователей + for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do + copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}" + SELECT_USER_HOME= + done + SELECT_USER= + elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then + # Применить для выбанного пользователь + SELECT_USER=${READ_USER_GROUP} + copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}" + SELECT_USER=; SELECT_USER_HOME= + elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then + # Применить для выбраной группа + for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do + copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}" + SELECT_USER_HOME= + done + SELECT_USER= + fi + done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'} + done + elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then + if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' && ${BASH_REMATCH[1]} == @("*"|"**"|"/"|"//") ]]; then + PARAM_VALUE="${PARAM#*=}" + APPDESKTOP_PLACEONDESKTOP+="${PARAM_VALUE// /,}" + fi + local ID_GROUPS= SELECT_USER_HOME= + for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP[@]}"; do + while IFS= read -r READ_USER_GROUP; do + if [[ ${READ_USER_GROUP} == "0" ]]; then + # Применить для всех пользователей + for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do + remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}" + SELECT_USER_HOME= + done + SELECT_USER= + elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then + # Применить для выбанного пользователь + SELECT_USER=${READ_USER_GROUP} + remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}" + SELECT_USER=; SELECT_USER_HOME= + elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then + # Применить для выбраной группа + for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do + remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}" + SELECT_USER_HOME= + done + SELECT_USER= + fi + done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'} + done + fi +} + +## +## $1 SELECT_USER +## $2 APPDESKTOP_PLACEONDESKTOP +## +copy_desktop(){ + local SELECT_USER="$1" + local APPDESKTOP_PLACEONDESKTOP="$2" + [[ -n ${SELECT_USER} ]] || return 1 + [[ -n ${APPDESKTOP_PLACEONDESKTOP} ]] || return 1 + if [[ -z ${SELECT_USER_HOME} ]]; then + SELECT_USER_HOME=$(getent passwd ${SELECT_USER} | cut -d: -f6) + [[ -n ${SELECT_USER_HOME} ]] || return 1 + local HOME=${SELECT_USER_HOME} + local XDG_DESKTOP_DIR= + SOURCE=${SELECT_USER_HOME}/.config/user-dirs.dirs; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + [[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/$(gettext -d xdg-user-dirs "Desktop")" + [[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/Desktop" + [[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || return 1 + fi + APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/} + APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,} + [[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1} + [[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,} + #find /usr/share/applications -type f $(awk 'NR > 1 {print "-o"}; {print "-name", $0".desktop"}' <<< "${APPDESKTOP_PLACEONDESKTOP//@(,|;)/$'\n'}") | while IFS= read -r FIND_SELECT_DESKTOP; do + while IFS= read -r FIND_SELECT_ITEM; do + local FIND_SELECT_DESKTOP_LOCK= + local FIND_SELECT_DESKTOP= + if [[ ${FIND_SELECT_ITEM} =~ (.+)"@lock"$ ]]; then + FIND_SELECT_DESKTOP="${BASH_REMATCH[1]}" + FIND_SELECT_DESKTOP_LOCK=yes + else + FIND_SELECT_DESKTOP=${FIND_SELECT_ITEM} + fi + if [[ -f ${FIND_SELECT_DESKTOP}.desktop ]]; then + FILE_DESKTOP="${FIND_SELECT_DESKTOP}.desktop" + elif [[ -f /usr/share/applications/${FIND_SELECT_DESKTOP}.desktop ]]; then + FILE_DESKTOP="/usr/share/applications/${FIND_SELECT_DESKTOP}.desktop" + elif [[ -f ${FIND_SELECT_DESKTOP} ]]; then + FILE_DESKTOP=${FIND_SELECT_DESKTOP} + fi + if [[ ${FIND_SELECT_DESKTOP} == "@lock" ]]; then + # Если система загружена в режимах песочницы без сохранённого профиля, то в AUFS не применить аттрибут immutable + #[[ ${SYSTEMBOOT_STATEMODE} == @(sandbox|sandbox_hdd) ]] + chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + chown -R root:root "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + chmod -R u+rwX,go-rwx "${XDG_DESKTOP_DIR}" + chmod -R u+rwX,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs" + setfacl -R -m u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + setfacl -R -m d:u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + chattr +i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + elif [[ ${FIND_SELECT_DESKTOP} == "@dislock" ]]; then + chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + chmod -R u+rwX,g+rX,g-w,o+rX,o-w "${XDG_DESKTOP_DIR}" + chmod -R u+rw,u-x,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs" + chown -R ${SELECT_USER}:${SELECT_USER} "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + elif [[ -n ${FILE_DESKTOP} ]]; then + [[ -f "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" ]] || cp -f "${FILE_DESKTOP}" "${XDG_DESKTOP_DIR}" + if [[ -n ${FIND_SELECT_DESKTOP_LOCK} ]]; then + chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + chown root:root "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + if [[ ${FILE_DESKTOP##*/} =~ .*".desktop"$ ]]; then + chmod o-rwx,ug+rwx "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + setfacl -m u:${SELECT_USER}:rx "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + else + chmod o-rwx,ug+rwX "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + setfacl -m u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + fi + chmod u+rw,u-x,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs" + setfacl -m u:${SELECT_USER}:r "${SELECT_USER_HOME}/.config/user-dirs.dirs" + chattr +i "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + else + chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" #2>/dev/null + setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + if [[ ${FILE_DESKTOP##*/} =~ .*".desktop"$ ]]; then + chmod -R u+rwx,g+rx,g-w,o+rx,o-w "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + else + chmod -R u+rwX,g+rX,g-w,o+rX,o-w "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + fi + chown ${SELECT_USER}:${SELECT_USER} "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + fi + #grep "#!/usr/bin/env xdg-open" "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" || sed -i 1s%^%'\#\!/usr/bin/env xdg-open\n'% "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" + fi + done <<< "${APPDESKTOP_PLACEONDESKTOP//@(,|;)/$'\n'}" +} + +## +## $1 SELECT_USER +## $2 APPDESKTOP_PLACEONDESKTOP +## +remove_desktop(){ + local SELECT_USER="$1" + local APPDESKTOP_PLACEONDESKTOP="$2" + [[ -n ${SELECT_USER} ]] || return 1 + [[ -n ${APPDESKTOP_PLACEONDESKTOP} ]] || return 1 + if [[ -z ${SELECT_USER_HOME} ]]; then + SELECT_USER_HOME=$(getent passwd ${SELECT_USER} | cut -d: -f6) + [[ -n ${SELECT_USER_HOME} ]] || return 1 + local HOME=${SELECT_USER_HOME} + local XDG_DESKTOP_DIR= + SOURCE=${SELECT_USER_HOME}/.config/user-dirs.dirs; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + [[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/$(gettext -d xdg-user-dirs "Desktop")" + [[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/Desktop" + [[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || return 1 + fi + APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/} + APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,} + [[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1} + [[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,} + while IFS= read -r FIND_SELECT_ITEM; do + local FIND_SELECT_DESKTOP_LOCK= + local FIND_SELECT_DESKTOP= + if [[ ${FIND_SELECT_ITEM} =~ (.+)"@lock"$ ]]; then + FIND_SELECT_DESKTOP="${BASH_REMATCH[1]}" + FIND_SELECT_DESKTOP_LOCK=yes + else + FIND_SELECT_DESKTOP=${FIND_SELECT_ITEM} + fi + if [[ -f ${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}.desktop ]]; then + FILE_DESKTOP="${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}.desktop" + elif [[ -f ${XDG_DESKTOP_DIR}//${FIND_SELECT_DESKTOP##*/} ]]; then + FILE_DESKTOP="${XDG_DESKTOP_DIR}//${FIND_SELECT_DESKTOP##*/}" + fi + if [[ ${FIND_SELECT_DESKTOP} == @("@lock"|"@dislock") ]]; then + chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" 2>/dev/null + setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + chmod -R u+rwX,g+rX,g-w,o+rX,o-w "${XDG_DESKTOP_DIR}" + chmod -R u+rw,u-x,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs" + chown -R ${SELECT_USER}:${SELECT_USER} "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" + elif [[ -n ${FILE_DESKTOP} ]]; then + [[ -f "${FILE_DESKTOP}" ]] && chattr -i "${FILE_DESKTOP}" && rm -f "${FILE_DESKTOP}" + fi + done <<< "${APPDESKTOP_PLACEONDESKTOP//@(,|;)/$'\n'}" +} + + +################ +##### MAIN ##### +################ + + + # Если файл подключен как ресурс с функциями, то выйти + return 0 2>/dev/null && return 0 + if [[ -z $@ ]]; then + while read -r FUNCTION; do + $"${FUNCTION##* }" + done < <(declare -F | grep "declare -f exec_") + else + FUNCTION= + while [[ $# -gt 0 ]]; do + [[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } + shift + done + eval ${FUNCTION#*; } + fi + true diff --git a/ublinux/rc.pamsession.d/readme.txt b/ublinux/rc.pamsession.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.post.d/readme.txt b/ublinux/rc.post.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.post/readme.txt b/ublinux/rc.post/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.preinit.d/10-system b/ublinux/rc.preinit.d/10-system index 29c57d1..5657de4 100755 --- a/ublinux/rc.preinit.d/10-system +++ b/ublinux/rc.preinit.d/10-system @@ -56,36 +56,6 @@ exec_udevrules(){ rm -f "${ROOTFS}/etc/udev/rules.d/${FILE_UDEV_70##*/}" fi } -exec_statemode(){ - ## Setting state mode - STATE_MODE=$(cmdline_value ub.mode) - STATE_HOME=$(cmdline_value ub.home) - ## Полное сохранение ub.mode=changes - if [[ ${STATE_MODE} =~ ^"changes"$ ]]; then - sed -e '$a\SYSTEMBOOT_STATEMODE=changes' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config - #sed "s/SYSTEMBOOT_STATEMODE=.*/SYSTEMBOOT_STATEMODE=changes/" -i ${SYSCONF}/config - ## Сохранение в модуль ub.mode=toxzm ub.mode=machines - elif [[ ${STATE_MODE} =~ ^("toxzm"|"machines")$ ]]; then - sed -e '$a\SYSTEMBOOT_STATEMODE=module' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config - #echo "SYSTEMBOOT_STATEMODE=module" >> ${SYSCONF}/config - ## Полная песочница RAM ub.mode= ; ub.home= - elif [[ ${STATE_MODE} == "" && ${STATE_HOME} == "" ]]; then - sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config - #echo "SYSTEMBOOT_STATEMODE=sandbox" >> ${SYSCONF}/config - ## Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes - elif [[ ${STATE_MODE} == "" && ${STATE_HOME} =~ ^"/" ]]; then - sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_ram_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config - #echo "SYSTEMBOOT_STATEMODE=sandbox_ram_home" >> ${SYSCONF}/config - ## Полная песочница HDD ub.mode=clear ; ub.home= - elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} == "" ]]; then - sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config - #echo "SYSTEMBOOT_STATEMODE=sandbox_hdd" >> ${SYSCONF}/config - ## Полная песочница HDD с сохранением профиля пользователя ub.mode=clear ; ub.home= - elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} =~ ^"/" ]]; then - sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config - #echo "SYSTEMBOOT_STATEMODE=sandbox_hdd_home" >> ${SYSCONF}/config - fi -} exec_enviroment(){ ## Установить переменные окружения глобальные и пользовательские ## ENVIROMENT[system:]= diff --git a/ublinux/rc.preinit.d/readme.txt b/ublinux/rc.preinit.d/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.preinit/06-statemode b/ublinux/rc.preinit/06-statemode new file mode 100755 index 0000000..7bb5b1b --- /dev/null +++ b/ublinux/rc.preinit/06-statemode @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 +DEBUGMODE=no + +[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +debug_mode "$0" "$@" + +SYSCONF="${ROOTFS}${SYSCONF}" + +exec_statemode(){ + ## Setting state mode + STATE_MODE=$(cmdline_value ub.mode) + STATE_HOME=$(cmdline_value ub.home) + if [[ ${STATE_MODE} =~ ^"changes"$ ]]; then + ## Полное сохранение ub.mode=changes + sed -e '$a\SYSTEMBOOT_STATEMODE=changes' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config + elif [[ ${STATE_MODE} =~ ^("toxzm"|"machines")$ ]]; then + ## Сохранение в модуль ub.mode=toxzm ub.mode=machines + sed -e '$a\SYSTEMBOOT_STATEMODE=module' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config + elif [[ ${STATE_MODE} == "" && ${STATE_HOME} == "" ]]; then + ## Полная песочница RAM ub.mode= ; ub.home= + sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config + elif [[ ${STATE_MODE} == "" && ${STATE_HOME} =~ ^"/" ]]; then + ## Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes + sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_ram_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config + elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} == "" ]]; then + ## Полная песочница HDD ub.mode=clear ; ub.home= + sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config + elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} =~ ^"/" ]]; then + ## Полная песочница HDD с сохранением профиля пользователя ub.mode=clear ; ub.home= + sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config + fi +} + + +################ +##### MAIN ##### +################ + + # Если файл подключен как ресурс с функциями, то выйти + return 0 2>/dev/null && return 0 + + exec_statemode $@ diff --git a/ublinux/rc.preinit/07-remounthome b/ublinux/rc.preinit/07-remounthome new file mode 100755 index 0000000..36caf95 --- /dev/null +++ b/ublinux/rc.preinit/07-remounthome @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 +DEBUGMODE=no + +[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +debug_mode "$0" "$@" + +SYSCONF="${ROOTFS}${SYSCONF}" +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +# Если система загружена в песочнице без HOME и HOME пустой, то HOME подключаем к TMPFS для того что-бы работал аттрибут immutable +exec_remounthome(){ + [[ ${SYSTEMBOOT_STATEMODE} == @(sandbox|sandbox_hdd) ]] && find ${ROOTFS}/home -maxdepth 0 -empty -exec mount -t tmpfs tmpfs {} \; +} + + +################ +##### MAIN ##### +################ + + # Если файл подключен как ресурс с функциями, то выйти + return 0 2>/dev/null && return 0 + + exec_remounthome $@ diff --git a/ublinux/rc.preinit/08-install-pkg b/ublinux/rc.preinit/08-install-pkg new file mode 100755 index 0000000..688559b --- /dev/null +++ b/ublinux/rc.preinit/08-install-pkg @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 +DEBUGMODE=no + +[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +debug_mode "$0" "$@" + +SYSCONF="${ROOTFS}${SYSCONF}" +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +exec_install_pkg_tar(){ + [[ -n $(find /memory/layer-base/*/install/preinit -type f -name "*.pkg.tar.*" -print 2>/dev/null) ]] || return 0 + if [[ -n ${ROOTFS} ]]; then + mount -t proc /proc /${ROOTFS}/proc + mount -t sysfs /sys /${ROOTFS}/sys + mount --bind /dev/ /${ROOTFS}/dev + LC_ALL=C LD_LIBRARY_PATH="${ROOTFS}/usr/lib" find /memory/layer-base/*/install/preinit -type f -name "*.pkg.tar.*" -exec ${ROOTFS}/usr/bin/pacman --quiet --sysroot ${ROOTFS} -U --noprogressbar --noconfirm {} + + umount /${ROOTFS}/dev + umount /${ROOTFS}/sys + umount /${ROOTFS}/proc + else + find /memory/layer-base/*/install/preinit -type f -name "*.pkg.tar.*" -exec pacman --quiet -U --noprogressbar --noconfirm {} + + fi +} + +################ +##### MAIN ##### +################ + + # Если файл подключен как ресурс с функциями, то выйти + return 0 2>/dev/null && return 0 + + exec_install_pkg_tar $@ diff --git a/ublinux/rc.preinit/readme.txt b/ublinux/rc.preinit/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.runonce/readme.txt b/ublinux/rc.runonce/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/rc.xorg/readme.txt b/ublinux/rc.xorg/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index fff69cf..7bbac04 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -249,7 +249,7 @@ VERSION= ## USERSHADOW[superadmin]=18009:0:120:7:14: ## Синхронизация пользователей системы /etc/passwd и их параметры /etc/shadow с глобальной конфигурацией -## USERADD_SYNC='boot,shutdown,shutdown@all,shutdown@users,shutdown@systems,shutdown@-,shutdown@' +## USERADD_SYNC='boot,shutdown,shutdown@all,shutdown@users,shutdown@systems,shutdown@-,shutdown@' ## boot # При загрузке системы принудительно применить глобальную конфигурацию на пользователя ## shutdown # Аналогичен shutdown@users + shutdown@systems ## shutdown@all # При завершении работы системы синхронизировать всех пользователей в системе с глобальной конфигурацией @@ -476,17 +476,50 @@ VERSION= ## по умолчанию PUBLICDIR=/home/public #PUBLICDIR= -## Автомонтирование сетевых ресурсов -## Пароль кодировать в base64: echo 'password' | base64 -## AUTOMOUNT_SHARE[mountpoint]='cifs:share:username:password_base64:domain:opt' -## AUTOMOUNT_SHARE[/mnt/cifs:share]='cifs://192.168.103.55/share:user:password_base64:domain:noperm,vers=1.0' -## AUTOMOUNT_SHARE[/media/sdb1]='direct:/dev/sdb1:wheel:775:noacl' -## AUTOMOUNT_SHARE[/media/mytag]='virtiofs:mytag:wheel:775:' -## AUTOMOUNT_SHARE[/mnt/sshfs/user-1@192.168.1.1]='sshfs:superadmin@192.168.1.1:/home/user-1:password_base64:' -#AUTOMOUNT_SHARE[/mnt/share2]='cifs://192.168.103.55/share2:share:password_base64:domain:noperm,vers=1.0' +## Автомонтирование ресурсов +## AUTOMOUNT_SHARE[]='cifs::[]:[]:[]:[]' +## # Точка монтирования. Пример: /media/share_srv +## # Сетевой путь. Пример: //192.168.1.1/share +## # Имя пользователя +## # Если не указан, то используется: anonymouse +## # Пароль пользователя. Пароль кодировать в base64: base64 <<< 'password' +## # Если не указан, то без пароля +## # Имя домена. Пример: ubdomain.ru +## # Опции подключения. Пример: noperm,vers=1.0 +#AUTOMOUNT_SHARE[/media/cifs:share]='cifs://192.168.103.55/share:user:password_base64:domain:noperm,vers=1.0' +#AUTOMOUNT_SHARE[/media/share2]='cifs://192.168.103.55/share2:share:password_base64:domain:noperm,vers=1.0' +## +## AUTOMOUNT_SHARE[]='direct::[]:[]:[]' +## # Точка монтирования. Пример: /media/direct:sdb1 +## # Устройство подключения +## # Назначенная группа на точку монтирования. Пример: users +## # Назначенные права доступа. Пример: 775 +## # Опции подключения. Пример: noacl +#AUTOMOUNT_SHARE[/media/direct:sdb1]='direct:/dev/sdb1:wheel:775:noacl' #AUTOMOUNT_SHARE[/media/sda4]='direct:/dev/sda4:wheel:775:noacl' -#AUTOMOUNT_SHARE[/mnt/sshfs/user-1@192.168.1.1]='sshfs:superadmin@192.168.1.1:/home/user-1:password_base64:' -#AUTOMOUNT_SHARE[/mnt/nfs/user-1@192.168.1.1]='nfs:192.168.1.1:/home/user-1' +## +## AUTOMOUNT_SHARE[]='virtiofs::[]:[]:[]' +## # Точка монтирования. Пример: /media/virtiofs:mytag +## # Объявленный тег virtiofs. Пример: mytag +## # Назначенная группа на точку монтирования. Пример: users +## # Назначенные права доступа. Пример: 775 +## # Опции подключения. Пример: +#AUTOMOUNT_SHARE[/media/mytag]='virtiofs:mytag:wheel:775:' +## +## AUTOMOUNT_SHARE[]='sshfs:@:::[]' +## # Точка монтирования. Пример: /media/sshfs:superadmin@192.168.1.1 +## # Имя пользователя. Пример: superadmin +## # Адрес или имя хоста. Пример: 192.168.1.1 +## # Путь каталога который будет подключен. Пример: /home/superadmin +## # Пароль пользователя. Пароль кодировать в base64: base64 <<< 'password' +## # Опции подключения. Пример: +#AUTOMOUNT_SHARE[/mnt/sshfs:user-1@192.168.1.1]='sshfs:user-1@192.168.1.1:/home/user-1:password_base64:' +## +## AUTOMOUNT_SHARE[]='nfs::' +## # Точка монтирования. Пример: /media/nfs:user1@192.168.1.1 +## # Адрес или имя хоста. Пример: 192.168.1.1 +## # Путь каталога который будет подключен. Пример: /home/superadmin +#AUTOMOUNT_SHARE[/mnt/nfs:user-1@192.168.1.1]='nfs:192.168.1.1:/home/user-1' ## Mount local partitions ## Подключение всех разделов при старте @@ -1148,10 +1181,14 @@ VERSION= ## # mountpoint for bind mounts (see --bind/rbind) ## # regular file for loopdev setup ## : # Разделение , или ; +## acl # Включить POSIX ACL +## noacl # Отключить POSIX ACL +## udba=notify # Для AUFS устанавливает либо «fsnotify», либо «inotify» для всех каталогов, к которым осуществляется доступ, в своих ветвях и получает событие об этом каталоге и его дочерних элементах ## nosuid # Block the operation of suid, and sgid bits. | Блокировать работу suid и sgid бит. ## nodev # Don't interpret block special devices on the filesystem. | Не интерпретируйте блокировку специальных устройств в файловой системе. ## noexec # Don't allow the execution of executable binaries | Не позволить выполнять исполняемые двоичные файлы ## nosymfollow # Don't follow symlinks when resolving paths | Не переходить по символическим ссылкам при разрешении путей +## MOUNT_ATTR[/]=acl,udba=notify ## MOUNT_ATTR[/home]=nosuid,nodev,noexec,nosymfollow ## MOUNT_ATTR[/tmp,/dev/shm]=nosuid,nodev,noexec @@ -1375,29 +1412,25 @@ VERSION= ## # Можно комбинировать группы с пользователями, пример: @wheel,user-1 ## [*] # Все пользователи системы. Если не указано, то все пользователи системы ## = # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop" -## =@lock # Файл *.desktop с установленным владельцем:группой root:root и правами на файл 770 -## =*@lock # Установить владельца:группу root:root и права на каталог рабочего стола рекурсивно 777 -## # Права устанавливаются только при наличии домашнего каталога пользователя, -## # если пользователь доменный, и нет рабочего каталога, то права будут применены только после перезагрузки -## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop:700 +## =@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения +## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог "Рабочего стола" рекурсивно +## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог "Рабочего стола" рекурсивно +## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop@lock ## APPDESKTOP_PLACEONDESKTOP_INIT=gimp,pinta ## На рабочий стол поместить ярлыки приложений из /usr/share/applications/ -## APPDESKTOP_PLACEONDESKTOP[|<@groups>|*]=[:777][:ugo-rwx],[:777][:ugo-rwx] +## APPDESKTOP_PLACEONDESKTOP[|<@groups>|*]=[@lock],[@lock] ## [] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель запятая(,) или точка с запятой(;) ## [<@groups>] # Применить для группы, пример: [@whell,@users] ## # Можно комбинировать группы с пользователями, пример: @wheel,user-1 ## [*] # Все пользователи системы. Если не указано, то все пользователи системы ## = # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop" -## =:700 # Файл *.desktop с установленным владельцем:группой root:root и правами на файл 777 -## =:ugo-rx # Файл *.desktop с установленным владельцем:группой root:root и правами на файл ugo+-rwx -## =*:700 # Установить владельца:группу root:root и права на каталог рабочего стола рекурсивно 777 -## =*:ugo-w # Установить владельца:группу root:root и права на каталог рабочего стола рекурсивно ugo+-rwx -## # Права устанавливаются только при наличии домашнего каталога пользователя, -## # если пользователь доменный, и нет рабочего каталога, то права будут применены только после перезагрузки +## =@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения +## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог рабочего стола рекурсивно +## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог рабочего стола рекурсивно ## APPDESKTOP_PLACEONDESKTOP[superadmin,@wheel]=ubinstall,htop -## APPDESKTOP_PLACEONDESKTOP[user-1]=htop:700 -## APPDESKTOP_PLACEONDESKTOP[user-2]=*:700 +## APPDESKTOP_PLACEONDESKTOP[user-1]=htop@lock +## APPDESKTOP_PLACEONDESKTOP[user-2]=*@lock ## APPDESKTOP_PLACEONDESKTOP=gimp,pinta [/etc/ublinux/desktop] @@ -1721,15 +1754,23 @@ VERSION= ## # Обязательные параметры: AUTOINSTALL[device] #AUTOINSTALL[install_type]=fast +## Тип загрузки системы с устройства +## AUTOINSTALL[boot]=*bios+efi|bios|efi|none +## *bios+efi # Гибридная установка Bios_boot + EFI. По умолчанию +## bios # Только Bios Boot сектор +## efi # Только EFI разел +## none # Не создавать BIOS/EFI разделы +## AUTOINSTALL[bios_boot]=bios+efi + ## Устройство на которое будет установлена система. Если установлена опция AUTOINSTALL[device_type], то возможно пречислять через запятую (,) несколько устройств ## AUTOINSTALL[device]=[,] ## AUTOINSTALL[device]=sda ## AUTOINSTALL[device]=sda,sdb,sdc,sde ## Тип виртуального устройств из выбранных физических, используется для рейда MDADM или LVM и другие -## AUTOINSTALL[device_type]= -## # Тип виртуального устройства, доступные типы: *plain|raid0|raid1|raid4|raid5|raid6|raid10|lvm|lvm_dynamic -## AUTOINSTALL[device_type]=*plain +## AUTOINSTALL[device_typevfs]= +## # Тип виртуального устройства, доступные типы: *none|raid0|raid1|raid4|raid5|raid6|raid10|lvm|lvm_dynamic +## AUTOINSTALL[device_typevfs]=*none ## Раздел на который будет установлена система (part)/ublinux и пользовательские данные(part)/ublinux-data ## Если указан второй раздел через запятую (,) то установка разделится на (part1)/ublinux (part2)/ublinux-data