From e528a3b7b6e01b9417d76912da3d504bbf990a5a Mon Sep 17 00:00:00 2001 From: amid Date: Fri, 7 Apr 2023 16:47:04 +0600 Subject: [PATCH] Fix parametrs CGROUP_QUOTA --- ublinux/rc.preinit.d/56-security | 32 +++++++++++++--- ublinux/templates/ublinux-data.ini | 59 ++++++++++++++++++++++-------- 2 files changed, 69 insertions(+), 22 deletions(-) diff --git a/ublinux/rc.preinit.d/56-security b/ublinux/rc.preinit.d/56-security index 9abc242..5844e9a 100755 --- a/ublinux/rc.preinit.d/56-security +++ b/ublinux/rc.preinit.d/56-security @@ -25,8 +25,7 @@ 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" FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/ublinux-disable-vt.conf" - - if [[ ${ACCESS_DENIED_VTX11} == @(yes|enable) ]]; then + if [[ ${ACCESS_DENIED_VTX11,,} == @(y|yes|enable) ]]; then mkdir -p ${FILE_XORGDONTVTSWITCH_CONF%/*} cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_XORGDONTVTSWITCH_CONF}" Section "ServerFlags" @@ -48,11 +47,32 @@ EOF logind-check-graphical=true EOF fi - elif [[ ${ACCESS_DENIED_VTX11} == @(no|disable) ]]; then + elif [[ ${ACCESS_DENIED_VTX11,,} == @(n|no|disable) ]]; then rm -f "${FILE_SYSTEMDLOGIND_CONF}" "${FILE_XORGDONTVTSWITCH_CONF}" "${FILE_LIGHTDM_CONF}" fi } - +exec_access_allowed_login(){ +## Управление доступом в систему, правила разрешения + FILE_ACCESS_CONF="${ROOTFS}/etc/security/access.d/01-ublinux-allowed.conf" + rm -f "${FILE_ACCESS_CONF}" + if [[ -n ${ACCESS_ALLOWED_LOGIN} ]]; then + [[ -d ${FILE_ACCESS_CONF%/*} ]] || mkdir -p ${FILE_ACCESS_CONF%/*} + tr , $'\n' <<< ${ACCESS_ALLOWED_LOGIN} | while read RULE; do + echo "+:${RULE}" >> "${FILE_ACCESS_CONF}" + done + fi +} +exec_access_denied_login(){ +## Управление доступом в систему, правила блокировки + FILE_ACCESS_CONF="${ROOTFS}/etc/security/access.d/02-ublinux-denied.conf" + rm -f "${FILE_ACCESS_CONF}" + if [[ -n ${ACCESS_DENIED_LOGIN} ]]; then + [[ -d ${FILE_ACCESS_CONF%/*} ]] || mkdir -p ${FILE_ACCESS_CONF%/*} + tr , $'\n' <<< ${ACCESS_DENIED_LOGIN} | while read RULE; do + echo "-:${RULE}" >> "${FILE_ACCESS_CONF}" + done + fi +} exec_polkit(){ ## Настрока polkit правил rm -f "${ROOTFS}"/etc/polkit-1/rules.d/ublinux-* @@ -89,11 +109,11 @@ exec_openssl_gost(){ TXT_OPENSSL_GOST_CONF="$(sed -r '/^\s*$/d' "${FILE_OPENSSL_GOST_CONF}")" TXT_ENABLE_GOST_CONF="openssl_conf = openssl_gost" - if [[ ${OPENSSL_GOST} == @(yes|enable) ]]; then + 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} == @(no|disable) ]]; then + 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}" diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 106e606..4e2e516 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -392,23 +392,51 @@ NSSWITCHWINBIND=yes ## OPENSSL_GOST=yes ## Отключить виртуальные терминалы и запретить переключение на них из X11 -## ACCESS_DENIED_VTX11=yes|no*|enable|disable +## ACCESS_DENIED_VTX11=yes|no*|enable|disable|y|n ## ACCESS_DENIED_VTX11=yes -## TODO https://linux.die.net/man/5/access.conf -## Блокировка доступа к терминалу -## ACCESS_GRANTED_VT= -## ACCESS_DENIED_VT= +## Управление доступом в систему, правила разрешения. /etc/security/access.conf +## Предостережение: порядок правил имеет значение. Будет применено первое подходящее правило. +## Первыми обрабатываются привила ACCESS_ALLOWED_LOGIN, после правила ACCESS_DENIED_LOGIN +## ACCESS_ALLOWED_LOGIN=rule_1,rule_2,rule_n +## Формат привила: users/groups:origins +## users/groups — список пользователей или групп пользователей или ключевое слово ALL +## origins — список TTY (для локального доступа), имен хостов, доменных имен, IP-адресов, ключевое слово ALL или LOCAL +## root:cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6 vc/1 # Пользователю root разрешен доступ через cron, X11 терминал :0, tty1, ..., tty6, vc/1 +## (wheel):console tty1 tty2 tty3 tty4 tty5 tty6 tty7 pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 hvc0 hvc1 hvc2 hvc3 hvc4 hvc5 hvc6 hvc7 hvc8 hvc9 ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5 ttyS6 ttyS7 ttyS8 ttyS9 +## root:192.168.1.1 192.168.1.4 192.168.2. 192.168.3.0/24 # Пользователю root разрешен доступ с хостов, которым принадлежат адреса IPv4 +## root:127.0.0.1 ::1 +## superadmin:foo1.bar.org foo2.bar.org .foo.bar.org +## @admins foo:ALL # Пользователю foo и членам администраторов сетевой группы admins разрешен доступ +## @usergroup@@hostgroup:ALL # Членам группы usergroup b uheggs [jcnjd hostgroup разрешен доступ +## DOMAIN.ORG\Domain Admins:ALL # Пользователя входящих в группу "Domain Admins" домена DOMAIN.ORG разрешен доступ +## (wheel):ALL # Членам группы wheel разрешен доступ +## ALL:LOCAL # Разрешить локальным учетным записям вход в систему локально +## ALL EXCEPT root: 192.168.0. # Разрешить всем, кроме root, входить в систему из под указанной маски сети +## ACCESS_ALLOWED_LOGIN="(users)::0 :1 :2 :3 tty2,(wheel):127.0.0.1 ::1,(wheel):ALL" + +## Управление доступом в систему, правила блокировки. /etc/security/access.conf +## ACCESS_DENIED_LOGIN=rule_1,rule_2,rule_n +## root:ALL # Пользователю root должно быть отказано в доступе из всех источников +## root:ALL EXCEPT LOCAL # Запретить root вход через сеть +## wheel:ALL EXCEPT LOCAL .domain.org # Запретить нелокальный вход в привилегированные учетные записи группы wheel +## ALL EXCEPT root:tty1 # Запретить вход без полномочий root на tty1 +## ALL EXCEPT superadmin:ALL # Разрешить доступ только пользователю superadmin и никому больше +## ALL EXCEPT (wheel) shutdown sync:LOCAL # Запретить вход в консоль для всех учетных записей, кроме shutdown, sync и входящих в группу wheel +## ALL EXCEPT (wheel):tty1 tty2 tty3 tty4 tty5 tty6 vc/1 localhost # Запретить вход в консоль tty для всех учетных записей, кроме входящих в группу wheel +## DOMAIN.ORG\Domain Users:ALL # Пользователя входящих в группу "Domain Users" домена DOMAIN.ORG запретить доступ +## ALL:ALL # Всем остальным пользователям запретить доступ +## ACCESS_DENIED_LOGIN="root:ALL,ALL:ALL" ## Блокировать макросы приложений ## BLOCK_APP_MACROS=yes -## Отключить влияние SUID бита на привилегии порождаемого процесса всем, кроме указанных в ACCESS_GRANTED_SUID и ACCESS_GRANTED_SGID -## ACCESS_GRANTED_SUID="/usr/bin/vmware-user-suid-wrapper,/usr/bin/Xvnc,/usr/bin/vncserver-x11,/usr/bin/veyon-auth-helper,/usr/bin/at,/usr/bin/cdda2wav,/usr/bin/cdrecord,/usr/bin/chage,/usr/bin/chfn,/usr/bin/chsh,/usr/bin/crontab,/usr/bin/cu,/usr/bin/expiry,/usr/bin/firejail,/usr/bin/fusermount,/usr/bin/fusermount-glusterfs,/usr/bin/fusermount3,/usr/bin/gpasswd,/usr/bin/ksu,/usr/bin/mount,/usr/bin/mount.cifs,/usr/bin/mount.ecryptfs_private,/usr/bin/mount.nfs,/usr/bin/newgrp,/usr/bin/passwd,/usr/bin/pkexec,/usr/bin/readcd,/usr/bin/rscsi,/usr/bin/screen-4.9.0,/usr/bin/sg,/usr/bin/su,/usr/bin/sudo,/usr/bin/umount,/usr/bin/unix_chkpwd,/usr/bin/uucico,/usr/bin/uucp,/usr/bin/uuname,/usr/bin/uustat,/usr/bin/uux,/usr/bin/uuxqt" -## ACCESS_GRANTED_SGID="/usr/bin/vmware-user-suid-wrapper,/usr/bin/x2goprint,/usr/bin/at,/usr/bin/locate,/usr/bin/mount.cifs,/usr/bin/mount.ecryptfs_private,/usr/bin/unix_chkpwd,/usr/bin/wall,/usr/bin/write" +## Отключить влияние 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 +## ACCESS_ALLOWED_SGID[/usr/bin]=vmware-user-suid-wrapper,x2goprint,at,locate,mount.cifs,mount.ecryptfs_private,unix_chkpwd,wall,write ## Ограничить запуск интерпретаторов языков программирования в интерактивном режиме -## ACCESS_GRANTED_INTERPRETER="/usr/bin/gbr3,/usr/bin/python,/usr/bin/python2,/usr/bin/python3,/usr/bin/perl,/usr/bin/perl6,/usr/bin/php,/usr/bin/ruby,/usr/bin/bash,/usr/bin/node,/usr/bin/awk" +## ACCESS_ALLOWED_INTERPRETER[/usr/bin]=gbr3,python,python2,python3,perl,perl6,php,ruby,bash,node,awk ## Отключить пользовательские nosuid nodev noexec на смонтированные цели ## MOUNT_ATTR[mount_point_1,mount_point_n]=attribut_1,attribut_n @@ -420,7 +448,7 @@ NSSWITCHWINBIND=yes ## MOUNT_ATTR[/tmp,/dev/shm]=nosuid,nodev,noexec ## Использовать дисковые квоты на файловые системы -## MOUNT_QUOTA[mount_point_1,mount_point_n]=attribut_1,attribut_n +## MOUNT_QUOTA[mount_point_1,mount_point_n]=attribut_1,attribut_2,attribut_n ## usrquota # Включить простые квоты на пользователя ## grpquota # Включить простые квоты на группу ## usrjquota=aquota.user # Включить журналируемые квоты на пользователя @@ -432,12 +460,11 @@ NSSWITCHWINBIND=yes ## MOUNT_QUOTA[/]=usrquota,grpquota ## Квоты на ресурсы, через cgroup2. Механизм systemd или напрямую cgroup. man 5 systemd.resource-control -## CGROUP_QUOTA[TYPE=NAME]=PROPERTY1=VALUE,PROPERTY2=VALUE,PROPERTYn=VALUE +## CGROUP_QUOTA[unit|user]=property_1=value,property_2=value,property_n=value ## Получить древовидный список cgroups и запущенных процессов: systemd-cgls --no-page ## Показать монторинг потребляемых ресурсов: systemd-cgtop -c; systemd-cgtop -m ## Еденицы измерения: %, K, M, G, T -## TYPE: unit, user -## slice: system.slice, user.slice, user-0.slice, user-1000.slice, smb.service, cups.service, httpd.service, +## unit: system.slice, user.slice, user-0.slice, user-1000.slice, smb.service, cups.service, httpd.service, ## user: superadmin, user-1 # Системное имя пользователя ## PROPERTY: ## MemoryHigh=200M # Мягкое ограничение ОЗУ, юнит выходящий за рамки потребления ограничивается @@ -446,9 +473,9 @@ NSSWITCHWINBIND=yes ## CPUQuota=10% # Ограничение на использование % ЦПУ, 100% на каждый CPU. 4cpu*100%=400% ## IOReadBandwidthMax="/dev/sdb1 4M" # Ограничение операций ввода вывода на чтение блочного устройства ## IOWriteBandwidthMax="/dev/sdb1 2M" # Ограничение операций ввода вывода на запись блочного устройства -## CGROUP_QUOTA[unit=user-1000.slice]="MemoryHigh=200M,MemorySwapMax=300M,CPUQuota=100%" -## CGROUP_QUOTA[user=superadmin]="MemoryHigh=500M,MemorySwapMax=100M,CPUQuota=400%" -## CGROUP_QUOTA[unit=smb.service]="MemoryHigh=100M,MemorySwapMax=0M,CPUQuota=100%" +## CGROUP_QUOTA[user-1000.slice]="MemoryHigh=200M,MemorySwapMax=300M,CPUQuota=100%" +## CGROUP_QUOTA[superadmin]="MemoryHigh=500M,MemorySwapMax=100M,CPUQuota=400%" +## CGROUP_QUOTA[smb.service]="MemoryHigh=100M,MemorySwapMax=0M,CPUQuota=100%" ## Управление разрешениями действий polkit, можно разрешать для группы пользователей ## POLKIT[id_object]=result:group_1,group_n"