У меня есть работающее решение LDAP + SSH, но я хотел бы спросить, зачем мне хранить корневой пароль ldap в libnss_ldap.secret и pam_ldap.secret? Кажется, это небезопасно, кто-то может взломать одну клиентскую машину ldap, а пароль ко всему ldap есть?
Как я могу этого избежать, действительно ли необходим пароль администратора ldap для аутентификации пользователей?
Спасибо, Мартин
IIRC, пользователь и пароль, которые должны быть сохранены, - это тот, который может читать все соответствующие атрибуты LDAP. Так уж получилось, что LDAP-root может их все прочитать. Если потребуется время для создания пользователя в структуре LDAP, который имеет возможность читать правильные атрибуты, но не записывать их, это позволит сохранить в этих файлах менее привилегированную учетную запись. В любом случае я считаю, что это лучшая практика.
Как говорит sysadmin1138, вам нужен доступ для чтения к базе данных LDAP. Вы можете добиться этого, добавив специального пользователя ldap с доступом для чтения ко всем атрибутам (кроме userPassword).
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: <some sha1 hash>
А затем в файле управления доступом (при условии, что здесь OpenLDAP):
access to *
by dn.regex="cn=admin,dc=example,dc=com" read
by * read
Вы также можете предоставить доступ на чтение анонимным пользователям (ограничивая только userPassword). Тогда вам понадобится специальный пользователь-администратор, вы можете просто удалить libnss_ldap.secret и pam_ldap.secret. Это работает одинаково хорошо, и поля uid и gecos вашей пользовательской базы данных в любом случае являются секретом. Я обычно так и делаю. Вы можете установить ограничения на размер и ограничить доступ к почтовому атрибуту для аутентифицированных пользователей:
sizelimit 100
timelimit 60
access to attrs=userPassword
by anonymous auth
by * none
access to attrs=mail
by self read
by users read
by * none
access to *
by * read
Надеюсь, это поможет!
Единственный способ избежать этого - использовать kerberos с ldap. Для аутентификации используйте не ldap, а kerberos.
Если у вас Linux на базе Redhat, вы можете попробовать Freeipa. Их версия 2 почти готова, и она многообещающая (я тестировал ее в лаборатории, и ее действительно легко настроить, поддерживать и расширять). Как только версия 2 выйдет в производство, я намерен использовать ее везде, где смогу ;-)
Если вы не используете Linux, основанный на красной шляпе, то вам придется немало боли заставить это работать. Можно, но не для слабонервных. Я обнаружил, что эти инструкции по этому поводу работают довольно хорошо: rj systems howtos, пропустите материалы, не относящиеся к Kerberos / ldap. У Ubuntu есть документ сообщества (эти два слова не внушают мне особого доверия), в котором описываются следующие настройки: ubuntu openldap / керберос.
К счастью, с freeipa, если у вас нет серверов Windows, у нас будет достойный эквивалент AD для linux / unix.