Вход пользователя в любую систему состоит из нескольких этапов:
Эти операции выполняются для большого количества разных приложений в современных UNIX-like ОС. Вот пример таких утилит с моей рабочей станции:
Дублировать один и тот же код сразу в группе утилит (например в su, login, sshd авторизация/аутентификация производится идентичным образом) это во-первых хороший способ сделать море ошибок, а во-вторых просто море удовольствия при попытке сменить систему авторизации (например при желании использовать LDAP).
Для того, чтобы решить эту проблему раз и навсегда была создана технология и сопутствующая инфраструктура PAM (Pluggable Authentication Modules).
В /lib/security располагается код самих подгружаемых модулей (pam_*.so). В /etc/pam.d располагаются файлы-сценарии для испоьлзования PAM из конкретных программ. Имя файла-сценария совпадает с именем программы, его использующей
Формат строки сценария:
<тип модуля> <флаг контроля> <имя модуля> <параметры>