Система безопасности PAM изнутри Иван Скляров Хакер, номер #086, стр. 086-112-4 pam_limits.so. Тип session. Позволяет накладывать ограничения на пользователей, вошедших в систему. Требует файл /etc/security/limits.conf и поддержку ядра для ограничений. pam_nologin.so. Тип auth. Проверяет наличие файла /etc/nologin. Если он существует, то в систему может войти только root, а остальным будет выдано на экран содержимое этого файла. pam_permit.so. Простейший модуль, который на каждый запрос просто возвращает PAM_SUCCESS. Этот модуль бывает полезен в качестве метки или для предотвращения появления пустой цепочки. pam_pwdb.so. Тип любой. Обычно является альтернативой модулю pam_unix.so. Предоставляет интерфейс к файлам passwd и shadow. Полезные параметры: nullok - можно использовать пустые пароли; md5, shadow, bigcrypt - различные способы шифрования пароля. pam_rootok.so. Тип auth. Допускает пользователя к сервису, только если его uid=0. pam_time.so. Тип account. Позволяет ограничить доступ к службе в зависимости от времени. Настраивается с помощью конфигурационного файла /etc/securitty/time.conf. pam_warn.so. Тип auth и password. Просто заносит сообщение о своем вызове в syslog. Параметров не имеет. pam_wheel.so. Тип auth. Позволяет получать права суперпользователя только пользователям группы wheel. Один из полезных параметров: group=XXX - использовать указанную группу вместо wheel. Существует еще особый модуль pam_stack.so, который может быть любого типа и всегда используется с параметром service=XXX, где XXX - название конфигурационного файла другого сервиса. Этот модуль предназначен для включения цепочки модулей из другого конфигурационного файла. Например, запись «/lib/security/pam_stack.so service=system-auth» означает, что нужно выполнить цепочку модулей из конфигурационного файла system-auth. В разных *nix существуют свои стандартные модули, хотя рассмотренные модули присутствуют почти в каждой системе. [пример использования стандартных модулей] В качестве примера изменим поведение команды su. Напомню, su предоставляет возможность регистрироваться в системе под другим именем, в том числе root. Сделаем так, чтобы только пользователи одной группы ( «ivan») могли получать права («root») при помощи su. Для этого нужно добавить следующие две строки в начало конфигурационного файла su в каталоге /etc/pam.d: auth sufficient /lib/security/pam_rootok.so auth required /lib/security/pam_wheel.so group=ivan [программирование PAM-приложений] Обращаться к модулям PAM имеет смысл только в том случае, когда в твоей программе нужно осуществлять аутентификацию. На диске к журналу ты можешь найти исходный код простейшего PAM-приложения (я назвал его appl_pam.c). Компиляция выполняется следующим образом: % gcc -o appl_pam appl_pam.c -lpam -lpam_misc Программа appl_pam просто запрашивает у пользователя его пароль, и если пароль введен верно, то выводит Authentication OK, иначе - Not Authenticated. Вызывать функции PAM API в программе можно только после вызова функции pam_start(), которая инициализирует библиотеку PAM, а заканчиваться работа должна функцией pam_end(). Первый аргумент в pam_start() - это имя сервиса. В appl_pam я задействовал сервис passwd. Хочу обратить внимание на второй параметр: getenv(«LOGNAME»), который определяет имя пользователя из стандартной переменной окружения LOGNAME. Если второй параметр сделать нулевым значением, то функция будет запрашивать не только пароль, но и логин пользователя. Третьим аргументом является ссылка на объект диалога. В четвертую переменную pam_start() запишет дескриптор сеанса, который будет использоваться всеми последующими функциями PAM API в программе. |