|
www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> LDAP auth
Настройка аутентификации через LDAP.
Автор: fr33man.
Настроив LDAP сервер, я решил хранить всю информацию о пользователях в директориях LDAP. Тут же захотелось, чтобы все было завязано на LDAP и первым
моим шагом была настройка системы таким образом, чтобы она видела не только локальных пользователей, а еще и пользователей, которые
хранятся в LDAP'е. Чем я и занялся.
Установка необходимого софта.
Идем в порты, чтобы посмотреть нужные нам программы, конечно же предворительно обновив дерево портов.
/root/> cd /usr/ports/
/usr/ports/> make search name='nss_ldap'
Port: nss_ldap-1.251
Path: /usr/ports/net/nss_ldap
Info: RFC 2307 NSS module
Maint: kazakov@gmail.com
B-deps: gettext-0.14.5_2 gmake-3.81_1 libiconv-1.9.2_2 openldap-client-2.3.27
R-deps: openldap-client-2.3.27
WWW: http://www.padl.com/OSS/nss_ldap.html
/usr/ports/> make search name='pam_ldap'
Port: pam_ldap-1.8.2
Path: /usr/ports/security/pam_ldap
Info: A pam module for authenticating with LDAP
Maint: marcus@FreeBSD.org
B-deps: gettext-0.14.5_2 gmake-3.81_1 libiconv-1.9.2_2 openldap-client-2.3.27
R-deps: openldap-client-2.3.27
WWW: http://www.padl.com/OSS/pam_ldap.html
/usr/ports/>
| nss_ldap нужен, для того, чтобы система видела пользователей, хранящихся в LDAP, а pam_ldap нужен
непосредственно для аутентификации пользователей.
Ставим...
/usr/ports/> cd /usr/ports/net/nss_ldap
/usr/ports/net/nss_ldap/> make install clean
...
...
/usr/ports/net/nss_ldap/> rehash
/usr/ports/net/nss_ldap/> cd /usr/ports/security/pam_ldap/
/usr/ports/security/pam_ldap/> make install clean
/usr/ports/security/pam_ldap/> rehash
/usr/ports/security/pam_ldap/>
| Все, установилось.
Настройка.
Для начала давайте добавим следующие записи в LDAP:
users.ldif:
dn: ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: users
| fr33man.ldif
dn: cn=fr33man,ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: fr33man
sn: Vasiliy Ozerov
uid: fr33man
userPassword: {SSHA}WBsUosYPMQ1PPaJNp2728NL7P0/EXx5n
uidNumber: 5001
gidNumber: 0
gecos: Vasiliy Ozerov
homeDirectory: /home/fr33man
loginShell: /usr/local/bin/bash
| Добавляем:
/root/> ldapadd -x -D "cn=root,dc=unix" -W \
? -H ldap://192.168.1.250 -f users.ldif
Enter LDAP Password:
adding new entry "ou=users,dc=l1523,dc=ru"
/root/> ldapadd -x -D "cn=root,dc=unix" -W \
? -H ldap://192.168.1.250 -f fr33man.ldif
Enter LDAP Password:
adding new entry "cn=fr33man,ou=users,dc=l1523,dc=ru"
/root/>
| Рихтуем /usr/local/etc/nss_ldap.conf:
# Корневой каталог LDAP сервера
base dc=l1523,dc=ru
# Если не удалось подключиться к LDAP,
# То не пытаться переподключиться
bind_policy soft
# Timeout подключения к LDAP серверу
bind_timelimit 10
# ip-адрес или hostname LDAP сервера
host 192.168.1.250
# nss_ldap закроет подключение, если сервер
# не ответит в указонное в idle_timelimit время
idle_timelimit 3600
# Версия протокола
ldap_version 3
# Описание каталогов, где хранятся группы, пользователи, пароли соответственно
nss_base_group ou=groups,dc=l1523,dc=ru?one
nss_base_passwd ou=users,dc=l1523,dc=ru?one
nss_base_shadow ou=users,dc=l1523,dc=ru?one
# persist -- не отключаться от LDAP сервера
# oneshot -- отключаться после каждого запроса
nss_connect_policy persist
# Использовать страничный вывод
nss_paged_results yes
# Размер страницы
pagesize 1000
# Порт, на котором работает LDAP
port 389
# Область поиска
scope one
# Время ожидпния при поиске
timelimit 30
| Теперь /etc/nsswitch.conf:
# Сначала ищем в файлах, потом в LDAP
group: files ldap
hosts: files dns
networks: files
# Сначала ищем в файлах, потом в LDAP
passwd: files ldap
# Сначала ищем в файлах, потом в LDAP
shadow: files ldap
shells: files
| Проверяем, как все работает:
/usr/local/etc/> id fr33man
uid=5001(fr33man) gid=0(wheel) groups=0(wheel), 5001(People)
/usr/local/etc/> grep fr33man /etc/passwd
/usr/local/etc/>
| Пользователь fr33man есть, но его нет в локальных базах.
Теперь переходим к настройке pam_ldap. Для этого редактируем /usr/local/etc/ldap.conf до такого состояния:
# host, где находится LDAP сервер
host 192.168.1.250
# URL LDAP сервера
uri ldap://192.168.1.250/
# Версия протокола
ldap_version 3
# Порт LDAP сервера
port 389
bind_timelimit 30
bind_policy soft
idle_timelimit 3600
# Фильтр поиска
pam_filter objectclass=posixAccount
# UID пользователя соответствует аттрибуту uid
pam_login_attribute uid
# Минимальный uid
pam_min_uid 1000
# Максимальный uid
pam_max_uid 65530
# Алгоритм хэша паролей
pam_password SSHA
nss_base_passwd ou=users,dc=l1523,dc=ru?one
nss_base_shadow ou=users,dc=l1523,dc=ru?one
nss_base_group ou=groups,dc=l1523,dc=ru?one
| Осталось указать сервисам login, sshd и тд. использовать модуль pam_ldap для аутентификации, для этого редактируем
/etc/pam.d/sshd и /etc/pam.d/ до такого состояния:
/etc/pam.d/sshd:
auth required pam_nologin.so no_warn
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient /usr/local/lib/pam_ldap.so no_warn
auth required pam_unix.so no_warn try_first_pass
account required pam_login_access.so
account sufficient /usr/local/lib/pam_ldap.so
account required pam_unix.so
session required pam_permit.so
password sufficient /usr/local/lib/pam_ldap.so no_warn
password required pam_unix.so no_warn try_first_pass
| /etc/pam.d/system:
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient /usr/local/lib/pam_ldap.so
auth required pam_unix.so no_warn try_first_pass nullok
account required pam_login_access.so
account sufficient /usr/local/lib/pam_ldap.so
account required pam_unix.so
session required pam_lastlog.so no_fail
password sufficient /usr/local/lib/pam_ldap.so
password required pam_unix.so no_warn try_first_pass
| Теперь можно проверять, как это все работает. Попробуем зайти по ssh:
//> ssh localhost -l fr33man
Password:
Last login: Fri Sep 29 06:08:09 2006 from 127.0.0.1
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
[fr33man@backup ~]$ exit
logout
Connection to localhost closed.
//>
| Пользователя fr33man мы не создавали локально, следовательно домашней директории для него нет. Поэтому можете содать домашнюю директорию, а
можете воспользоваться демоном amd(8).
размещено: 2006-11-08,
последнее обновление: 2006-11-08,
автор: fr33man
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
Комментарии пользователей [2 шт.]