Попытка пользователя guest поменять интерпретатор команд демонстрируется в листинге 5.20. Порядок событий очевиден. Когда пользователь выполняет команду chsh, вызывается ядро Linux-PAM, которое активизирует стек модулей типа auth из файла /etc/pam. d/chsh. Первый из модулей данного типа — pam_rootok. Поскольку пользователь не является суперпользователем, модуль завершается неудачей, после чего вызывается модуль pam_unix, отображающий приглашение на ввод пароля. Пользователь guest вводит правильный пароль, и управление передается модулю pam_listf ile, который находит пользователя guest в списке типа deny. В результате возникает ошибка аутентификации (выводится сообщение Password error).
Листинг 5.20. Неудачная попытка выполнить команду chsh из-за установок модуля pam_listfile
$ telnet livfreeordie Trying 10.1.1.1. . . Escape character is '"]'.
This is a restricted system. All activity is logged.
login: guest
Password:
livfreeordie$ chsh -s /bin/bash
Changing shell for guest.
Password:
Password error.
livfreeordie$
Рассмотрим другой пример. Предположим, необходимо ограничить список пользователей, чьи имена могут указываться в качестве аргументов команды su. Для этого добавим в файл /etc/pam.d/su запись pam_listfile (листинг 5.21). На этот раз мы воспользуемся разрешающим списком, перечислив требуемые имена пользователей в файле /etc/security/suok, например:
root тагу bill jane efram
Листинг 5.21. Конфигурационный файл команды su, содержащий вызов модуля pam_listfile
auth required /lib/security/pam_listfile.so onerr=fail \ item=user sense=allow file=/etc/security/suok
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
Отметим, что вызывать команду su по-прежнему может кто угодно. Ограничиваются лишь возможные аргументы команды. В листинге 5.22 показано, что произойдет, если пользователь paul попытается с помощью команды su стать пользователем guest, а затем — пользователем root. Предполагается, что оба пароля пользователю paul известны.
Листинг 5.22. Неудачная попытка выполнить команду su из-за установок модуля pam_listfile
$ whoami joe
$ su - guest Password:
su: incorrect password $ su -
Password:
Обратите внимание: сообщение об ошибке не раскрывает истинную причину неудачи. Это вообще характерно для модулей РАМ. Идея заключается в том, чтобы не выдавать пользователям полезную информацию в виде экранных сообщений об ошибках. Администратор всегда может проверить журнальные файлы. По умолчанию сообщения, генерируемые модулями РАМ, сохраняются в файле /var/log/messages (подробнее об этом файле и системе Syslog).
Если в листинге 5.21 поменять установку sense=allow на sense=deny, файл /etc/security/suok станет запрещающим списком, т.е. ни один пользователь с помощью команды su не сможет стать пользователем, указанным в списке. Это особенно полезно, если используется команда sudo и необходимо запретить команду su root.