Добрый день. Я пытаюсь разобраться с аутентификацией через PAM и заметил, что для каждого приложения создается свой набор правил AAA. У меня возник вопрос: обычно в документации описывается авторизация по одному источнику, но мне необходимо реализовать следующий алгоритм: когда пользователь пытается подключиться через PAM, сначала осуществляется попытка аутентификации на сервере (например, через Radius). Если эта попытка завершается неудачно, то осуществляется локальная аутентификация (через shadow). Я не могу понять, как это корректно прописать в конфигурационном файле. Например, как будет выглядеть настройка, если я использую следующий код: <br/> <pre><code>#%PAM-1.0 auth requisite /lib/security/pam-radius.so auth required /lib/security/pam_unix.so shadow nodelay account required /lib/security/pam_nologin.so account required /lib/security/pam_unix.so password required /lib/security/pam_unix.so shadow nullok use_authtok session required /lib/security/pam_unix.so session required /lib/security/pam_limits.so</code></pre> <br/> <br/> В этом случае, получится ли, что независимо от результатов аутентификации на сервере, всегда будет происходить запрос к модулю локальной авторизации?
Да, вы совершенно правы. В вашем текущем конфигурационном файле PAM для аутентификации, как он написан, действительно всё будет происходить так, как вы описали. Если вы используете следующий код: ```plaintext #%PAM-1.0 auth requisite /lib/security/pam-radius.so auth required /lib/security/pam_unix.so shadow nodelay account required /lib/security/pam_nologin.so account required /lib/security/pam_unix.so password required /lib/security/pam_unix.so shadow nullok use_authtok session required /lib/security/pam_unix.so session required /lib/security/pam_limits.so ``` Это значит, что: 1. Произведётся попытка аутентификации через модуль `pam-radius.so`. 2. Если `pam-radius.so` возвращает неудачу, то будет выполнен `pam_unix.so`. 3. В отличие от модуля `requisite`, который остановит дальнейшую аутентификацию сразу при неудаче, `required` продолжит выполнение последующих модулей аутентификации, даже если предыдущий завершился неудачно. Так что в текущем варианте, независимо от результата выполнения модуля `pam-radius.so`, модуль `pam_unix.so` будет вызван и произведется попытка локальной аутентификации. Если вам нужно изменить порядок или логику аутентификации, обдумайте возможность использования модуля `pam-auth-so`. Это может помочь вам настроить более сложные практики аутентификации. Пример настройки, когда вы хотите проверить RADIUS и только при его неудаче — выполнять локальную аутентификацию, может выглядеть так: ```plaintext #%PAM-1.0 auth required /lib/security/pam-radius.so auth [success=1 default=ignore] /lib/security/pam_unix.so shadow nodelay auth required /lib/security/pam_unix.so shadow nodelay account required /lib/security/pam_nologin.so account required /lib/security/pam_unix.so password required /lib/security/pam_unix.so shadow nullok use_authtok session required /lib/security/pam_unix.so session required /lib/security/pam_limits.so ``` В этом случае, если `pam-radius.so` будет успешным, `pam_unix.so` не будет запрашиваться, а если будет неудачным, то произойдет переход к следующему модулю `pam_unix.so`. Убедитесь, что правильные модули загружены и что их версии соответствуют вашему окружению и требуемой функциональности.
Держи. Читать и разбираться, что почем придется самому.
Задача - локальная аутентификация., в случае отсутствия юзера - аутентификация через AD
auth required pam_env.so auth [success=3 new_authtok_reqd=done default=ignore] pam_unix.so try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet auth [success=1 new_authtok_reqd=done default=ignore] pam_winbind.so use_first_pass use_authtok krb5_auth krb5_ccache_type=FILE:/tmp/krb5cc_%u cached_login auth requisite pam_deny.so auth required pam_permit.so auth optional pam_keystore.so use_first_pass auth optional pam_ecryptfs.so unwrap auth optional pam_gnome_keyring.so auth optional pam_exec.so seteuid expose_authtok /usr/local/sbin/generate-credstore-auth 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_winbind.so account required pam_permit.so password required pam_pwquality.so try_first_pass retry=3 type= password sufficient pam_unix.so nullok sha512 shadow try_first_pass use_authtok password optional pam_ecryptfs.so password required pam_deny.so password optional pam_gnome_keyring.so session required pam_env.so session required pam_limits.so -session optional pam_loginuid.so session optional pam_mkhomedir.so umask=0077 -session optional pam_elogind.so session optional pam_exec.so seteuid /usr/local/sbin/generate-credstore-session -p .trinity/share/config -d DOMAIN session [success=2 default=ignore] pam_succeed_if.so service in crond quiet use_uid session [success=1 new_authtok_reqd=ok ignore=ignore default=bad] pam_unix.so session required pam_winbind.so session optional pam_ecryptfs.so unwrap session optional pam_gnome_keyring.so auto_start
Скрипт generate-credstore-auth/generate-credstore-session - локальный, тебе не нужен, просто выброси