[devel] pam-config с поддержкой system-policy

Evgeny Sinelnikov sin на altlinux.org
Пн Май 18 04:19:49 MSK 2020


Здравствуйте,

в сизиф отправлена новая сборка pam-config-1.9.0 включающая следующие
исправления и доработки:

Исправления в промежуточной версии 1.8.0 (подготовлена ldv@)
- В настройках pam_tcb удалено явное указание prefix=$2y$ count=8 from
pam_tcb options (closes: #36279)
- Общие настройки из system-auth-local и
system-auth-use_first_pass-local (для модулей pam_mktemp и pam_limits)
перенесены в отдельный system-auth-common. Часть относящая к pam_tcb
перенесена system-auth-local-only и
system-auth-use_first_pass-local-only соответственно.
- Подпакет pam0-config объединён в pam-config.

Исправления в релизной версии 1.9.0:
- Основные методы аутентификации system-auth (krb5, krb5_ccreds, ldap,
winbind) переписаны с использованием pam_localuser, как переключателя.
Если пользователь локальный (то есть фактически присутствует в
/etc/passwd), аутентификация осуществляется через метод local, иначе -
через выбранный нелокальный метод аутентификации (реализовано ldv@).
- В методе аутентификации winbind удалено явное указание типа кеша ключей.
- Добавлены файл-триггеры, возвращающие метод аутентификации local, в
случае удаления соответствующих файлов (такая ситуация возникает для
дополнительных методов, например из пакета sssd-client).
- Добавлен новый механизм управления стеком аутентификации -
system-policy, позволяющий в рамках выбранного метода аутентификации
включать дополнительные модули в момент логина в систему.

Исходный код доступен по адресу:
http://git.altlinux.org/gears/p/pam-config.git

________________________

Общий стек для входа в систему теперь выглядит следующим образом:

$ cat pam-config/common-login
#%PAM-1.0
auth            substack        system-auth
auth            substack        system-policy
auth            required        pam_nologin.so
account         substack        system-auth
account         substack        system-policy
account         required        pam_nologin.so
password        include         system-auth
password        include         system-policy
session         substack        system-auth
session         required        pam_loginuid.so
-session        optional        pam_systemd.so
session         substack        system-policy

Стек локальной политики system-policy-local - по умолчанию, пуст.
Стек политики удалённого входа (для нелокальных методов)
system-policy-remote включает в себя только pam_mkhomedir.

Новая архитектура модулей аутентификации практически исключает
дублирование правил. Стеки для нелокальных методов генерируются из
общего шаблона и разделены на две части - генерируемую и собственную.

Генерируемая часть стека создаётся из следующего шаблона:

$ cat system-auth-chooser.in

@TYPE@  [success=4 perm_denied=ignore default=die]      pam_localuser.so
@TYPE@  [success=1 default=bad] pam_succeed_if.so uid >= 500 quiet
@TYPE@  [default=1]     pam_permit.so
@TYPE@  substack        @BASE at -@METHOD at -only
@TYPE@  [default=1]     pam_permit.so
@TYPE@  substack        @BASE at -local-only
@TYPE@  substack        system-auth-common

Собственная часть методов выглядит лаконично и практически идентично
для всех типов методов:

$ cat pam-config/system-auth-krb5-only
#%PAM-1.0
auth            required        pam_krb5.so
account         required        pam_krb5.so
password        required        pam_krb5.so
session         required        pam_krb5.so

$ cat pam-config/system-auth-use_first_pass-krb5-only
#%PAM-1.0
auth            required        pam_krb5.so use_first_pass
password        required        pam_krb5.so use_authtok

К соответствующему виду приведен и стек sssd.

________________________

Поскольку правило "session required pam_mkhomedir.so silent" переехало
из system-auth в common-login посредством system-policy, локальные
не-логин сервисы, которые не используют common-login, в т.ч. su, не
получат теперь правило для pam_mkhomedir. И, соответственно,
сайдэффектом будет такое поведение, при котором "зайти" в ранее не
логиневшегося пользователя через su - USERNAME не получится.

Ошибка при этом будет выглядеть следующим образом:

sin at demo ~ $ su - administrator
Password:
/home/DOMAIN.ALT/administrator not available; exiting

Данное поведение вводится по умолчанию и затрагивает только те случаи,
когда утилиты пытаются использовать стек PAM для переключения в
пользователя, который никогда ранее не входил в систему и,
соответственного, у которого отсутствует домашний каталог.

Для переключения к предыдущему поведению рассматривается доработка в
виде control'а, доступная в моём репозитории (вопрос реализации - пока
открыт):
http://git.altlinux.org/people/sin/packages/pam-config.git

________________________

Реализация нового механизма system-policy аналогична system-auth:

# control system-auth summary
system authentication type

# control system-auth help
krb5: authentication via Kerberos 5
krb5_ccreds: authentication via Kerberos 5 with local caching
ldap: authentication via LDAP
local: local authentication
multi: use multi authentication method
pkcs11: use pkcs11 authentication method
sss: use sss authentication method
winbind: authentication via Winbind

Доступные поллитики по умолчанию:

# control system-policy summary
system session policy type

# control system-policy help
local: local session policy
remote: remote session policy with mkhomedir

________________________

Варианты использования system-policy:

1) Стек включающий pam_mount:

Создаём новый вариант политики PAM-модулей:

# cat /etc/pam.d/system-policy-remote_with_pam_mount
#%PAM-1.0
auth        substack    system-policy-remote
auth        optional    pam_mount.so
account        substack    system-policy-remote
password    substack    system-policy-remote
session        substack    system-policy-remote
session        optional    pam_mount.so

Проверяем текущую, смотрим доступность и переключаемся на новую
политику стека PAM-модулей:

# control system-policy
remote

# control system-policy help
local: local session policy
remote: remote session policy with mkhomedir
remote_with_pam_mount: use remote_with_pam_mount session policy

# control system-policy remote_with_pam_mount

# ls -l /etc/pam.d/system-policy
lrwxrwxrwx 1 root root 35 мая 18 05:05 /etc/pam.d/system-policy ->
system-policy-remote_with_pam_mount


2) Стек включающий групповые политики для пользователя:

$ cat pam-config/system-policy-gpupdate
#%PAM-1.0
-session        optional        pam_oddjob_mkhomedir.so
-session        optional        pam_oddjob_gpupdate.so
session         optional        pam_env.so user_readenv=1

Создаётся и настраивается аналогично.


-- 
Sin (Sinelnikov Evgeny)


Подробная информация о списке рассылки Devel