diff --git a/ublinux/rc.preinit.d/56-security b/ublinux/rc.preinit.d/56-security index 5844e9a..9c91d7b 100755 --- a/ublinux/rc.preinit.d/56-security +++ b/ublinux/rc.preinit.d/56-security @@ -21,6 +21,23 @@ SYSCONF="${ROOTFS}/${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/security; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +exec_openssl_gost(){ +## Настройка OpenSSL ГОСТ + FILE_OPENSSL_CONF="${ROOTFS}/etc//etc/ssl/openssl.cnf" + FILE_OPENSSL_GOST_CONF="${ROOTFS}/etc//etc/ssl/gost.cnf" + TXT_OPENSSL_GOST_CONF="$(sed -r '/^\s*$/d' "${FILE_OPENSSL_GOST_CONF}")" + TXT_ENABLE_GOST_CONF="openssl_conf = openssl_gost" + + if [[ ${OPENSSL_GOST,,} == @(y|yes|enable) ]]; then + # Enable GOST + grep -q "${TXT_ENABLE_GOST_CONF}" "${FILE_OPENSSL_CONF}" || sed "0,/^[a-zA-Z0-9\[]/s//${TXT_ENABLE_GOST_CONF}\n&/" -i "${FILE_OPENSSL_CONF}" + grep -q "${TXT_OPENSSL_GOST_CONF%%$'\n'*}" "${FILE_OPENSSL_CONF}" || cat ${FILE_OPENSSL_GOST_CONF} >> "${FILE_OPENSSL_CONF}" + elif [[ ${OPENSSL_GOST,,} == @(n|no|disable) ]]; then + ## Disable GOST + sed "/${TXT_ENABLE_GOST_CONF}/d" -i "${FILE_OPENSSL_CONF}" + sed "/${TXT_OPENSSL_GOST_CONF%%$'\n'*}/,/${TXT_OPENSSL_GOST_CONF##*$'\n'}/d" -i "${FILE_OPENSSL_CONF}" + fi +} exec_access_denied_vtx11(){ FILE_XORGDONTVTSWITCH_CONF="${ROOTFS}/etc/X11/xorg.conf.d/ublinux-disable-vt.conf" FILE_SYSTEMDLOGIND_CONF="${ROOTFS}/etc/systemd/logind.conf.d/ublinux-disable-vt.conf" @@ -73,6 +90,40 @@ exec_access_denied_login(){ done fi } +exec_access_allowed_suid(){ +## Отключить влияние SUID бита на привилегии порождаемого процесса всем, кроме указанных в ACCESS_ALLOWED_SUID + if [[ -n ${ACCESS_ALLOWED_SUID[@]} ]]; then + for PATH_WORK_SUID in "${!ACCESS_ALLOWED_SUID[@]}"; do + EXCLUDE_SUID=$(tr , $'\n' <<< ${ACCESS_ALLOWED_SUID[${PATH_WORK_SUID}]}) + find ${PATH_WORK_SUID} -type f -perm /u=s $(printf "! -name %s " ${EXCLUDE_SUID}) -exec chmod u-s {} + + done + fi +} +exec_access_allowed_sgid(){ +## Отключить влияние SGID бита на привилегии порождаемого процесса всем, кроме указанных в ACCESS_ALLOWED_SGID + if [[ -n ${ACCESS_ALLOWED_SGID[@]} ]]; then + for PATH_WORK_SGID in "${!ACCESS_ALLOWED_SGID[@]}"; do + EXCLUDE_SGID=$(tr , $'\n' <<< ${ACCESS_ALLOWED_SGID[${PATH_WORK_SGID}]}) + find ${PATH_WORK_SGID} -type f -perm /g=s $(printf "! -name %s " ${EXCLUDE_SGID}) -exec chmod g-s {} + + done + fi +} +exec_access_allowed_interpreter(){ +## Ограничить запуск интерпретаторов языков программирования в интерактивном режиме + true +} +exec_mount_attr(){ +## Отключить пользовательские nosuid nodev noexec на смонтированные цели + true +} +exec_mount_quota(){ +## Использовать дисковые квоты на файловые системы + true +} +exec_cgroup_quota(){ +## Квоты на ресурсы, через cgroup2. Механизм systemd или напрямую cgroup + true +} exec_polkit(){ ## Настрока polkit правил rm -f "${ROOTFS}"/etc/polkit-1/rules.d/ublinux-* @@ -102,24 +153,6 @@ EOF fi } -exec_openssl_gost(){ -## Настройка OpenSSL ГОСТ - FILE_OPENSSL_CONF="${ROOTFS}/etc//etc/ssl/openssl.cnf" - FILE_OPENSSL_GOST_CONF="${ROOTFS}/etc//etc/ssl/gost.cnf" - TXT_OPENSSL_GOST_CONF="$(sed -r '/^\s*$/d' "${FILE_OPENSSL_GOST_CONF}")" - TXT_ENABLE_GOST_CONF="openssl_conf = openssl_gost" - - if [[ ${OPENSSL_GOST,,} == @(y|yes|enable) ]]; then - # Enable GOST - grep -q "${TXT_ENABLE_GOST_CONF}" "${FILE_OPENSSL_CONF}" || sed "0,/^[a-zA-Z0-9\[]/s//${TXT_ENABLE_GOST_CONF}\n&/" -i "${FILE_OPENSSL_CONF}" - grep -q "${TXT_OPENSSL_GOST_CONF%%$'\n'*}" "${FILE_OPENSSL_CONF}" || cat ${FILE_OPENSSL_GOST_CONF} >> "${FILE_OPENSSL_CONF}" - elif [[ ${OPENSSL_GOST,,} == @(n|no|disable) ]]; then - ## Disable GOST - sed "/${TXT_ENABLE_GOST_CONF}/d" -i "${FILE_OPENSSL_CONF}" - sed "/${TXT_OPENSSL_GOST_CONF%%$'\n'*}/,/${TXT_OPENSSL_GOST_CONF##*$'\n'}/d" -i "${FILE_OPENSSL_CONF}" - fi -} - ################ ##### MAIN ##### ################ @@ -130,7 +163,7 @@ exec_openssl_gost(){ done < <(declare -F | grep "declare -f exec_") elif [[ ${0##*/} == ${SELF_NAME} ]]; then for FUNCTION in $@; do - ${FUNCTION} + declare -f ${FUNCTION} &>/dev/null && ${FUNCTION} done else true diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 4e2e516..346bddf 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -396,7 +396,7 @@ NSSWITCHWINBIND=yes ## ACCESS_DENIED_VTX11=yes ## Управление доступом в систему, правила разрешения. /etc/security/access.conf -## Предостережение: порядок правил имеет значение. Будет применено первое подходящее правило. +## Предостережение: порядок правил имеет значение. Проверяется последовательно и будет применено первое подходящее правило ## Первыми обрабатываются привила ACCESS_ALLOWED_LOGIN, после правила ACCESS_DENIED_LOGIN ## ACCESS_ALLOWED_LOGIN=rule_1,rule_2,rule_n ## Формат привила: users/groups:origins @@ -417,6 +417,7 @@ NSSWITCHWINBIND=yes ## Управление доступом в систему, правила блокировки. /etc/security/access.conf ## ACCESS_DENIED_LOGIN=rule_1,rule_2,rule_n +## Rules: ## root:ALL # Пользователю root должно быть отказано в доступе из всех источников ## root:ALL EXCEPT LOCAL # Запретить root вход через сеть ## wheel:ALL EXCEPT LOCAL .domain.org # Запретить нелокальный вход в привилегированные учетные записи группы wheel @@ -431,15 +432,57 @@ NSSWITCHWINBIND=yes ## Блокировать макросы приложений ## BLOCK_APP_MACROS=yes -## Отключить влияние SUID и SGID бита на привилегии порождаемого процесса всем, кроме указанных в ACCESS_ALLOWED_SUID и ACCESS_ALLOWED_SGID -## ACCESS_ALLOWED_SUID[/usr/bin]=vmware-user-suid-wrapper,Xvnc,vncserver-x11,veyon-auth-helper,at,cdda2wav,cdrecord,chage,chfn,chsh,crontab,cu,expiry,firejail,fusermount,fusermount-glusterfs,fusermount3,gpasswd,ksu,mount,mount.cifs,mount.ecryptfs_private,mount.nfs,newgrp,passwd,pkexec,readcd,rscsi,screen-4.9.0,sg,su,sudo,umount,unix_chkpwd,uucico,uucp,uuname,uustat,uux,uuxqt +## Отключить влияние SUID бита на привилегии порождаемого процесса всем, кроме указанных исключений в ACCESS_ALLOWED_SUID +## ACCESS_ALLOWED_SUID[ ]=,, +## Find path: +## empty # Если пусто и не задан [], то будут выбраны пути поиска ="/usr/bin /usr/local/bin /usr/local/sbin /home" +## /path_n/subpath # Путь до каталога поиска +## Options: +## -maxdepth 1 # Путь до каталога поиска с уровнем вложения 1 +## Files: +## files # Имена файлов разделённые: , или пробелом или ; +## - # Нет исключений, будут обработаны все файлы +## ACCESS_ALLOWED_SUID[/usr/bin]=vmware-user-suid-wrapper,Xvnc,vncserver-x11,veyon-auth-helper,at,cdda2wav,cdrecord,chage,chfn,chsh,crontab,cu,expiry,firejail,fusermount,fusermount-glusterfs,fusermount3,gpasswd,ksu,mount,mount.cifs,mount.ecryptfs_private,mount.nfs,newgrp,passwd,pkexec,readcd,rscsi,screen-4.9.0,sg,su,sudo,suexec,umount,unix_chkpwd,uucico,uucp,uuname,uustat,uux,uuxqt +## ACCESS_ALLOWED_SUID[/home]=- + +## Отключить влияние SGID бита на привилегии порождаемого процесса всем, кроме указанных исключений в ACCESS_ALLOWED_SGID +## ACCESS_ALLOWED_SGID[ ]=,, +## Find path: +## empty # Если пусто и не задан [], то будут выбраны пути поиска ="/usr/bin /usr/local/bin /usr/local/sbin /home" +## /path_n/subpath # Путь до каталога поиска +## Options: +## -maxdepth 1 # Путь до каталога поиска с уровнем вложения 1 +## Files: +## files # Имена файлов разделённые: , или пробелом или ; +## - # Нет исключений, будут обработаны все файлы ## ACCESS_ALLOWED_SGID[/usr/bin]=vmware-user-suid-wrapper,x2goprint,at,locate,mount.cifs,mount.ecryptfs_private,unix_chkpwd,wall,write +## ACCESS_ALLOWED_SGID[/home]=- ## Ограничить запуск интерпретаторов языков программирования в интерактивном режиме -## ACCESS_ALLOWED_INTERPRETER[/usr/bin]=gbr3,python,python2,python3,perl,perl6,php,ruby,bash,node,awk +## ACCESS_DENIED_INTERPRETER[ ]=,, +## Find path: +## empty # Если пусто и не задан [], то будут выбраны пути поиска ="/usr/bin /usr/local/bin /usr/local/sbin /home" +## /path_n/subpath # Путь до каталога поиска +## Options: +## -maxdepth 1 # Путь до каталога поиска с уровнем вложения 1 +## Files: +## files # Имена файлов разделённые: , или пробелом или ; +## all # Еквивалентно =gbr3,python,python2,python3,perl,perl6,php,ruby,node,awk,gawk +## ACCESS_DENIED_INTERPRETER=all +## ACCESS_DENIED_INTERPRETER[/usr/bin]=gbr3,python,python2,python3,perl,perl6,php,ruby,node,awk,gawk ## Отключить пользовательские nosuid nodev noexec на смонтированные цели -## MOUNT_ATTR[mount_point_1,mount_point_n]=attribut_1,attribut_n +## MOUNT_ATTR[,]=, +## Source: +## LABEL=