Вопрос или проблема
В настоящее время я настраиваю LDAP-клиент для аутентификации пользователей на сервере. Разрешена только аутентификация по SSH-ключу (аутентификация по паролю не разрешена).
Моя конфигурация SSH (/etc/ssh/sshd_config)
PermitRootLogin no
AuthorizedKeysCommand /path/to/getsshkey.sh
AuthorizedKeysCommandUser root
PasswordAuthentication no
Мои другие конфигурационные файлы:
Я добавил следующую строку в /etc/pam.d/common-auth
auth required pam_access.so
Я добавил следующую строку в /etc/pam.d/sshd
account required pam_access.so
Я добавил следующую строку в /etc/security/access.conf
-: ALL EXCEPT root (group1) (group2): ALL except LOCAL
Я также настроил все эти файлы (/etc/ldap.conf, /etc/nsswitch.conf, /etc/pam.d/common-session)
Например, username1 принадлежит group1
Когда я выполняю эту команду
ssh -i private.pem username1@ip_address
Я получаю следующую ошибку в auth.log на сервере
Access denied for user username1 by PAM account configuration [preauth]
Почему доступ запрещен?
Пожалуйста, помогите мне
Лично я бы использовал директивы nss_base_<map>
, так как они немного более гибкие и работают с фильтрами pam. Однако, раз вы уже так далеко продвинулись, вот хороший способ pinpoint вашей проблемы:
Сначала проверьте вашу информацию LDAP с помощью следующих команд
$ id
$ id YOURUSERNAME (не отобразит дополнительные группы)
$ getent passwd
$ getent shadow
$ getent group
Затем проверьте ваши конфигурации фильтров pam в /etc/ldap.conf
и убедитесь, что имена хостов совпадают
Смотрите документацию по LDAP для получения дополнительной информации.
Измените DNS ИМЯ или установите DNS ИМЯ в customization.login на клиентской машине, измените имя хоста hostnamectl set-hostname.
Ответ или решение
Почему возникает ошибка доступа при аутентификации пользователя LDAP?
При настройке аутентификации пользователя через LDAP вы столкнулись с проблемой, заключающейся в том, что вы получаете ошибку "Access denied for user username1 by PAM account configuration [preauth]". Данная проблема может быть связана с несколькими факторами, и её решение требует внимательного анализа конфигурации аутентификации и прав доступа.
1. Проверка конфигурации PAM
Ваша текущая конфигурация PAM включает в себя следующие ключевые элементы:
-
В файле
/etc/pam.d/common-auth
, вы добавили:auth required pam_access.so
-
В файле
/etc/pam.d/sshd
:account required pam_access.so
-
В файле
/etc/security/access.conf
:-: ALL EXCEPT root (group1) (group2): ALL except LOCAL
Обратите внимание на правильность синтаксиса и логики конфигурации access.conf
. Текущая конфигурация запрещает доступ для всех пользователей, кроме тех, кто находится в группах group1
и group2
, и в то же время позволяет доступ только для локальных пользователей (LOCAL). Убедитесь, что пользователь username1
действительно находится в одной из этих групп.
2. Проверка членства в группах
Проверьте, правильно ли определено членство пользователя в группах. Для этого выполните следующие команды:
$ id username1
Это покажет, к каким группам принадлежит username1
. Также посмотрите, как настроены группы в LDAP с помощью:
$ getent group
3. Проверка LDAP конфигурации
Необходимо удостовериться в корректности ваших LDAP-данных и их доступности. Проверьте конфигурационный файл /etc/ldap.conf
. Убедитесь, что параметры host
, base
, и binddn
прописаны верно и соответствуют настройкам вашего LDAP-сервера.
Используйте следующие команды для проверки:
$ getent passwd username1
$ getent shadow username1
$ getent group username1
Если команды не выводят данные для username1
, значит, есть проблемы с доступом к LDAP.
4. Настройка SSH
Кроме того, проверьте настройки SSH. В вашем файле /etc/ssh/sshd_config
вы установили:
PasswordAuthentication no
Это верно, но убедитесь, что ваш скрипт getsshkey.sh
, указанный в AuthorizedKeysCommand
, правильно реализован и возвращает SSH-ключи для пользователя username1
. Если скрипт не работает должным образом, это может быть причиной отказа доступа.
5. Ошибки и журналы
Для более детального анализа изучите журнал /var/log/auth.log
(или другой, в зависимости от вашей конфигурации системы), чтобы получить больше информации о причине ошибки. Ищите записи, которые непосредственно относятся к вашей попытке входа в систему.
6. Дополнительные проверки
- Убедитесь, что hostname клиентской машины соответствует настройкам DNS
hostnamectl set-hostname
. - Проверьте, что используемые библиотеки PAM и их модули соответствуют версии вашей операционной системы и правильно настроены.
Заключение
Аутентификация через LDAP может быть сложной задачей, особенно с учётом всех факторов. Проанализировав вышеперечисленные аспекты, вы сможете pinpoint (точно определить) причину ошибки доступа и внесёте необходимые изменения в конфигурацию. Если после выполнения всех шагов проблема не решится, возможно, стоит обратиться за помощью к специалистам или в сообщество для более глубокого анализа ситуации.