Всем привет. Посмотрим, какие ресурсы есть у простого пользователя.
Их можно изменять командами в консоли (user-ом ли, root-ом ли, сейчас неважно). Важно другое: все изменения, сделанные в консоли будут относиться к вновь порождённым процессам bash. То есть запустили в консоли процесс, а у него уже ограничения.
Зададимся вопросом, как сделать так, чтобы root мог ограничить процессы пользователя в ресурсах, но не только, которые порождены bash, а вообще любые? То есть чтобы пользователь входил в систему и не мог, например создать в текстовом редакторе файл больше определённого размера?
Посмотрим, какие возможности для этого есть у root-а. Смотрим оснастку:
Ну, короче, из всех ресурсов, что мы видели по команде prlimit, root может ограничить пользователя только в памяти и количестве файлов (открытых ли, созданных ли, не разбирался)
...Пойдём по пути линукс. Нужные нам ограничения можно внести в файл /etc/security/limits.conf (синтаксис файла смотри внутри), например так:
После сохранения файла эти ограничения ДЕЙСТВИТЕЛЬНО будут действовать. До перезагузки. Потом из файла /etc/security/limits.conf эти изменения исчезают.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Решение я нашёл, будет ниже. Оно непросто и в связи с этим вопрос некороткий. При инициализации системы выполняется код, который именно что затирает файл /etc/security/limits.conf. То есть строчку за строчкой, строчку за строчкой (строчки настройки, я имею ввиду) перезаписывает, приводя их в первозданный вид. Товарищи разработчики, вы до такой степени не доверяете root-у? То есть реально root не может ограничить пользователя в ресурсах. Я так понимаю, Орёл 2.12 это Debian, который Stretch? Так вот, в Stretch файл при инциализации не приводится к первоначальному виду. И нигде не приводится а у вас приводится.
...Есть версия SE. Там я не проверял, как это всё работает. Но и я не могу сказать, чтобы это решение было бы примлемым в SE версии. Да, в версии SE у root-а должны быть какие-то ограничения, наверное. Но не ограничения же на накладывание ограничений! (ещё раз, в SE не смотрел). А накладывание таких ограничений на root-а в CE- ну всё, собсно я уже сказал выше. Это у нас с вам, что за линукс тогда? Разработчикам предоагаю принять это как дружескую критику тем более, что до фига что хорошего могу сказать про Орёл 2.12
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Почему всё так происходит.
Во время инициализации системы процесс systemd считывает это файл:
И, согласно ему, выполняет скрипт /usr/sbin/astra-ulimits-control
Где строчка за сточкой затирается и восстанавливается файл /etc/security/limits.conf.
(весь код файла /etc/security/limits.conf не влез из-за ограничений)
1) Код не будет затираться, если параметр скрипта /usr/sbin/astra-ulimits-control имеет значения status или is-enabled. Можно передать такие значения скрипту /usr/sbin/astra-ulimits-control, не вопрос. Вопрос в том, как передать их правильно? Пока отпадает.
2) Восстановление идёт независимо о того, переменная первый параметр скрипта /usr/sbin/astra-ulimits-control имеет ПРОТИВОПОЛОЖНЫЕ значения, enable или disable (у меня enable). То есть и в том и в другом случае прописано восстановление /etc/security/limits.conf; (дублирование кода). Недоработка?
Чё зачем я разбираться не стал, а тут прочёл:
Теперь у меня
Файл /etc/security/limits.conf не перезаписывается при инициализации системы. Настройки ограничений сохраняются. Кто может лучше, пусть сделает лучше. Обсуждается.
Код:
user@astra:~$ prlimit
RESOURCE DESCRIPTION SOFT HARD UNITS
AS address space limit неограничено неограничено байты
CORE max core file size 0 0 байты
CPU CPU time неограничено неограничено секунд
DATA max data size неограничено неограничено байты
FSIZE max file size 25600000000 51200000000 байты
LOCKS max number of file locks held неограничено неограничено locks
MEMLOCK max locked-in-memory address space 65536 65536 байты
MSGQUEUE max bytes in POSIX mqueues 819200 819200 байты
NICE max nice prio allowed to raise 0 0
NOFILE max number of open files 2048 4096 files
NPROC max number of processes 1000 2000 processes
RSS max resident set size неограничено неограничено байты
RTPRIO max real-time priority 0 0
RTTIME timeout for real-time tasks неограничено неограничено микросекунд
SIGPENDING max number of pending signals 15320 15320 signals
STACK max stack size 8388608 неограничено байты
user@astra:~$
Зададимся вопросом, как сделать так, чтобы root мог ограничить процессы пользователя в ресурсах, но не только, которые порождены bash, а вообще любые? То есть чтобы пользователь входил в систему и не мог, например создать в текстовом редакторе файл больше определённого размера?
Посмотрим, какие возможности для этого есть у root-а. Смотрим оснастку:

Ну, короче, из всех ресурсов, что мы видели по команде prlimit, root может ограничить пользователя только в памяти и количестве файлов (открытых ли, созданных ли, не разбирался)
...Пойдём по пути линукс. Нужные нам ограничения можно внести в файл /etc/security/limits.conf (синтаксис файла смотри внутри), например так:
user hard fsize 131072
user soft fsize 131072
user soft fsize 131072
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Решение я нашёл, будет ниже. Оно непросто и в связи с этим вопрос некороткий. При инициализации системы выполняется код, который именно что затирает файл /etc/security/limits.conf. То есть строчку за строчкой, строчку за строчкой (строчки настройки, я имею ввиду) перезаписывает, приводя их в первозданный вид. Товарищи разработчики, вы до такой степени не доверяете root-у? То есть реально root не может ограничить пользователя в ресурсах. Я так понимаю, Орёл 2.12 это Debian, который Stretch? Так вот, в Stretch файл при инциализации не приводится к первоначальному виду. И нигде не приводится а у вас приводится.
...Есть версия SE. Там я не проверял, как это всё работает. Но и я не могу сказать, чтобы это решение было бы примлемым в SE версии. Да, в версии SE у root-а должны быть какие-то ограничения, наверное. Но не ограничения же на накладывание ограничений! (ещё раз, в SE не смотрел). А накладывание таких ограничений на root-а в CE- ну всё, собсно я уже сказал выше. Это у нас с вам, что за линукс тогда? Разработчикам предоагаю принять это как дружескую критику тем более, что до фига что хорошего могу сказать про Орёл 2.12
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Почему всё так происходит.
Во время инициализации системы процесс systemd считывает это файл:
Код:
user@astra:~$ cat /etc/systemd/system/astra-ulimits-control.service
[Unit]
Description=control/Uncontrol ulimits for user
After=rc-local.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/astra-ulimits-control
[Install]
WantedBy=astra-safepolicy.target
user@astra:~$
Где строчка за сточкой затирается и восстанавливается файл /etc/security/limits.conf.
Bash:
sed -e "/.*hard fsize/d" -i /etc/security/limits.conf
sed -e "/.*soft fsize/d" -i /etc/security/limits.conf
sed -e "/.*hard nofile/d" -i /etc/security/limits.conf
sed -e "/.*soft nofile/d" -i /etc/security/limits.conf
sed -e "/.*hard nproc/d" -i /etc/security/limits.conf
sed -e "/.*soft nproc/d" -i /etc/security/limits.conf
sed -e "/.*hard core/d" -i /etc/security/limits.conf
echo "#* hard fsize 50000000" >> /etc/security/limits.conf
echo "#* soft fsize 25000000" >> /etc/security/limits.conf
echo "#* hard nofile 4096" >> /etc/security/limits.conf
echo "#* soft nofile 2048" >> /etc/security/limits.conf
echo "#* hard nproc 2000" >> /etc/security/limits.conf
echo "#* soft nproc 1000" >> /etc/security/limits.conf
echo "#* hard core 0" >> /etc/security/limits.conf
1) Код не будет затираться, если параметр скрипта /usr/sbin/astra-ulimits-control имеет значения status или is-enabled. Можно передать такие значения скрипту /usr/sbin/astra-ulimits-control, не вопрос. Вопрос в том, как передать их правильно? Пока отпадает.
2) Восстановление идёт независимо о того, переменная первый параметр скрипта /usr/sbin/astra-ulimits-control имеет ПРОТИВОПОЛОЖНЫЕ значения, enable или disable (у меня enable). То есть и в том и в другом случае прописано восстановление /etc/security/limits.conf; (дублирование кода). Недоработка?
Чё зачем я разбираться не стал, а тут прочёл:
Код:
man systemd-system.conf
...
To disable a configuration file supplied by the vendor, the recommended way is to place a symlink to /dev/null in the configuration directory in /etc/, with the same filename as the vendor configuration file.
Код:
user@astra:~$ ls -l /etc/systemd/system/astra-ulimits-control.service*
lrwxrwxrwx 1 root root 9 фев 9 18:18 /etc/systemd/system/astra-ulimits-control.service -> /dev/null
-rw-r--r-- 1 root root 187 фев 1 21:51 /etc/systemd/system/astra-ulimits-control.service~
user@astra:~$