В этой статье мы разбираем лимиты, накладываемые подсистемой 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). При этом ограничить мы можем разные параметры: использование памяти и процессора, число открытых файлов, максимальное число сеансов и другое.

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


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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *