Необходимые
условия
- Установленный дистрибутив
Fedora Core 1
- Установленный пакет samba-3.0.X
- Установленный пакет openldap-servers
- Прямые руки :-)
Настройка сервера LDAP
Прежде всего, настрои сервер OpenLDAP - без
этого наша затея теряет смысл. Процедура
настройки сервера с точностью до одной строки
повторяет настройку, которые я приводил в
предыдущей своей "непутевой заметке" о PAM_LDAP.
Если быть точным, то нам потребуется проделать
все, что необходимо было сделать в указанной
заметке, т.е. получить работающий сервер c
PAM_LDAP. Если же вам нужен просто файл-сервер,
на который у пользователей нет доступа по
SSH/Telnet/IMAP и т.д., вы можете не изменять
/etc/pam.d/system-auth. А файлы
/etc/nsswitch.conf и /etc/ldap.conf все-таки
лучше подправить, дабы они выглядели как я уже
писал ранее.
По завершении настройки сервера и проверки
его работоспособности с помощью ldapsearch,
приступим к следующему этапу: добавим в
конфигурационный файл сервера LDAP еще одну
строку include так, чтобы список всех
include в начале файла
/etc/openldap/slapd.conf выглядел
следующим образом:
include
/etc/openldap/schema/core.schema include
/etc/openldap/schema/cosine.schema include
/etc/openldap/schema/inetorgperson.schema include
/etc/openldap/schema/nis.schema include
/etc/openldap/schema/openldap.schema include
/etc/openldap/schema/misc.schema include
/etc/openldap/schema/samba.schema
Файл samba.schema лежит в документации к
серверу SAMBA в каталоге
/usr/share/doc/samba-3.0.0/LDAP, я рекомендую
скопировать его в /etc/openldap/schema
# cp
/usr/share/doc/samba-3.0.0/LDAP/samba.schema
/etc/openldap/schema
Проведем также дополнительные настройки,
которые поспособствуют повышению безопасности,
для чего добавим следующие директивы access
ПЕРЕД уже существующими в
/etc/opeldap/slapd.conf
access to attrs=sambaNTPassword to
self write to * none access to
attrs=sambaLMPassword to self write to *
none
Файл скопирован, конфигурация изменена.
Перезапускаем OpenLDAP:
# /etc/init.d/ldap
restart
Настройка сервера SAMBA
прежде всего, исправляем конфигурационный
файл сервера SAMBA. Файл этот зовется
/etc/samba/smb.conf . Поскольку та версия,
которая поставляется в дистрибутиве, ну ОЧЕНЬ
длинная и с подробными комментариями,
останавливаться на ней я не буду, а приведу
пример упрощенного файла:
[global] netbios name =
LOCALHOST workgroup =
WORKGROUP server string =
No-Dashis' server printcap
name = /etc/printcap load
printers = no printing =
bsd
log file =
/var/log/samba/%m.log max
log size = 50 security =
user
encrypt passwords
= yes unix password sync =
no
socket options =
TCP_NODELAY SO_RCVBUF=8192
SO_SNDBUF=8192 dns proxy =
no case sensitive =
no
# # Пошли настройки
LDAP # ldap admin dn =
"cn=root,dc=pupkin,dc=com,dc=ru"
ldap ssl = off passdb
backend =
ldapsam:ldap://localhost
ldap delete dn = no ldap
suffix =
dc=pupkin,dc=com,dc=ru
ldap filter =
(&(uid=%u)(objectClass=sambaSamAccount)) # #
При смене пользователем пароля SAMBA (по сети
или # через smbpasswd автоматически менять
пароль LDAP # ldap
passwd sync =
yes
[Home] comment
= Home Directory
browseable = yes writable
= yes path =
/home/%u
Запускаем SAMBA:
# /etc/init.d/smb start
Чтобы SAMBA могла "ходить" на сервер LDAP за
информацией о паролях пользователей, необходимо
сохранить пароль администратора сервера LDAP
(или другого пользователя с достаточными
правами) в файле secret.tdb . Сделать это
можно примерно так:
#
smbpasswd -w zarazamelkaya
Кроме того, нужно создать еще один объект в
каталоге, отвечающий за представление сервера (в
принципе, этого можно и не делать, тогда SAMBA
сама создаст его аккурат в той ветви, которая
обозначена как suffix в smb.conf). Я предпочитаю
добавлять эту запись самостоятельно, чтобы она
создалась в нужной мне ветвеи каталога. Добавить
эту служебную запись можно воспользовавшись,
например, командой ldapadd:
# echo "dn:
sambaDomainName=MYSERVERNAME,dc=pupkin,dc=com,dc=ru objectClass:
sambaDomain sambaDomainName:
MYSERVERNAME sambaSID:
S-1-5-21-3905436772-1214432718-1934470886 sambaAlgorithmicRidBase:
1000" | ldapadd -x -w zarazamelkaya
-D
"cn=root,dc=pupkin,dc=com,dc=ru"
Финальная проверка
Ну вот, пришло время финального теста -
заводим пользователя, меняем ему пароль
используя smbpasswd и проверяем
работоспособность. Пользовательский эккаунт
будет образован сочетанием трех классов:
AUXILIARY-классов sambaSamAccount (необходимые
поля для Windows :-)) и posixAccount - атрибуты,
необходимые для сопоставления учетной записи
идентификаторов пользователя и группы (uid и
gid), а также STRUCTURAL-класса
sambaSidEntry
# echo "dn:
cn=serega,dc=pupkin,dc=com,dc=ru objectClass:
sambaSamAccount objectClass:
sambaSidEntry objectClass:
posixAccount cn: serega uid:
serega uidNumber: 1000 gidNumber:
1001 homeDirectory: /home/serega sambaSID:
S-1-5-21-3905436772-1214432718-19344733 " |
ldapadd -x -w zarazamelkaya
-D
"cn=root,dc=pupkin,dc=com,dc=ru"
#
smbpasswd serega SeryoginMegaParol #
smbclient -L MYSERVERNAME -U serega
Когда smbclient спросит у вас пароль
пользователя serega, надо вспомнить, что мы его
установили на предыдущем шаге в команде
smbpasswd. С тем же паролем пользователь
serega сможет зайти в систему, например, по SSH
- если установить его учетной записи в LDAP
атрибут loginShell. Если же вы хотите, чтобы
пользователи не могли заходить на сервер, а
использовали только ресурсы SAMBA - просто
отключите PAM_LDAP в /etc/pam.d/system-auth, а
также уберите слово ldap из всех строк в
/etc/nsswitch.conf
Но главное, что надо помнить - ответ на ваши
вопросы всегда есть в документации.
Приложение 1. Работающий
/etc/openldap/slapd.conf
include
/etc/openldap/schema/core.schema include
/etc/openldap/schema/cosine.schema include
/etc/openldap/schema/inetorgperson.schema include
/etc/openldap/schema/nis.schema include
/etc/openldap/schema/openldap.schema include
/etc/openldap/schema/misc.schema include
/etc/openldap/schema/samba.schema
pidfile
/var/run/slapd.pid
access to
attrs=sambaNTPassword by self write by *
none access to attrs=sambaLMPassword by self
write by * none access to attrs=userPassword
by self write by * auth access to * by
peername=127.0.0.1 read by users read by
anonymous auth
database
ldbm suffix
"dc=pupkin,dc=com,dc=ru" rootdn "cn=root,dc=pupkin,dc=com,dc=ru" rootpw {crypt}<свой_хэш_не_скажу>
directory /var/lib/ldap
index
objectClass
eq,pres index
ou,cn,mail,surname,givenname
eq,pres,sub index
uidNumber,gidNumber,loginShell
eq,pres index
uid,memberUid eq,pres,sub index
nisMapName,nisMapEntry
eq,pres,sub
Приложение 2. Работающий
/etc/nsswitch.conf
passwd: files
ldap shadow: files
ldap group:
files
ldap hosts:
files dns bootparams: nisplus
[NOTFOUND=return]
files ethers:
files netmasks:
files networks:
files protocols:
files rpc:
files services:
files netgroup:
files publickey:
nisplus automount:
files aliases:
files
Приложение 3. Работающий /etc/ldap.conf
host 127.0.0.1 base
dc=pupkin,dc=com,dc=ru rootbinddn
cn=root,dc=pupkin,dc=com,dc=ru port
389 scope sub pam_filter
objectclass=posixAccount pam_login_attribute
uid nss_base_passwd
dc=pupkin,dc=com,dc=ru?sub?objectClass=posixAccount nss_base_group
dc=pupkin,dc=com,dc=ru?sub?objectClass=posixGroup nss_base_shadow
dc=pupkin,dc=com,dc=ru?sub?objectClass=posixAccount ssl
no pam_password md5
Приложение 4. Работающий
/etc/pam.d/system-auth
auth
required
/lib/security/$ISA/pam_env.so auth
sufficient
/lib/security/$ISA/pam_unix.so likeauth
nullok auth
sufficient
/lib/security/$ISA/pam_ldap.so
use_first_pass auth
required
/lib/security/$ISA/pam_deny.so
account
sufficient
/lib/security/$ISA/pam_unix.so account
sufficient
/lib/security/$ISA/pam_ldap.so
password
required
/lib/security/$ISA/pam_cracklib.so retry=3
type= password
sufficient
/lib/security/$ISA/pam_unix.so nullok
use_authtok password
sufficient
/lib/security/$ISA/pam_ldap.so
use_authtok password
required
/lib/security/$ISA/pam_deny.so
session
required
/lib/security/$ISA/pam_limits.so session
required
/lib/security/$ISA/pam_unix.so session
optional
/lib/security/$ISA/pam_ldap.so
Строки, содержащие вызовы pam_ldap.so, могут
быть закомментированы для отключения
авторизации в LDAP. |