У меня есть следующие директивы в моем /etc/pam.d/sshd
файл на коробке RHEL5, и я немного запутался. Эти директивы нужны для работы LDAP + RADIUS + OTP. Я пытаюсь сказать pam не проверять UID <499 пользователей для LDAP + RADIUS + OTP, а также исключить проверку UID = 30027 на то же самое.
Эта директива работает по назначению. Он проверяет, если UID> = 499, и если это так, он пропускает (достаточно авторизации pam_unix.so nullok_secure).
auth [success=1 default=ignore] pam_succeed_if.so uid >= 499 quiet
Я здесь запутался. Это должно сделать LDAP + RADIUS + OTP, поскольку успех = 1, но каким-то образом он все еще работает. Разве это не должно быть пропуском следующего правила, если это правда?
auth [success=1 default=ignore] pam_succeed_if.so uid eq 30027 quiet
auth sufficient pam_unix.so nullok_secure
auth sufficient pam_radius_auth.so
auth required /lib/security/pam_google_authenticator.so forward_pass
Хотя у меня есть вещи, которые работают так, как я хочу, я запутался в логике этого.
Хорошо, вот что я получаю в / var / log / secure, когда я использую ssh с локальным пользователем с uid 30327 -
Aug 8 08:21:30 journey sshd[9357]: Accepted keyboard-interactive/pam for sidd from 10.1.1.178 port 51242 ssh2
Aug 8 08:21:30 journey sshd[9357]: pam_unix(sshd:session): session opened for user sidd by (uid=0)
Это то, что я получаю ssh, используя root с uid 0 (<499).
Aug 8 08:25:51 journey sshd[9402]: Accepted keyboard-interactive/pam for root from 10.1.1.178 port 51246 ssh2
Aug 8 08:25:51 journey sshd[9402]: pam_unix(sshd:session): session opened for user root by (uid=0)
Вот что я получаю, когда использую пользователя ldap только с паролем LDAP и без OTP -
Aug 8 08:27:04 journey sshd[9447]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=journey user=schoure
Aug 8 08:27:05 journey sshd(pam_google_authenticator)[9447]: Failed to read "/home/schoure/.google_authenticator"
Aug 8 08:27:07 journey sshd[9445]: error: PAM: Cannot make/remove an entry for the specified session for schoure from journey
Вот что я получаю, когда использую пользователя ldap с LDAP + OTP -
Aug 8 08:28:13 journey sshd[9452]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=journey user=schoure
Aug 8 08:28:13 journey sshd[9450]: Accepted keyboard-interactive/pam for schoure from 10.1.1.178 port 43068 ssh2
Aug 8 08:28:13 journey sshd[9450]: pam_unix(sshd:session): session opened for user schoure by (uid=0)
Итак, вы правы - pam_unix не работает для пользователей LDAP, но, поскольку он установлен на «достаточно», он не является терминальным. Спасибо, что прояснили это.
Что касается вашего другого пункта -
auth [success=1 default=ignore] pam_succeed_if.so uid eq 30027 quiet
не получая оценки, я вижу, что это оценивается. Если я закомментирую эту директиву, я получу
Aug 8 08:34:39 journey sshd(pam_google_authenticator)[9537]: Failed to read "/home/sidd/.google_authenticator"
Aug 8 08:34:42 journey sshd[9535]: error: PAM: Cannot make/remove an entry for the specified session for sidd from journey
Поэтому я все еще не понимаю, как это работает, поскольку явно 30327> 499, и, следовательно, он должен пропустить вторую строку. Единственная причина, по которой я вижу, что это работает, если PAM каким-то образом добавляет неявное OR между первыми двумя строками.
ОБНОВЛЕНИЕ 2
Ах, я вижу, что происходит. По сути, эта строка - просто заполнитель. Я изменил этот UID на какой-то случайный UID, которого не существует, и он все еще работал. Так что я понимаю логику -
По сути, я сделал что-то не так, и это сработало. Я получаю то, что мне нужно делать, и это работает для меня.
Я не хочу, чтобы локальные пользователи проходили аутентификацию через LDAP + RADIUS + OTP, поэтому эти три строки должны выполнять эту работу за меня. Они работают, но мне просто хотелось бы подтверждения, что они правы -
auth sufficient pam_unix.so nullok_secure
auth sufficient pam_radius_auth.so
auth required /lib/security/pam_google_authenticator.so forward_pass
Вы действительно уверены, что он пропускает pam_unix.so
?
sufficient
это «нетерминальное» поведение при отказе. Даже если проверка pam_unix.so не удалась, аутентификация продолжит попытку pam_radius_auth.so.
Моя интерпретация такова:
uid eq 30027
проверка никогда не вернет истину. Тест будет запущен только в том случае, если uid <499, что делает невозможным условие uid eq 30027
быть правдой.pam_unix.so
будет предпринята попытка в все сценарии, и если это не удастся, pam_radius_auth.so
будет предпринята попытка.pam_google_authenticator.so
будет предпринята попытка, если они оба потерпят неудачу.Еще раз проверьте свои журналы. Логины с радиусом могут и не давать сбоев, но pam_unix.so
проверить наверное является регистрация сбоя. Это просто не мешает вам войти в систему.
Этот ответ точно покрывает объем исходного вопроса. Любые дополнительные вопросы, которые были заданы в обновлениях или комментариях, не рассматриваются.