Назад | Перейти на главную страницу

Почему все пользователи LDAP отображаются с getent passwd?

Мы используем сервер LDAP как с серверами Solaris, так и с серверами RHEL и планируем перенести больше серверов на RHEL. Однако у нас есть проблема с LDAP на всех серверах Red Hat.

Когда я набираю "getent passwd", отображаются все пользователи на всем сервере LDAP, а не только пользователи, имеющие доступ к этому серверу. Обычно доступ к серверу имеют от 10 до 50 человек, поэтому Solaris распечатывает этот список пользователей, а Red Hat распечатывает список всех пользователей, которые существуют в LDAP (около 650).

Я предпочитаю поведение, как в Solaris, где только пользователи, имеющие разрешение на доступ к серверу, перечислены с "getent passwd".

Как я могу настроить RHEL для отображения только тех пользователей, которые имеют доступ к серверу?

Вы ограничиваете доступ в /etc/security/access.conf, который, хотя и контролирует, кто может получить доступ к серверу, не влияет на то, какие пользователи видимый к серверу. Обычно это то, что вам нужно: даже если пользователь alice не может войти на сервер, если она владеет файлами в общей файловой системе, я хочу видеть:

$ ls -l ~alice
-rw-rw-r--. 1 alice alice 0 Aug  1 09:09 afile

Вместо того:

$ ls -l ~alice
-rw-rw-r--. 1 5234 5234 0 Aug  1 09:09 afile

То есть я хочу, чтобы система знала о пользователях, даже если они не могут войти в систему.

Если вы хотите ограничить набор пользователей, видимых системе, вам необходимо настроить подсистему NSS для реализации какого-либо фильтра LDAP. Как вы это делаете, зависит от того, какие инструменты вы используете:

  • user993553 упоминает nss_ldap, который является устаревшим инструментом для интеграции с LDAP.

  • Некоторые новые дистрибутивы используют SSSD, который включает ldap_service_search_base параметр в LDAP модуль

  • В nslcd программа имеет filter опция, которая может быть применена к каждой карте

Какой механизм вы используете, зависит от того, какую версию RHEL вы используете: в RHEL 6 есть и то, и другое. nslcd и sssd (Я использую nslcd), в то время как более ранние версии, я думаю, ограничены nss_ldap.

Это поведение по умолчанию, RHEL ограничивает пользователей, использующих PAM, nss пытается разрешить все доступные записи пользователей / групп в данной базе поиска ldap.

Могут быть ситуации, когда в системе есть монтирование nfs, которое включает файлы, принадлежащие пользователям, у которых нет доступа к машине, вы все равно можете разрешить пользователей, если все они видны ОС (доступ ограничен PAM, поэтому они не будут иметь возможность авторизоваться).

Вы можете использовать один из следующих вариантов, чтобы изменить поведение.

  1. Используйте SSSD, по умолчанию он не будет перечислять пользователей / группы. (т.е. getent passwd будет перечислять только локальных пользователей).

  2. Используйте фильтр ldap, чтобы машине были видны только необходимые пользователи. Это возможно только при наличии определенного фильтра, который можно использовать для фильтрации пользователя (например, с использованием атрибута memberof в группе).

  3. Используйте режим совместимости для фильтрации пользователей.

например:

nsswitch.conf 
passwd: files compat
passwd_compat: ldap

in passwd file, add +@netgroup.

Если это вариант, вы можете расширить свою схему ldap в соответствии со следующим

из http://www.secure-computing.net/wiki/index.php/OpenLDAP/Authentication

Чтобы получить эту проверку хоста, мы собираемся добавить настраиваемую схему, чтобы разрешить атрибут хоста в объектном классе posixAccount. Вы можете скачать новую схему здесь. Чтобы использовать эту новую схему, распакуйте и сохраните файл scn.schema в / usr / local / etc / openldap / schema и добавьте следующую строку в свой файл slapd.conf:

...

Затем добавьте nss_ldap.conf nss_base_passwd dc=base,dc=local?one?host=thismachinehost

синтаксис - это базовый фильтр «область действия»

Это проверено на freebsd, где getent passwd затем перечисляет только пользователей, соответствующих фильтру.