Сервер Ubuntu 18.04.3, slapd
работает, аутентификация LDAP настроена с libnss-ldapd
и libpam-ldapd
пакеты (все на одной машине). Создал локального пользователя с useradd
и пользователь в базе данных LDAP с тем же именем пользователя, разными числовыми UID, разными паролями. Вход с этим именем пользователя по SSH работает с каждый из двух паролей, и в каждом случае локальный пользователь войдет в систему. Последнего и следовало ожидать, так как использование порядка files ldap
в nsswitch.conf
. Однако меня беспокоит, что пароль, хранящийся в LDAP, предоставляет доступ локальному пользователю. Это работает даже тогда, когда я блокирую локального пользователя с помощью passwd --lock
.
Ожидается ли описанное поведение или я что-то неправильно настроил?
В качестве возможного решения я изменил порядок в passwd
и group
в nsswitch.conf
к ldap files
. Теперь работает только пароль LDAP, и я буду входить в систему под UID, хранящимся в LDAP. Это хорошая идея использовать этот заказ для passwd
и group
?
Дополнение: Вот еще одна идея, используя порядок files ldap
. В конечном итоге я хочу запретить вход в систему через SSH в качестве локальных пользователей, использующих учетные данные LDAP. Проще всего убедиться, что нет конфликтов имен пользователей. Для практических целей это можно сделать, поставив перед именами пользователей LDAP некоторую строку, которая делает маловероятным появление такого имени пользователя как локального пользователя (мои локальные пользователи в основном являются пользователями системы). Однако мои пользователи (люди) предпочитают имена пользователей без такого префикса. Но их не волнуют названия их групп. Поэтому я создаю группы с именами, которые вряд ли будут конфликтовать с местной группой. Затем я помещаю всех пользователей LDAP в одну из этих групп. Наконец, я использую MatchGroup
в sshd_config
чтобы разрешить SSH-доступ к машине только этим группам (помимо root и некоторых других, где я явно гарантирую, что они не используются как имена пользователей в LDAP).
Следует отметить, что мой набор локальных пользователей невелик и в основном постоянен; но со временем могут происходить небольшие изменения, например, при обновлении пакета или установке нового пакета. Следовательно, невозможно просто предоставить список имен пользователей, которые запрещены в LDAP, и не принимать дальнейшие меры.
Приложение 2: Та же проблема на клиентах (работающих под управлением Debian), которые используют сервер LDAP для аутентификации пользователей. Если есть локальный пользователь (на клиенте) и пользователь в LDAP с тем же именем, мы можем войти в клиент как местный пользователь, использующий учетные данные, хранящиеся в LDAP! О, Боже. К счастью, здесь можно использовать прием, описанный в предыдущем дополнении. Средствами для реализации этого здесь были бы pam_listfile
.
Приложение 3: Будьте особенно осторожны с дополнительными группами в LDAP. Может возникнуть ситуация, когда пользователь входит в систему с UID и GID, как хранятся в passwd
на клиенте, но с дополнительными группами, как указано в LDAP. Да, это становится все более безумным. Так что pam_listfile
Упомянутый выше обходной путь всегда должен учитывать основную группу.
В заключение считаю, что это ошибка.