PAM_TCB(8)

Название
pam_tcb - реализующий поддержку схемы управления теневыми паролями tcb для всех групп управления, определённых в PAM: authentication, account, session, и password management.

Описание
pam_tcb - это модуль PAM, предназначенный для работы с Unix-аккаунтами и поддерживающий все определённые в PAM группы управления (PAM management groups): authentication, account management, session management, и password management. pam_tcb является заменителем использующихся в традиционной для Unix схеме модулей pam_unix и pam_pwdb.

authentication
    Модуль pam_tcb использует только функции getpwnam(3) и getspnam(3) для получения информации, необходимой для аутентификации пользователей. Для хеширования паролей используется функция crypt_ra(3) либо crypt(3). Это значит, в частности, что модуль pam_tcb использует NSS и поддерживает все методы хеширования, поддерживаемые системными библиотеками (такими как libcrypt).

account management
    Если информация об аккаунте доступна с помощью getspnam(3), подсистема pam_tcb, реализующая account management, проверяет срок действия пароля и аккаунта. При этом используются поля теневой записи, подробно описанной в shadow(5). Приложения, использующие PAM, должны соответствующим образом обрабатывать код возврата и, возможно, использовать password management group для смены истекшего пароля.

session management
    По умолчанию, pam_tcb протоколирует открытие и закрытие сессий PAM с помощью syslog(3). В качестве syslog facility используется LOG_AUTH и, если не указан параметр noopenlog, в качестве ident используется "pam_tcb". Эту функциональность можно отключить с помощью параметра nolog (см. ниже).

password management
    pam_chauthtok(3) выполняется в две стадии при обработке стека password management: PAM_PRELIM_CHECK и PAM_UPDATE_AUTHTOK. Во время стадии PAM_PRELIM_CHECK, модуль pam_tcb может, в зависимости от параметров, запросить пароль, и всегда проверяет старый пароль. Это позволяет использовать в стеке password management модуль контроля и обеспечения качества паролей типа pam_passwdqc до pam_tcb, избавляя такой модуль от необходимости выполнения задач, возлагаемых на pam_tcb. Собственно смена пароля происходит во время стадии PAM_UPDATE_AUTHTOK.

    Во время смены пароля модуль pam_tcb может вносить изменения в следующие базы паролей:

    файл /etc/passwd, см. passwd(5);
    файл /etc/shadow см. shadow(5);
    структура, расположенная в /etc/tcb/ см. tcb(5);
    NIS и NIS+.

Параметры
Большинство параметров, использующихся в модулях pam_unix и pam_pwdb, используются в модуле pam_tcb и имеют тот же смысл. Впрочем, есть некоторые семантические различия, описанные ниже. Все логические параметры по умолчанию выключены. Значения по умолчанию для остальных параметров приведены ниже.

debug
    Выводить отладочную информацию при помощи syslog(3).

audit
    Выводить более детальную отладочную информацию, включая неизвестные имена пользователей. Есть риск того, что таким образом в лог попадут пароли, введённые по ошибке пользователями вместо имён.

noopenlog
    В обычной ситуации модуль pam_tcb вызывает openlog(3) с аргументом ident "pam_tcb" до протоколирования и closelog(3) после. Параметр noopenlog выключает этот механизм.

nolog
    Выключить протоколирование.

blank_nolog
    Не протоколировать неудачные попытки аутентификации в случае, если введён пустой пароль. Если этот параметр не используется, некоторые приложения, например, sshd(8), могут порождать ложные предупреждения.

nullok
    Разрешить пустые пароли.

use_first_pass
    Не запрашивать пароль у пользователя, вместо этого взять значение из PAM_AUTHTOK и, возможно, PAM_OLDAUTHTOK.

try_first_pass
    В качестве пароля использовать значения из PAM_AUTHTOK и, возможно, PAM_OLDAUTHTOK, и запросить пароль у пользователя в случае, если значения соответствующих переменных PAM не определены.

use_authtok
    Действовать аналогично use_first_pass, используя только (новое) значение PAM_AUTHTOK. Этот параметр предназначен для организации стеков модулей для password management.

not_set_pass
    Запретить модулю изменять значения вышеупомянутых переменных PAM.

likeauth
    Будучи вызванным как credential setting module, возвращать то же значение, что было возвращено во время аутентификации.

passwd
    Если указан этот параметр, pam_tcb может использовать второе поле пользовательской записи (обычно из файла /etc/passwd) в качестве хеша пароля. Детали см. ниже.

shadow
    Если указан этот параметр, pam_tcb может использовать второе поле теневой пользовательской записи (обычно из файла /etc/shadow или из теневого файла по схеме tcb) в качестве хеша пароля. Детали см. ниже.

nisplus
    Если указан этот параметр, pam_tcb будет пытаться устанавливать EUID пользователя непосредственно перед получением хеша пароля. Этот параметр необходимо указывать при использовании NIS+. Детали см. ниже.

write_to=
    Этот параметр определяет, где модуль pam_tcb должен хранить хеши новых паролей при смене паролей. Возможные значения: "passwd", "shadow", "tcb", и "nis". Значение по умолчанию: "shadow".

md5 При обновлении паролей пользователей хешировать новые пароли с помощью устаревшего алгоритма, заимствованного из FreeBSD и основанного на MD5.

prefix=
    При обновлении паролей пользователей генерировать salt с указанным префиксом (который, в свою очередь, определяет, какой метод будет применён для хеширования пароля). Значение по умолчанию для префикса - "$2a$", что соответствует bcrypt- методу, основанному на Blowfish и поддерживающему изменяемое число итераций.

count=
    Число итераций, используемых криптографическим алгоритмом при хешировании паролей. Значение по умолчанию - 0; в этом случае применяется количество итераций по умолчанию для выбранного криптоалгоритма.

    Рекомендуется переопределять это значение. За информацией по поддерживаемым методам хеширования, их свойствам и параметрам обращайтесь к crypt(3).

plain_crypt
    Использовать crypt(3) вместо crypt_ra(3). Это может понадобиться в случае, если в системной библиотеке нет реентерабельной реализации выбранного метода хеширования.

nodelay
    Не задерживать выполнение при неудачных попытках аутентификации.

fork
    Создавать специальный подпроцесс для доступа к теневым файлам. При использовании этого параметра можно быть уверенным в том, что после вызова pam_end(3) в адресном пространстве процесса не останется важной информации о паролях. С другой стороны, применение этого параметра может негативно повлиять на работоспособность некоторых сложных приложений, и требует некоторых дополнительных ресурсов системы, что может несколько снизить производительность.

helper=
    Если хеш пароля не может быть получен модулем pam_tcb и UID аутентифицируемого пользователя совпадает с real UID того пользователя, под которым работает модуль, то pam_tcb запускает привилегированную вспомогательную программу для получения хеша пароля, необходимого для выполнения аутентификации. Этот параметр указывает путь к вспомогательной программе. Если указан пустой путь, то никакой вспомогательной программы запущено не будет. Значение по умолчанию - /usr/lib/chkpwd/tcb_chkpwd.

Получение хешей паролей
Модуль pam_tcb использует следующий алгоритм для получение хеша пароля пользователя:

если (указан параметр passwd и поле pw_passwd не равно ни "x", ни "*NP*")
использовать поле pw_passwd в качестве хеша;
если (указан параметр nisplus) {
попытаться установить EUID соответствующего пользователя; если не удалось, то признать попытку неудачной;
получить struct spwd пользователя с помощью getspnam(3);
восстановить прежний EUID;
использовать поле sp_pwdp в качестве хеша;
}
если (указан параметр shadow и поле pw_passwd равно "x")
использовать поле sp_pwdp в качестве хеша;
если все вышеперечисленное не удалось, признать попытку неудачной.

Дефекты
Текущая реализация модуля pam_tcb не является thread-safe (равно как pam_unix и pam_pwdb).

Историческая справка
Первая публичная версия реализации альтернативной схемы управления теневыми паролями tcb появилась 12 ноября 2001 года в ОС Openwall GNU/*/Linux.

Rafal Wojtczuk <nergal@owl.openwall.com>, Solar Designer <solar@owl.openwall.com> -
    реализация схемы tcb для ОС Openwall GNU/*/Linux.

Реализация PAM-модуля
    pam_tcb призвана обеспечивать обратную совместимость с pam_unix, ввиду чего некоторые решения были заимствованы из pam_unix. Некоторые менее критичные фрагменты кода, а также в некоторой мере композиция кода взяты из реализации модуля pam_unix в Linux-PAM. Имена соавторов pam_unix приведены в каталоге orig_copyright/ исходного кода схемы tcb.

Ссылки
crypt(3), crypt_ra(3), getpwnam(3), getspnam(3), shadow(3), syslog(3), login.defs(5), passwd(5), shadow(5), tcb(5), pam(8), tcb_convert(8)