Настройка Samba для хранения информации в LDAP [2008]
Эта статья даже не обновление предыдущей статьи, а совершенно новая статья, написанная в процессе настройке самбы в качестве PDC.
Итак, приступим к настройке. Для начала обновляем порты:
laptop# portsnap fetch update
Looking up portsnap.FreeBSD.org mirrors... 2 mirrors found.
Fetching snapshot tag from portsnap2.FreeBSD.org... done.
Fetching snapshot metadata... done.
Updating from Thu Mar 1522:26:19 MSK 2007 to Fri Mar 1618:40:05 MSK 2007.
Fetching 3 metadata patches.. done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 76 patches.....10....20....30....40....50....60....70... done.
Applying patches... done.
Fetching 4 new ports or files... done.
Removing old files and directories... done.
Extracting new files:
/usr/ports/archivers/pbzip2/
/usr/ports/astro/starplot/
/usr/ports/audio/abcmidi/
... skipped ...
Building new INDEX files... done.
laptop#
1. Установка и настройка openldap.
Ставим openldap-server:
laptop# cd /usr/ports/net/openldap23-server/
laptop# make config
---------------------------------------------------------------------¬
¦ Options for openldap-server 2.3.25 ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦ [ ] SASL With (Cyrus) SASL2 support ¦ ¦
¦ ¦ [ ] PERL With Perl backend ¦ ¦
¦ ¦ [ ] SHELL With Shell backend (disables threading) ¦ ¦
¦ ¦ [ ] ODBC With SQL backend ¦ ¦
¦ ¦ [ ] SLP With SLPv2 (RFC 2608) support ¦ ¦
¦ ¦ [ ] SLAPI With Netscape SLAPI plugin API ¦ ¦
¦ ¦ [X] TCP_WRAPPERS With tcp wrapper support ¦ ¦
¦ ¦ [X] BDB With BerkeleyDB support ¦ ¦
¦ ¦ [ ] ACCESSLOG With In-Directory Access Logging overlay ¦ ¦
¦ ¦ [ ] AUDITLOG With Audit Logging overlay ¦ ¦
¦ ¦ [ ] DENYOP With Deny Operation overlay ¦ ¦
¦ ¦ [ ] DYNGROUP With Dynamic Group overlay ¦ ¦
¦ ¦ [ ] DYNLIST With Dynamic List overlay ¦ ¦
¦ ¦ [ ] LASTMOD With Last Modification overlay ¦ ¦
¦ ¦ [ ] PPOLICY With Password Policy overlay ¦ ¦
¦ ¦ [ ] PROXYCACHE With Proxy Cache overlay ¦ ¦
¦ ¦ [ ] REFINT With Referential Integrity overlay ¦ ¦
¦ ¦ [ ] RETCODE With Return Code testing overlay ¦ ¦
¦ ¦ [ ] RWM With Rewrite/Remap overlay ¦ ¦
¦ ¦ [ ] SYNCPROV With Syncrepl Provider overlay ¦ ¦
¦ ¦ [ ] TRANSLUCENT With Translucent Proxy overlay ¦ ¦
¦ ¦ [ ] UNIQUE With attribute Uniqueness overlay ¦ ¦
¦ ¦ [ ] VALSORT With Value Sorting overlay ¦ ¦
¦ ¦ [ ] ACI With per-object ACIs (experimental) ¦ ¦
¦ ¦ [X] DYNAMIC_BACKENDS Build dynamic backends ¦ ¦
¦ ¦ [X] SLURPD Build slurpd replication daemon ¦ ¦
+-L-----v(+)---------------------------------------------------------+
¦ [ OK ] Cancel ¦
L---------------------------------------------------------------------
laptop# make install clean
... skipped ...
laptop# rehash
laptop#
Теперь необходимо составить конфигурационный файл ldap сервера
/usr/local/etc/openldap/slapd.conf:
# Подключаем схемы, основная схема -- core.schema, она обязательна!!
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
# Pid-файл
pidfile /var/run/openldap/slapd.pid
# Файл с аргумнтами, которые были переданы slapd
argsfile /var/run/openldap/slapd.args
# Путь к модулям
modulepath /usr/local/libexec/openldap
# подгружаем модуль ldbm
moduleload back_ldbm
# описываем доступ к информации
# указываем, что к аттрибуту userPassword
# себе(под кем Вы находитесь в системе)
# разрешена запись, анонимам предлагается
# зарегистрироваться, остальным пройти идти лесом. ))
access to attrs=userPassword
by self write
by anonymous auth
by * none
# Доступ к остальной информации: себе -- писать, анонимам читать, остальным ничего.
access to *
by self write
by anonymous read
by * none
# Примечание: пользователю cn=root,dc=l1523,dc=ru разрешена запись и чтение всего!
# Тип базы
database ldbm
# Корень базы
suffix "dc=l1523,dc=ru"
# dn администратора ldap
rootdn "cn=root,dc=l1523,dc=ru"
# пароль администратора
# генерируется командой slappasswd
# Я сгенерировал так:
# laptop# slappasswd
# New password:
# Re-enter new password:
# {SSHA}KjFZSWPFXXrL4pLyQRsUleVA1J75WESF
# laptop#
# Пароль рута: password
rootpw {SSHA}KjFZSWPFXXrL4pLyQRsUleVA1J75WESF
# директория, где будут храниться базы
directory /var/db/openldap-data
# уровень отладки
loglevel 256
# Индексы, для ускорения поиска по базе
index objectClass eq
index cn eq
Теперь настраиваем запуск slapd и запускаем:
По просьбам трудящихся: восклицательный знак означает, что строка перенесена. Его не нужно копировать в rc.conf. ))
Первым делом необходимо добавить корневой объект: dn: dc=l1523,dc=ru. И несколько контейнеров для хранение пользователей(ou=users), компьютеров(ou=computers) и групп(ou=groups). Вот такой ldif файл необходимо добавить в ldap:
base.ldif:
dn: dc=l1523,dc=ru
objectClass: dcObject
objectClass: organization
objectClass: top
dc: l1523
o: l1523
dn: ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: users
dn: ou=groups,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: groups
dn: ou=computers,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: computers
Теперь добавляем:
laptop# ldapadd -x -D "cn=root,dc=l1523,dc=ru" -w password -f base.ldif
adding new entry "dc=l1523,dc=ru"
adding new entry "ou=users,dc=l1523,dc=ru"
adding new entry "ou=groups,dc=l1523,dc=ru"
adding new entry "ou=computers,dc=l1523,dc=ru"
laptop#
Записи вроде добавились. Давайте попробуем поискать:
laptop# ldapsearch -LLL -x -b 'dc=l1523,dc=ru' '*'
dn: dc=l1523,dc=ru
objectClass: dcObject
objectClass: organization
objectClass: top
dc: l1523
o: l1523
dn: ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: users
dn: ou=groups,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: groups
dn: ou=computers,dc=l1523,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: computers
laptop#
Да, все хорошо.
3. Добавление пользователей в ldap.
После этого устанавливаем nss_ldap, для того, чтобы система могла искать пользователей в ldap:
laptop# cd /usr/ports/net/nss_ldap/
laptop# make install clean
... skipped ...
laptop# rehash
laptop#
Составим конфиг для nss_ldap
/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 localhost
# 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
# Следущая строку нужна для samb'ы, так как аккаунты
# компьютеров должны быть видны системе
nss_base_passwd ou=computers,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
Теперь, для своего удобства установим набор скриптов, которые будут работать с пользователями, которые храняться в ldap:
laptop# cd /usr/ports/net/ldapscripts/
laptop# make install clean
... skipped ...
laptop# rehash
laptop#
Составляем конфигурационный файл для скриптов:
/usr/local/etc/ldapscripts/ldapscripts.conf:
## Мой конфиг для скриптов.
# Конфигурация соединения с ldap сервером.
SERVER="localhost"
BINDDN="cn=root,dc=l1523,dc=ru"
BINDPWD="password"
SUFFIX="dc=l1523,dc=ru" # корень базы
GSUFFIX="ou=groups" # контейнер, где храняться группы(относительно корня)
USUFFIX="ou=users" # то же, но для юзеров
MSUFFIX="ou=computers" # и для компов
# начальные значения gid, ud.
GIDSTART="10000" # Group ID
UIDSTART="10000" # User ID
MIDSTART="20000" # Machine ID
# настройки для пользователей
USHELL="/usr/sbin/nologin"
UHOMES="/home/%u" # хомяк пользователя. вместо %u будет подставлено имя пользователя
ASKGECOS="no" # Спрашивать пользователя полное имя или нет.
CREATEHOMES="yes" # создаем хомяки пользователей
HOMESKEL="/etc/skel" # где брать начальные настройки пользователей
# Генерируем пароль пользователю.
# На самом деле это одна строка, просто не умещается...
PASSWORDGEN="head -c8 /dev/random | uuencode -m - | sed -n -e
'2s|=*$||;2p' | sed -e 's|+||g' -e 's|/||g'"
# Записываем сгенерированный пароль в файл.
RECORDPASSWORDS="yes"
PASSWORDFILE="/var/log/ldapscripts_passwd.log"
# лог файл
LOGFILE="/var/log/ldapscripts.log"
# Где находятся утилиты управления ldap сервером
LDAPSEARCHBIN="/usr/local/bin/ldapsearch"
LDAPADDBIN="/usr/local/bin/ldapadd"
LDAPDELETEBIN="/usr/local/bin/ldapdelete"
LDAPMODIFYBIN="/usr/local/bin/ldapmodify"
LDAPMODRDNBIN="/usr/local/bin/ldapmodrdn"
LDAPPASSWDBIN="/usr/local/bin/ldappasswd"
# Заставляем скрипты самим определять команду
# для просмотра информации о пользователях
GETENTPWCMD=""
GETENTGRCMD=""
Теперь попробуем добавить группы(для админов, для пользователей и компьютеров) и пользователей(админа и тестового пользователя):
laptop# ldapaddgroup admins
Successfully added group admins to LDAP
laptop# ldapaddgroup people
Successfully added group people to LDAP
laptop# ldapaddgroup computers
Successfully added group computers to LDAP
laptop# ldapadduser testuser people
Successfully added user testuser to LDAP
Successfully set password for user testuser
Successfully created home directory for user testuser
laptop# ldapadduser admin admins
Successfully added user admin to LDAP
Successfully set password for user admin
Successfully created home directory for user admin
laptop# ls -lad /home/admin/
drwx------ 2 admin admins 51216 мар 20:16 /home/admin/
laptop# id admin
uid=10001(admin) gid=10001(admins) groups=10001(admins)
laptop# id testuser
uid=10002(testuser) gid=10002(people) groups=10002(people)
laptop#
Как видите, пользователей которых мы добавили в Ldap прекрасно видны системе. Давайте посмотрим их пароли:
Вот и пароли наших пользователей. На этой счастливой ноте заканчиваем с настройкой ldap и переходим к настройке самбы.
4. Установка и настройка самбы.
Сразу скажу, что ставить нужно версию не ниже 3.0.23d. Ставить можно версию и ниже, но схему для ldap(samba.schema) необходимо брать от последней версии, так как старые версии схемы не позволяли самбе увидеть группы. Итак, ставим:
laptop# cd /usr/ports/net/samba3/
laptop# make config
---------------------------------------------------------------------¬
¦ Options for samba 3.0.22,1 ¦
¦ -----------------------------------------------------------------¬ ¦
¦ ¦ [X] LDAP With LDAP support ¦ ¦
¦ ¦ [ ] ADS With Active Directory support ¦ ¦
¦ ¦ [X] CUPS With CUPS printing support ¦ ¦
¦ ¦ [X] WINBIND With WinBIND support ¦ ¦
¦ ¦ [ ] ACL_SUPPORT With ACL support ¦ ¦
¦ ¦ [ ] AIO_SUPPORT With experimental AIO support ¦ ¦
¦ ¦ [ ] SYSLOG With Syslog support ¦ ¦
¦ ¦ [X] QUOTAS With Quota support ¦ ¦
¦ ¦ [X] UTMP With UTMP support ¦ ¦
¦ ¦ [ ] MSDFS With MSDFS support ¦ ¦
¦ ¦ [ ] SAM_XML With XML smbpasswd backend ¦ ¦
¦ ¦ [ ] SAM_MYSQL With MYSQL smbpasswd backend ¦ ¦
¦ ¦ [ ] SAM_PGSQL With PostgreSQL smbpasswd backend ¦ ¦
¦ ¦ [ ] SAM_OLD_LDAP With Samba2.x LDAP legacy smbpasswd backend ¦ ¦
¦ ¦ [ ] SMBSH With SMBSH wrapper for UNIX commands ¦ ¦
¦ ¦ [ ] PAM_SMBPASS With SMB PAM module ¦ ¦
¦ ¦ [ ] EXP_MODULES With experimental module(s) ¦ ¦
¦ ¦ [X] POPT With system-wide POPT library ¦ ¦
+-L-----v(+)---------------------------------------------------------+
¦ [ OK ] Cancel ¦
L---------------------------------------------------------------------
laptop# make install clean
... skipped ...
laptop# rehash
laptop#
Скопируем схему samba.schema в /usr/local/etc/openldap/schema/:
[global]
# Имя домена
workgroup = teachers
# nebios имя машины
netbios name = spider
# Описание сервера
server string = Documents
# Тип безопасности user(необходимо для PDC)
security = user
# Хосты, которым разрешено обращаться к нашему серверу
hosts allow = 192.168.1. 127.
# Не использовать принтеры
load printers = no
# Лог файл самбы
log file = /var/log/samba/log.%m
# Максимальный размер лога
max log size = 500
# Использовать зашированные пароли
encrypt passwords = yes
# Администратор домена
admin users = admin
# Пароли храним в LDAP
passdb backend = ldapsam:ldap://localhost/
# Корень LDAP сервера
ldap suffix = dc=l1523,dc=ru
# Пользователи храняться в контейнере ou=users
ldap user suffix = ou=users
# Группы в контейнере ou=groups
ldap group suffix = ou=groups
# Контейнер для машин пользователей
ldap machine suffix = ou=computers
# Объект администратора samb'ы в LDAP
ldap admin dn = "cn=root,dc=l1523,dc=ru"
# Запрещаем удалять объекты
ldap delete dn = no
# Отключаем поддержку SSL
ldap ssl = off
# Сетевые параметры
socket options = TCP_NODELAY
# Делаем из samb'ы PDC
local master = yes
os level = 64
domain master = yes
preferred master = yes
domain logons = yes
# Скрипт, который запустится при входе пользователя
logon script = proxy.vbs
# Сетевой путь, который необходимо подключить
logon path = \\%L\Profiles\%U\%m\
logon home = \\%L\Profiles\%U\%m\
# Имя диска, на который подключать
logon drive = Z:
# Поддержка wins
wins support = yes
# Не используем dns proxy
dns proxy = no
# Настройка кодировки
display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
# Пусть samb'а еще и время отдает
time server = yes
# Скрипт, для добавления машин
add machine script = /usr/local/bin/ldapaddmachine '%u' computers
add user script = /usr/local/bin/ldapadduser '%u' people
add group script = /usr/local/bin/ldapaddgroup '%g'
add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g'
delete user script = /usr/local/bin/ldapdeleteuser '%u'
delete group script = /usr/local/bin/ldapdeletegroup '%g'
delete user from group script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g'
set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g'
rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew'
# Описание расшаренных директорий
[homes]
comment = Home Directories
browseable = no
writable = yes
[netlogon]
comment = Network Logon Service
path = /usr/local/etc/samba/netlogon/
guest ok = yes
writable = no
share modes = no
browseable = no
[Profiles]
create mode = 600
directory mode = 700
path = /home
browseable = no
guest ok = yes
[data]
comment = Dump of files
path = /data
create mode = 660
directory mode = 770
public = yes
writeable = yes
write list = @people
read list = @people
Все, с конфигом разобрались.
Укажем самбе пароль от пользователя в ldap(cn=root,dc=l1523,dc=ru):
laptop# smbpasswd -w password
Setting stored password for "cn=root,dc=l1523,dc=ru" in secrets.tdb
laptop#
И добавляем наших пользователей в ldap:
laptop# smbpasswd -a admin
New SMB password:
Retype new SMB password:
Added user admin.
laptop# smbpasswd -a testuser
New SMB password:
Retype new SMB password:
Added user testuser.
laptop#
Давайте посмотрим что там smbpasswd в ldap добавила:
laptop# net groupmap add unixgroup=admins rid=512 type=domain
Successfully added group admins to the mapping db as a domain group
laptop# net groupmap add unixgroup=people rid=513 type=domain
Successfully added group people to the mapping db as a domain group
laptop# net groupmap add unixgroup=computers rid=515 type=domain
Successfully added group computers to the mapping db as a domain group
laptop# net groupmap list
admins (S-1-5-21-1909399157-655202441-2345705920-512) -> admins
people (S-1-5-21-1909399157-655202441-2345705920-513) -> people
computers (S-1-5-21-1909399157-655202441-2345705920-515) -> computers
laptop# ldapsearch -LLL -x -b 'dc=l1523,dc=ru' 'cn=admins'
dn: cn=admins,ou=groups,dc=l1523,dc=ru
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: admins
gidNumber: 10001
sambaSID: S-1-5-21-1909399157-655202441-2345705920-512
sambaGroupType: 2
displayName: admins
description: Domain Unix group
laptop#
Как видите, самба добавила свои аттрибуты к группам.
Создаем каталог, где будут лежать стартовые скрипты:
laptop# mkdir /usr/local/etc/samba/netlogon
laptop# cd /usr/local/etc/samba/netlogon
laptop#
И создаем скрипт, который будет прописывать пользователям прокси сервер при входе в домен:
Усе, теперь попробуем добавить windows машину в домен.
5. Добавление машины в домен.
На виндовой машине кликаем правой кнопкой мыши на "Мой компьютер", потом идем во вкладку "Имя компьютера", потом кликаем на кнопке изменить и выбирем ввести в домен и вводим имя домена. Кликаем ок и... "Добро пожаловать в домен teachers" ;). Давайте посмотрим добавилась ли учетная запись компьютера:
laptop# net rpc info -U admin
Password:
Domain Name: TEACHERS
Domain SID: S-1-5-21-1909399157-655202441-2345705920
Sequence number: 1174070406
Num users: 2
Num domain groups: 3
Num local groups: 0
laptop#
Ну вот, самба все и всех видит и нормально работает. На этом я пожалуй закончу... А то время позднее. ))
P.S. Если найдете баги — пишите. С радостью подправлю свою статью. P.S.2 Здесь можно найти архивчик со всеми конфигами, которые я затронул в данной статье.