Вопрос или проблема
У меня есть сервер, настроенный с winbind и samba для обеспечения аутентификации Active Directory. Интеграция с Active Directory работает нормально, однако каждый раз, когда я аутентифицируюсь, я вижу следующие ошибки:
Ошибки
Аутентификация:
11 мая 00:25:29 SERVER sshd[28119]: pam_unix(sshd:auth): ошибка аутентификации; logname= uid=0 euid=0 tty=ssh ruser= rhost=x.x.x.x user=USERNAME
Sudo:
11 мая 01:33:14 SERVER sudo: pam_unix(sudo:auth): ошибка аутентификации; logname=USER_NAME uid=2005125 euid=0 tty=/dev/pts/2 ruser=USER_NAME rhost= user=USER_NAME
Конфигурация
/etc/samba/smb.conf:
[global]
workgroup = WORKGROUP
realm = DOMAIN NAME
security = ADS
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = No
winbind separator = +
kerberos method = secrets and keytab
idmap config * : backend = autorid
idmap config * : range = 1000000-19999999
idmap config * : rangesize = 1000000
template shell = /bin/bash
netbios name = SERVERNAME
/etc/pam.d/system-auth
#%PAM-1.0
# Этот файл создается автоматически.
# Изменения пользователя будут уничтожены при следующем запуске authconfig.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_winbind.so use_first_pass
auth required pam_deny.so
account required pam_unix.so broken_shadow
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 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_winbind.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_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_winbind.so
/etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Используется с polkit для повторной авторизации пользователей в удаленных сессиях
-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close должна быть первым правилом сессии
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open должна следовать только за сессиями, выполняемыми в контексте пользователя
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Используется с polkit для повторной авторизации пользователей в удаленных сессиях
-session optional pam_reauthorize.so prepare
sshd_config:
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
AuthorizedKeysFile .ssh/authorized_keys
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
# переопределить значение по умолчанию для подсистем
Subsystem sftp /usr/libexec/openssh/sftp-server
UsePrivilegeSeparation yes
AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
AuthorizedKeysCommandUser ec2-instance-connect
Banner /etc/motd
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no
Как я могу исправить этот журнал?
Я не эксперт в PAM, но это, вероятно, происходит потому, что модуль аутентификации pam_unix
(локальная база данных пользователей: /etc/password
и /etc/shadow
) проверяется перед модулем pam_winbind
(Samba/Active Directory). Я смотрю на строки auth
в вашем /etc/pam.d/system-auth
и предполагаю, что system-auth
связан с password-auth
(на который ссылается /etc/pam.d/sshd
).
Когда вы входите как пользователь AD, pam_unix
не находит пользователя локально, и поэтому PAM записывает ошибку аутентификации для этого модуля. Поскольку pam_unix
помечен как sufficient
, не нахождение пользователя локально не считается полной ошибкой, и поэтому PAM переходит к следующему модулю, в конечном итоге достигая pam_winbind
, который успешно аутентифицирует пользователя AD.
Я не знаю способа подавить только сообщение журнала, но теоретически вы можете изменить порядок строк модулей auth
, чтобы pam_unix
проверялся после pam_winbind
. Хорошо это или плохо на практике нужно оценить.
Конечно, конфигурация PAM очень чувствительна к безопасности, поэтому вы должны тщательно обдумать и исследовать любые изменения и сначала тщательно протестировать их на непроизводственной системе. Например, что будет, если служба Samba недоступна, а вам нужно войти как локальный пользователь? Как проверка pam_succeed_if.so uid >= 1000
вписывается в это? И так далее.
Ответ или решение
Проблема с pam_unix
при аутентификации SSH и Sudo
Вы столкнулись с ситуацией, когда аутентификация через SSH и команду Sudo для пользователей Active Directory (AD) проходит успешно, но в логах регистрируются ошибки pam_unix
. Эти сообщения указывают на неудачную аутентификацию через модуль pam_unix
, даже если фактический вход в систему происходит корректно. Давайте подробно рассмотрим причины этого явления и возможные пути его решения.
Анализ логов
Ваши логи показывают следующие сообщения:
May 11 00:25:29 SERVER sshd[28119]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=x.x.x.x user=USERNAME
May 11 01:33:14 SERVER sudo: pam_unix(sudo:auth): authentication failure; logname=USER_NAME uid=2005125 euid=0 tty=/dev/pts/2 ruser=USER_NAME rhost= user=USER_NAME
Эти сообщения относятся к попыткам аутентификации с использованием pam_unix
, в то время как вы ожидаете, что должна использоваться pam_winbind
для пользователей AD.
Конфигурация PAM
Рассмотрим вашу конфигурацию PAM, особенно в файлах /etc/pam.d/system-auth
и /etc/pam.d/sshd
.
Строка:
auth sufficient pam_unix.so nullok try_first_pass
ставит pam_unix
в один из первых слоев аутентификации. В случае, если PAM не находит пользователя в локальных файлах /etc/passwd
и /etc/shadow
, он выдает ошибку аутентификации, но, поскольку это помечено как sufficient
, процесс аутентификации продвигается дальше к следующему модулю, в вашем случае — к pam_winbind
, который выполняет проверку в Active Directory.
Возможные решения проблемы
-
Изменение порядка модулей PAM:
Чтобы устранить сообщения об ошибках, можно изменить порядок модулей в конфигурации PAM, поставивpam_winbind
передpam_unix
. Это обеспечит, что при успешной аутентификации пользователя AD не будет вызванаpam_unix
, и, следовательно, не будет зарегистрировано сообщение об ошибке.Пример изменения:
auth sufficient pam_winbind.so use_first_pass auth required pam_unix.so nullok try_first_pass
Однако следует помнить, что такая настройка может создать проблемы с локальными пользователями, если
winbind
по каким-то причинам будет недоступен. -
Тестирование и безопасность:
Перед внесением изменений в конфигурацию PAM рекомендуется тщательно протестировать ваши изменения на тестовой среде, чтобы убедиться, что все сценарии аутентификации работают корректно. Помните, что конфигурация PAM критична с точки зрения безопасности. Каждое изменение должно быть продумано с точки зрения потенциальных рисков. -
Логи и мониторинг:
Если вы измените порядок модулей и по-прежнему хотите отслеживать проблемы, рекомендуется включить ведение детализированных логов для модуля PAM. Это позволит вам более точно выявлять причины проблем в будущем. -
Обратите внимание на остальные требования:
Проверьте, как остальные модули клуба конфигурации PAM взаимодействуют друг с другом. Некоторые модули могут требовать наличия активности, если Samba или AD не доступны. Убедитесь, что ваша система имеет подходящие резервные механизмы для локальной аутентификации.
Заключение
Изменение порядка проверки модулей PAM может помочь предотвратить сообщения об ошибках при использовании локальной аутентификации через pam_unix
, что улучшит читабельность логов и избавит от ненужных записей об ошибках. Тем не менее, это решение должно быть тщательно протестировано и оценено с учетом всех последствий. В качестве дополнительной меры вы также можете задействовать ведение логов для более подробного анализа ситуации.