Краткое описание некоторых аутентификационных модулей Linux-PAM
Существует множество модулей аутентификации, как самописных так и стандартных, ниже представлены самые распространенные из них.
pam_permit
В любом режиме всегда возвращает успех.
pam_deny
В любом режиме всегда возвращает ошибку.
pam_unix
Используется в режимах аутентификации пользователей, управления учетными записями, управления паролями и управления пользовательскими сеансами.
Реализует базовую функциональность Unix-систем в этом отношении.
В режиме аутентификации
проверяет действительность пользователя по предоставленному паролю. Информацию о пароле пользователя ищет в соответствии с алгоритмом, заданным в конфигурационном файле /etc/nssswitch.conf (в файлах /etc/passwd, /etc/shadow и/или в базе данных NIS-домена).
Некоторые из возможных опций:
— nullok: разрешать аутентификацию пользователей с пустым паролем (по умолчанию использование пустых паролей не разрешается).
В режиме управления учетными записями
проверяет состояние учетной записи и пароль, анализируя содержание файла /etc/shadow. Если срок действия пароля истек, может предложить (или выдвинуть требование) пользователю изменить пароль.
В режиме управления паролями
разрешает изменить пароль пользователя. Пароли при этом может искать/сохранять в файлах /etc/passwd, /etc/shadow или в базе данных NIS-домена – в зависимости от опций (по умолчанию использует файл /etc/passwd). Может использовать для шифрования паролей традиционный для UNIX-систем алгоритм (базируется на стандарте 3DES, доступный через функцию crypt(3), является алгоритмом по умолчанию), расширенную версию традиционного алгоритма (разрешает шифровать более чем 8 первых символов пароля; применяется, если pam_unix вызывается с опцией bigcrypt), алгоритм MD5 (применяется, если pam_unix вызывается с опцией md5). Может запоминать заданное количество (зашифрованных по алгоритму MD5) паролей каждого пользователя (в файле /etc/security/opasswd; количество паролей для запоминания задается опцией remember (по умолчанию это количество равняется 0)). Последняя возможность используется такими модулями, как pam_cracklib, для проверки степени новизны паролей, которые вводятся пользователем.

- nullok: разрешать принимать в качестве новых паролей пустые строки;
- use_authtok: принуждает модуль pam_unix принять в качестве нового пароля пароль, полученный от предыдущего модуля;
- md5: использовать для шифрования паролей алгоритм MD5;
- shadow: искать/сохранять пароли в файле /etc/shadow.
В режиме управления сеансами
перед началом и завершением пользовательской сессии регистрирует через функцию syslog(3) имя пользователя и наименование службы.
pam_stack
Используется в любом режиме. Разрешает из стека одной службы “вызвать” стек другой службы. Благодаря этому можно избежать дублирования записей в конфигурационном файле. Служба, стек которой необходимо вызвать, определяется через аргумент service.

/etc/pam.d/imap:
auth required pam_stack.so service=system-auth
auth required pam_shells.so
/etc/pam.d/system-auth:
auth sufficient pam_krb5.so
auth sufficient pam_unix.so shadow nullok
auth required pam_deny.so
pam_rootok
Используется только в режиме аутентификации пользователей. Предназначенный для использования в ситуациях, когда суперпользователь желает получать доступ к службе без введения пароля. Аутентификация проходит успешно, если и только если UID пользователя равняется 0.
Этот модуль не следует использовать для аутентификации пользователей серверами, которые запускаются суперпользователем или во время инициализации системы.

Программа su традиционно разрешает суперпользователю изменять идентичность без введения пароля. Чтобы смоделировать это поведение с помощью Linux-PAM, нужно в соответствующее место конфигурационного файла добавить следующие два строки:
#
# su authentication. Root is granted access by default.
#
su auth sufficient pam_rootok.so
su auth required pam_unix_auth.so
pam_wheel
Используется только в режиме аутентификации пользователей. Дает возможность получать полномочия суперпользователя только членам группы wheel (GID = 0).
pam_nologin
Используется только в режимах аутентификации пользователей и управления учетными записями.
В любом случае, если файл /etc/nologin существует, возвращается успех только для суперпользователя, при этом всем пользователям выводится содержание файла /etc/nologin.
pam_listfile
Используется только в режиме аутентификации пользователей.
Выполняет аутентификацию пользователя, базируясь на содержании произвольно заданного (текстового) файла.
Возможные опции:
- item=user|tty|rhost|ruser|group|shell: указывает, какую величину нужно сверить с содержанием файла (user указывает на имя пользователя, от лица которого поступил запрос (PAM_USER), tty указывает на имя терминала, с которого поступил запрос (PAM_TTY), rhost указывает на имя узла, с которого поступил запрос (PAM_RHOST), ruser указывает на имя пользователя, который послал запрос (имя, под которым он выступает на том узле, с которого поступил запрос) (PAM_RUSER), group указывает на имя группы, к которой принадлежит пользователь, от лица которого поступил запрос, shell указывает на командный интерпретатор пользователя, от лица которого поступил запрос);
- file=filename: указывает имя файла, в котором нужно выполнять поиск;
- sense=allow|deny: определяет поведение модуля в случае, когда заданная опцией item величина найдена или не найдена в файле (сообщить об успехе аутентификации, когда величина найдена, и sense=allow, или когда величина не найдена, и sense=deny, в других случаях сообщить о неуспехе);
- |fail: определяет поведение модуля в случае ошибки открытия файла и т.п. (succeed — сообщить об успехе, fail — об ошибке);
- apply=user|@group: разрешает сузить применение ограничений к отдельному пользователю или группе (имеет смысл только вместе с item, что равняется tty, rhost или shell).

Следующая строка в конфигурационном файле /etc/pam.conf моделирует традиционное для службы ftp применение файла /etc/ftpusers:
#
# deny ftp-access to users listed in the /etc/ftpusers file
#
ftp auth required pam_listfile.so onerr=succeed item=user sense=deny file=/etc/ftpusers

#
# permit login to users listed in /etc/loginusers
#
login auth required pam_listfile.so onerr=fail item=user sense=allow file=/etc/loginusers
pam_shells
Используется только в режиме аутентификации пользователей.
Аутентификация проходит успешно, если и только если командный интерпретатор пользователя обозначен в файле /etc/shells.
pam_securetty
Используется только в режиме аутентификации пользователей.
Сообщает об успехе аутентификации суперпользователя, только если он посылает запрос с «безопасного» терминала (список таких терминалов берется с файла /etc/securetty).
pam_rhosts_auth
Используется только в режиме аутентификации пользователей.
Аутентификация проходит успешно, если и только если узел, с которого присылается запрос, присутствует в перечне, который содержится в файле /etc/hosts.equiv, или пара «отдаленное имя пользователя — отдаленный узел» обозначена в файле ~/.rhosts.
Это традиционный элемент работы таких служб, как rlogin, rsh.
pam_timestamp
Используется только в режимах аутентификации пользователей и управления сеансами.
В режиме аутентификации пользователей
проверяет наличие в своем кеше информации о предыдущих успешных сеансах этого пользователя и сообщает об успешной аутентификации, если ее находит (и неуспешную, если не находит).
В режиме управления сеансами
создает в своему кеше соответствующий файл.
Основные опции:
- timestampdir=name: указывает каталог для размещения кеша (по умолчанию — /var/run/sudo);
- timestamp_timeout=number: указывает интервал времени (в секундах), на протяжении которого файлы в кеше остаются действительными после их создания (значение по умолчанию: 600).

/etc/pam.d/some-config-tool:
auth sufficient pam_timestamp.so
auth required pam_unix.so
session required pam_permit.so
session optional pam_timestamp.so
pam_console
Используется только в режимах аутентификации пользователей и управления сеансами.
В режиме аутентификации пользователей
возвращает успех только и если только запрос поступает из локальной консоли.
В режиме управления сеансами
дает возможность предоставлять пользователям, которые начинают локальный сеанс работы, дополнительные полномочия (а по завершению сеанса их забирать). Дополнительные полномочия формулируются как дополнительные права доступа к файлам и описываются в конфигурационном файле (/etc/security/console.perm по умолчанию) (на практике дело касается переопределения владельцев и списков контроля доступа к отдельным файлам устройств (таких, как /dev/cdrom, /dev/fd0)).
pam_env
Используется только в режиме аутентификации пользователей (и реагирует только на вызов pam_setcred(3) (который выполняется, по обыкновению, после успешной аутентификации пользователя)).
Выполняет инициализацию/деинициализацию отдельных переменных окружения. Перечень этих переменных и их значения задаются через конфигурационные файлы (по умолчанию, /etc/security/pam_env.conf и /etc/environment).
pam_limits
Используется только в режиме управления сеансами.
Разрешает установить ограничение на использование ресурсов, которые могут быть получены пользователем на протяжении сеанса. Перечень ограничений задается конфигурационным файлом (по умолчанию, /etc/security/limits.conf). На суперпользователя эти ограничения не распространяются.

- максимальный размер core-файла;
- максимальный размер создаваемых пользователем файлов;
- максимальное количество открытых пользователем файлов;
- максимальное количество заблокированных пользователем файлов;
- максимальный размер адресного пространства, который может быть выделен создаваемым пользователем процессам;
- максимальный размер сегмента данных создаваемых пользователем процессам;
- максимальный размер сегмента стека создаваемых пользователем процессам;
- максимальный размер адресного пространства, заблокированного пользователем в памяти;
- максимальный размер занятой пользователем физической оперативной памяти;
- максимальное количество активных процессов;
- максимальный приоритет процессов, созданных пользователем;
- максимальное количество полученного на протяжении сеанса процессорного времени;
- максимальное количество открытых сеансов (как отдельным пользователем, так и вообще в системе).
pam_cracklib
Используется только в режиме управления паролями (а именно, для проверки прочности паролей, которые вводятся пользователями) в связке с другими модулями (которые должны выполнять собственно изменение пароля).
Работа данного модуля по умолчанию заключается в следующем: получить от пользователя пароль, проверить его на прочность, и, если он окажется достаточно крепким, спросить подтверждение введенного пароля и сравнить его с изначально введенным значением. Дальше, если данный модуль отработает успешно, пароль передается следующему в связке модулю.

- проверка на соответствие словам из словаря;
- некоторые проверки на соответствие паролям, которые уже использовались данным пользователем (сохраняются модулем pam_unix в файле /etc/security/opasswd);
- проверка на достаточную длину;
- несколько проверок на достаточное разнообразие символов.

- retry=N: задает максимальное количество попыток выбрать надежный пароль, которые могут быть предоставлены пользователю (по умолчанию предоставляется лишь одна такая попытка);
- type=XXX: замещает в стандартных приглашениях на введение нового паролю «New UNIX password» и «Retype UNIX password» слово “UNIX” рядком XXX;
- difok=N: определяет минимально допустимое количество символов, присутствующих в новом и отсутствующих в старом пароле (значение по умолчанию 10) (если хотя бы половина символов в новом пароле не встречается в старом, пароль также будет принят);
- minlen=N: определяет минимально допустимую длину нового пароля (значение по умолчанию 9) (нужно иметь в виду, что, во-первых, опции dcredit, lcredit, ucredit, ocredit могут фактически увеличивать эту величину, во-вторых, эта величина не может быть меньше 6);
- dcredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового пароля, выделенный на включение в пароль цифр (N первых цифр не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество цифр в новом пароле;
- ucredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового пароля, выделенный на включение в пароль букв в верхнем регистре (N первое количество букв в верхнем регистре не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество букв в верхнем регистре в новом пароле;
- lcredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового пароля, выделенный на включение в пароль букв в нижнем регистре (N первых букв в нижнем регистре не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество букв в нижнем регистре в новом пароле;
- ocredit=N: если N>=0, определяет максимальный кредит минимально допустимой длины нового паролю, выделенный на включение в пароль других символов (N первых таких символов не будут учитываться при сравнивании длины пароля с минимально допустимой; по умолчанию это значение 1); если N<0, определяет минимально допустимое количество других символов в новом пароле (по умолчанию это ограничение не накладывается).

Файл /usr/share/doc/pam-X.XX/txts/README.pam_xxx.
Хорошо написано, а если учесть что про Линуху, то вообще разжевано «для чайников»
Сэнкс!
Уважаю Linux. Простой и продуманный.
А все таки чуется веение Unix. Хорошая фишка Линухи — все можно с строковом режиме настроить и очень быстро.
подскажите пожалуйсто достоинства и недостатки модуля РАМ pam_abl очень срочно надо
Julia:
на практике не сталкивался, но слышал, что не плохое средство блокировки ip-адресов.
при правильной настройке, после ввода команды #pam_abl покажет список заблоченных хостов и неудачных попыток входа. удачное средство против ботов.
доп. материал (англ.): http : // www . hexten . net/assets/pam_abl_doc/index . html
http : // linux.die . net/man/1/pam_abl — man