Лимиты накладываемые PAM — limits.conf

В этой статье мы разбираем лимиты, накладываемые подсистемой PAM, а для настройки этих лимитов будем править конфиг limits.conf.















Подсистема PAM




В Linux есть специальная подсистема — PAM (Pluggable Authentication Modules). Она отвечает за аутентификацию пользователей в системе. PAM используется везде, где требуется аутентификация пользователя или проверка его прав, например при подключении через SSH.




В этом курсе я не буду разбирать PAM, возможно сделаю это в отдельной статье. А в этой статье мы разберём лимиты, которые может наложить подсистема PAM на сеанс пользователя.




Лимиты накладываемые PAM (limits.conf)




При входе в систему (логине), подсистема PAM может наложить определённые лимиты на сеанс пользователя, и эти лимиты настраиваются с помощью конфига /etc/security/limits.conf. Ограничения записывается по подобию:




*           soft    core            0
root        hard    core            100000
*           hard    rss             10000
@student    hard    nproc           20
@faculty    soft    nproc           20
@faculty    hard    nproc           50
ftp         hard    nproc           0
ftp         -       chroot          /ftp
@student    -       maxlogins       4




Вот описание четырёх столбцов:




  1. Во-первых, указываем кого нужно ограничить:

    • если нужно ограничить всех пользователей, то пишем звёздочку (*);



    • если нужно ограничить определённого пользователя, то пишем имя пользователя (root);



    • а в случае ограничения группы, пишем имя группы начиная с собачки (@student).




  2. Во второй колонке задаётся тип ограничения: soft или hard. Soft — мягкое ограничение, не запрещающее а предупреждающее. Hard — жёсткое, запрещающее ограничение. Приложение умеющее обрабатывать soft должно выдать предупреждение, о том что его процесс приблизился к лимиту. А если приложение не умеет обрабатывать soft, то для такого приложения и soft и hard сработают одинаково, то есть не дадут процессу получить запрашиваемый ресурс.



  3. В третьей колонке пишется параметр, который нужно ограничить, например:

    • core — максимальный размер файла дампа памяти (KB). Такой дамп создаётся при некорректном завершении процесса. Я об этом писал здесь;



    • nofile — максимальное число открытых файлов;



    • rss — максимальный размер потребляемой памяти (КБ);



    • nproc — максимальное количество процессов;



    • maxlogins — максимальное количество входов в систему одним пользователем;



    • maxsyslogins — максимальное количество входов в систему всеми пользователям.




  4. В последней колонке задаются значения ограничивающего параметра.




Получить справку по limits.conf можно здесь, или выполните команду man limits.conf.




Вот пример настройки /etc/security/limits.conf:




# nano /etc/security/limits.conf
testuser hard nofile       10000
testuser hard rss          102400
testuser hard nproc        15
testuser  -   maxlogins    1
*         -   maxsyslogins 2




Здесь я настроил подсистему PAM следующим образом:




  • Все процессы пользователя testuser не могут открыть более 10000 файлов.



  • Все процессы пользователя testuser не могут занять больше 102400 КБ (100 МБ).



  • Пользователь testuser может запустить не более 15 процессов.



  • Пользователь testuser может быть залогинен в системе только 1 раз (одновременно).



  • Всего в систему могут зайти 2 пользователя (одновременно).









Итог




Если в предыдущей статье мы ограничивали процессы с помощью ядра (конфига sysclt.conf). То в этой статье мы ограничиваем пользователей с помощью подсистемы PAM (конфига limits.conf). При этом ограничить мы можем разные параметры: использование памяти и процессора, число открытых файлов, максимальное число сеансов и другое.




Таким образом вы, например, можете создать службу, которая будет работать под конкретным пользователем, и ограничить этого пользователя доступными ограничениями.










2022-11-07T17:40:46
Администрирование Linux