From: Evgeny Sinelnikov <sin@altlinux.org> To: ALT Linux Team development discussions <devel@lists.altlinux.org> Subject: [devel] PAM-политики (модуль sss и служба sssd) Date: Sat, 17 Jun 2017 12:22:46 +0400 Message-ID: <CAK42-GqyXjCpK6DytmNpSV+oiUL96A-9wFstKjYV8XJ3xnkM3g@mail.gmail.com> (raw) Здравствуйте, хочу продолжить тему PAM-политик на примере модуля sss и службы sssd. Общий взгляд на эту тему я уже приводил: https://lists.altlinux.org/pipermail/devel/2017-June/202807.html Теперь хотелось бы оттолкнуться от задачи и решить её в частном случае для sssd. Вот, что мы имеем сейчас: #%PAM-1.0 auth required pam_env.so auth [success=ignore default=1] pam_localuser.so auth [success=done default=ignore] pam_tcb.so shadow fork prefix=$2y$ count=8 nullok auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_sss.so account [success=ignore default=1] pam_localuser.so account [success=done default=ignore] pam_tcb.so shadow fork account requisite pam_succeed_if.so uid >= 500 quiet account required pam_sss.so password [success=ignore default=2] pam_localuser.so password required pam_passwdqc.so config=/etc/passwdqc.conf password [success=done default=ignore] pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password requisite pam_succeed_if.so uid >= 500 quiet password required pam_sss.so session [success=ignore default=1] pam_localuser.so session [success=2 default=ignore] pam_tcb.so session requisite pam_succeed_if.so uid >= 500 quiet session required pam_sss.so session required pam_mktemp.so session required pam_mkhomedir.so silent session required pam_limits.so Вот, что я предложил, в первом приближении: #%PAM-1.0 auth required pam_env.so auth [success=ignore default=1] pam_localuser.so auth [success=done default=ignore] pam_tcb.so shadow fork prefix=$2y$ count=8 nullok auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_sss.so account [success=ignore default=1] pam_localuser.so account [success=done default=ignore] pam_tcb.so shadow fork account requisite pam_succeed_if.so uid >= 500 quiet account required pam_sss.so password [success=ignore default=2] pam_localuser.so password required pam_passwdqc.so config=/etc/passwdqc.conf password [success=done default=ignore] pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password requisite pam_succeed_if.so uid >= 500 quiet password required pam_sss.so session [success=ignore default=1] pam_localuser.so session [success=2 default=ignore] pam_tcb.so session requisite pam_succeed_if.so uid >= 500 quiet session required pam_sss.so session required pam_mktemp.so session required pam_mkhomedir.so silent session required pam_limits.so А вот как это устроено в CentOS 7.3 #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth [default=1 success=ok] pam_localuser.so auth [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth sufficient pam_sss.so forward_pass auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account [default=bad success=ok user_unknown=ignore] pam_sss.so account required pam_permit.so password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_sss.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session optional pam_oddjob_mkhomedir.so umask=0077 session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_sss.so Давайте разбираться. Что мы можем, чего хотим и какие политики для этого строим. 1) Во-первых, мы не хотим путаться меджу локальными и глобальными пользователями. Для этого мы применяем модуль pam_localuser.so. Если пользователь имеется в /etc/passwd, то он считается локальным. Для негибридного домена (о гибридном домене см. следующий разбор PAM-политики krb5) этого достаточно. Но как быть в случае конфликта? А никак. Или, точнее, как в NT - обращаться по тому или иному допустимому полному имени пользователя включающего имя домена. Но вот, что меня смутило (и это надо проверить). В CentOS, в отличии от моего варианта локальные политики учётных записей применяются (секция account, модуль pam_unix.so) применяются для всех пользователей, без разбора. И в этом есть своя логика. Здесб нужно разобраться что у нас c tcb на этот счёт? Также делаем? Ещё один момент PAM-политики учётных записей (account) - это применение политик глобальных учётных записей только для несистемных локальных пользователей, даже если их uid'ы забиты в LDAP. Это интересный, не очевидный момент. Думаю стоит перенять. 2) Во-вторых, политика смены пароля у них (то есть в CentOS) к путанице приводит. Это видно из логики настроек секции password и на практике подтверждается. Если пользователь локальный вводит неправильный текущий пароль, то ему предлагается ввести глобальный пароль: [mastersin@server ~]$ passwd Changing password for user mastersin. Changing password for mastersin. (current) UNIX password: Current Password: passwd: Authentication token manipulation error [mastersin@server ~]$ id uid=1000(mastersin) gid=1000(mastersin) groups=1000(mastersin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 Очевидно, что это не логично и так мы делать не будем. 3) Во-третьих, настройка сессии. в CentOS она в включает в себя дополнительные модули. Думаю у нас keyutils стоит включить вот так (ну, так же, как systemd - если имеется в наличии): -session optional pam_keyinit.so revoke В CentOS имеется также весьма неожиданное правило, по которому для службы crond, пропускается установка pam_unix сеанса, но не сеанса pam_sss: session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_sss.so Получается вот такой гибрид, который я попытался с ходу проверить и отладить: #%PAM-1.0 auth required pam_env.so auth [success=ignore default=1] pam_localuser.so auth sufficient pam_tcb.so shadow fork prefix=$2y$ count=8 nullok auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_sss.so account required pam_tcb.so shadow fork account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_sss.so account required pam_permit.so password [success=ignore default=2] pam_localuser.so password required pam_passwdqc.so config=/etc/passwdqc.conf password [success=done default=bad] pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password requisite pam_succeed_if.so uid >= 500 quiet password required pam_sss.so -session optional pam_keyinit.so revoke -session optional pam_systemd.so session [success=ignore default=1] pam_localuser.so session [success=2 default=ignore] pam_tcb.so session requisite pam_succeed_if.so uid >= 500 quiet session required pam_sss.so session required pam_mktemp.so session required pam_mkhomedir.so silent session required pam_limits.so Выяснилось, что tcb модуль для глобальных пользователей не отрабатывает: [vagrant@client ~]$ su - administrator Password: su: Insufficient credentials to access authentication data Также выяснилось, что сеанс tcb всё равно вытается применится для глобального пользователя: WARNING: could not close session Permission denied Итого, исправленный вариант, который я сейчас отлаживаю выглдядит следующим образом: #%PAM-1.0 auth required pam_env.so auth [success=ignore default=1] pam_localuser.so auth [success=done default=bad] pam_tcb.so shadow fork prefix=$2y$ count=8 nullok auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_sss.so account [success=ignore default=1] pam_localuser.so account [success=done default=bad] pam_tcb.so shadow fork account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_sss.so account required pam_permit.so password [success=ignore default=2] pam_localuser.so password required pam_passwdqc.so config=/etc/passwdqc.conf password [success=done default=bad] pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password requisite pam_succeed_if.so uid >= 500 quiet password required pam_sss.so -session optional pam_keyinit.so revoke -session optional pam_systemd.so session [success=1 default=ignore] pam_localuser.so session [success=1 default=1] pam_sss.so session optional pam_tcb.so session required pam_mktemp.so session required pam_mkhomedir.so silent session required pam_limits.so Логин работает, смена пароля отрабатывает, глобальные и локальные политики не смешиваются. В таком же виде нужно обработать system-auth-use_first_pass-sss для не интерактивных приложений. Например, sshd сам принимает по сети пароль и программно передаёт его в стек PAM. -- Sin (Sinelnikov Evgeny)
next reply other threads:[~2017-06-17 8:22 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-06-17 8:22 Evgeny Sinelnikov [this message] 2017-06-17 10:38 ` Evgeny Sinelnikov 2017-06-19 10:00 ` Evgeny Sinelnikov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAK42-GqyXjCpK6DytmNpSV+oiUL96A-9wFstKjYV8XJ3xnkM3g@mail.gmail.com \ --to=sin@altlinux.org \ --cc=devel@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git