[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