В этой статье мы разбираем лимиты, накладываемые подсистемой 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
Вот описание четырёх столбцов:
- Во-первых, указываем кого нужно ограничить:
- если нужно ограничить всех пользователей, то пишем звёздочку (*);
- если нужно ограничить определённого пользователя, то пишем имя пользователя (root);
- а в случае ограничения группы, пишем имя группы начиная с собачки (@student).
- Во второй колонке задаётся тип ограничения: soft или hard. Soft — мягкое ограничение, не запрещающее а предупреждающее. Hard — жёсткое, запрещающее ограничение. Приложение умеющее обрабатывать soft должно выдать предупреждение, о том что его процесс приблизился к лимиту. А если приложение не умеет обрабатывать soft, то для такого приложения и soft и hard сработают одинаково, то есть не дадут процессу получить запрашиваемый ресурс.
- В третьей колонке пишется параметр, который нужно ограничить, например:
- core — максимальный размер файла дампа памяти (KB). Такой дамп создаётся при некорректном завершении процесса. Я об этом писал здесь;
- nofile — максимальное число открытых файлов;
- rss — максимальный размер потребляемой памяти (КБ);
- nproc — максимальное количество процессов;
- maxlogins — максимальное количество входов в систему одним пользователем;
- maxsyslogins — максимальное количество входов в систему всеми пользователям.
- В последней колонке задаются значения ограничивающего параметра.
Получить справку по 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). При этом ограничить мы можем разные параметры: использование памяти и процессора, число открытых файлов, максимальное число сеансов и другое.
Таким образом вы, например, можете создать службу, которая будет работать под конкретным пользователем, и ограничить этого пользователя доступными ограничениями.