С помощью модуля pam_listfile за любым РАМ-приложением можно закрепить список контроля доступа. Этот модуль может иметь только тип auth. Его аргументы описаны в табл. 5.12.
Для наглядности рассмотрим два примера. Предположим, в системе имеется гостевая учетная запись и необходимо запретить ей доступ к службе chsh. Команда chsh позволяет пользователю поменять свой интерпретатор команд, заданный по умолчанию в файле /etc/passwd. Список доступных интерпретаторов содержится в файле /etc/shells. Поскольку команда chsh поддерживает механизм РАМ, реализовать требуемое ограничение не составляет труда. Достаточно добавить в файл /etc/pam.d/chsh запись для модуля pam_listf ile, как показано в листинге 5.19.
Листинг 5.19. Конфигурационный файл команды chsh, содержащий вызов модуля pam_listfile
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_listfile.so onerr=fail\
item=user sense=deny file=/etc/security/nochsh auth required /lib/security/pam_unix.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_cracklib.so minlen=20 retry=3
password required /lib/security/pam_unix.so md5 use_authtok
session required /lib/security/pam_unix.so
Таблица 5.12. Аргументы модуля pam_listf ile ент Описание
onerr Имеет значение succeed или fail. Сообщает о том, что должен делать модуль
в случае возникновения ошибки (например, невозможно прочесть конфигурационный файл): вернуть код успешного завершения или код ошибки sense Имеет значение allow или deny. Задает тип списка: разрешающий или запрещающий
file Требует, чтобы был указан полный путь к конфигурационному файлу
item Принимает одно из следующих значений: user, tty, rhost, ruser, group
либо shell. Сообщает модулю о том, что именно следует искать в конфигурационном файле
apply Принимает имя пользователя либо имя группы (с префиксом). Имеет смысл,
только если аргумент item равен tty, rhost или shell
В этом файле упоминается незнакомый нам модуль pam_rootok. Ему соответствует управляющий флаг sufficient. Это означает, что в случае успешного завершения остальные модули типа auth не выполняются. Модуль pam_rootok проверяет, является ли текущий пользователь супернользователем. Последнему разрешается менять интерпретатор команд любого пользователя без всякой аутентификации (не нужно вводить пароль).
Но вернемся к модулюpam_listf ile. В листинге 5.19 задан аргумент onerr=f ail. Такая установка означает, что, если в процессе выполнения модуля возникнет какая-нибудь ошибка, работа модуля завершится неудачей. Поскольку это обязательный модуль, его сбой приведет к завершению процедуры аутентификации, и пользователь не сможет поменять интерпретатор команд. Сообщения об ошибках регистрируются в системе Syslog, поэтому их можно просмотреть в файле /var/log/messages. Всегда рекомендуется устанавливать значение fail, если только не выполняется отладка в защищенной среде (не подключенной к сети).
Остальные аргументы относятся к списку контроля доступа. В данном случае это файл /etc/security/nochsh. Аргумент item=user сообщает модулю о том, что в файле ищутся имена пользователей — по одному в строке. Аргумент sense=deny означает, что список является запрещающим, т.е. если имя пользователя будет найдено в списке, аутентификация завершится неудачей.
Теперь осталось лишь создать файл /etc/security/nochsh, указав в нем имена пользователей, которым запрещено вызывать команду chsh. Приведем пример:
guest joe