Лаборатория Maint, настройке Samba 3 в качестве основного контроллера домена (PDC)
Maint Laboratory

Лаборатория Maint

 
  Главная     Программы     RPM пакеты     Библиотеки     Документация     Заметки     Услуги     Контакты  

 

Настройка samba + ldap в качестве PDC




  Cтатья посвящена настройке Samba 3 в качестве основного контроллера домена (PDC), все записи о пользователях которой хранятся в LDAP-каталоге. Установка производилась на Fedora. Я не указываю, какие пакеты должны быть установлены, полагая, что догадываться о них должен любой администратор, знающий что такое samba и ldap.

1. Часть первая LDAP

  Для начала, заведем администратора LDAP. Не мудрствуя лукаво обзову его ldaproot .   Файл конфигурации ldap.conf. Много думать не потребовалось:
URI ldap://127.0.0.1/
BASE dc=example,dc=ru

  Теперь перейдем к файлу sldap.conf. Я даю только изменения, которые я произвел, на базе стандартного файла конфигурации.

include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/samba.schema

  Далее определяем тип базы данных. Во всех примерах, которые я нашел в googlе, определяется только ldbm. Для Fedora 10 я взял bdb. Работает ;-)

database bdb
suffix "dc=example,dc=ru"
rootdn "cn=ldaproot,dc=example,dc=ru"
password-hash {crypt}

  Указанный в password-hash способ шифрования пароля можно посмотреть в документации к вашей системе.

rootpw {crypt}xxxxxxxxxxxxx

Пароль для администратора ldap. Его можно назначить следующей командой:

slappasswd -h {указать способ шифровки пароля, который вы выбрали в password-hash}.

Параметр loglevel задает уровень отладки. Для начала лучше поставить его максимальный, для вылавливания всяческих багов.

loglevel=255

Добавим индексы, специфические для samba

index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq

Теперь нужно разграничить доступ к информации в базе данных. Указываем, что к атрибуту userPassword себе(под кем Вы находитесь в системе) разрешена запись, анонимам предлагается зарегистрироваться, остальным отказ.

access to attrs=userPassword
  by self write
  by anonymous auth
  by * none

Доступ к остальной информации: себе - писать, анонимам читать, остальным ничего.

access to *   by self write   by anonymous read   by * none

  Можно еще как-то поизгаляться с правами доступа, но для базовой настройки сгодится. Потом на досуге можно придумать что-то этакое. Как фантазия разыграется.
  Запускаем LDAP. В RH - подобных системах это лучше делать из каталога /etc/rc.d/init.d. Собственно команда ldap start. В каталоге (папке, директории) /var/lib/ldap формируется база данных. Пока это только структура, общая схема базы, без конкретного наполнения. Необходимо произвести начальное заполнение базы. Привожу пример файла init.ldif:

dn: dc=example,dc=ru
dc: example
objectClass: dcObject
objectClass: top
objectClass: organization
o: Example OOO
o: example.ru

dn: cn=ldaproot,dc=example,dc=ru
objectClass: top
objectClass: organizationalRole
cn: ldaproot
description: Example LDAP manager

dn: ou=People,dc=example,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: People
description: Stuff area

dn: ou=Computers,dc=maintlab,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: Group
description: Computer list

dn: ou=Users,dc=example,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: Users
description: User list

dn: ou=Group,dc=example,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: Group
description: Groups of users

Занесение данных в базу производится командой:

ldapadd -xWD cn=ldaproot,dc=example,dc=ru -h localhost -f init.ldif

Заводим дополнительную группу в системе computers, в которую будут входить компьютеры находящиеся в нашей сети

groupadd -g 10000 computers

Так же следует завести группы администраторов и пользователей, ну например:

groupadd smbadmin
groupadd smbuser

   Дальнейшее заполнение базы достаточно трудоемкий процесс и довольно нудный, если необходимо занести большое кол-во уже существующих пользователей..Погуглив нашел MigrationTools .Я использовал оттуда 2 перловых скрипта migratre_group.pl и migtare_passwd.pl. Перед использованием следует отредактировать файл migrate_common.ph. Необходимо исправить в 3 местах. $DEFAULT_MAIL_DOMAIN = "example.ru", $DEFAULT_BASE = "dc=example,dc=ru". И заменить в массиве $NAMINGCONTEXT{'passwd'} = "ou=People" на "ou=Users". После этой небольшой рихтовки импортировал имеющиеся группы и пользователей.

migrate_group.pl /etc/group > groups.ldif
migrate_passwd.pl /etc/passwd > users.ldif

ldapadd -xWD cn=ldaproot,dc=example,dc=ru -h localhost -f groups.ldif
ldapadd -xWD cn=ldaproot,dc=example,dc=ru -h localhost -f users.ldif

2. Часть вторая SAMBA

  Я приведу конфигурацию samba.conf без особых пояснений. Все описано в комментариях, да и на просторах инета столько раз встречается, что плакать хочется от изобилия.
[global] workgroup = OFFICE security = user template shell = /sbin/nologin # Работаем только с известными ресурсами локальной сети bind interfaces only = Yes # Обслуживаемые интерфейсы interfaces = lo eth0 192.168.0.0/24. # Хосты, которым разрешено обратиться к серверу hosts allow = 192.168.0. 127.0.0.1 # Имя домена # netbios имя машины netbios name = SMBSERVER # Описание сервера server string = SMBSERVER Example password server = localhost # Администратор самбы admin users = root # Работа с LDAP passdb backend = ldapsam:ldap://localhost # Корень LDAP сервера ldap suffix = dc=example,dc=ru # Контейнер пользователей ldap user suffix = ou=Users # Контейнер групп ldap group suffix = ou=Group # Контейнер компьютеров ldap machine suffix = ou=Computers # Объект администратора самбы в LDAP ldap admin dn = "cn=root,dc=example,dc=ru" # Запрещаю удалять объекты ldap delete dn = no # При смене пользователем пароля SAMBA (по сети или # через smbpasswd автоматически менять пароль LDAP ldap passwd sync = yes # Отключаю поддержку ssl ldap ssl = off logon script = %U.bat # Пустое значение, неперемещаемые профили. Все на локальной машине logon path = # logon script = %U.bat # logon path = \\%L\Profiles\%u logon drive = L: # Описание лог-файлов log file = /var/log/samba/%m.log log level = 1 max log size = 500 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 # Сервер раздает время time server = yes # Описываем самбу как PDC preferred master = yes domain master = yes domain logons = yes local master = yes os level = 254 # Настройка кодировок unix charset = koi8-r dos charset = cp866 display charset = koi8-r # Работа с принтером load printers = no printcap name = cups # Поддержка wins wins support = yes # Используем DNS proxy # dns proxy = yes # encrypt passwords = No guest ok = No guest account = nobody # Для нормальной работе в W2K убираем поддержку nt acl nt acl support = No client plaintext auth = Yes client lanman auth = Yes [profiles] path = /var/lib/samba/profiles browseable = no guest ok = no writeable = yes [netlogon] comment = Network Logon Service path = /var/lib/samba/netlogon browseable = no guest ok = yes writable = no share modes = no [homes] comment = Home Directories browseable = no writeable = yes [tmp] comment = Temporary file space path = /tmp writeable = yes guest ok = yes [printers] comment = All printers path = /var/spool/samba guest ok = yes printable = yes

Хочу обратить внимание на точку в конце IP-адреса "hosts allow = 192.168.0. ". Я долго мучался, почему не происходит подсоединеие, пропустив ее. Если кто мучался с забытой точкой в настройке BIND, поймет.

Укажем самбе пароль от пользователя в ldap(cn=ldaproot,dc=example,dc=ru):

smbpasswd -W

Добавим доменные группы. Подробнее о том, какие значения sid/rid бывают у встроенных учётных записей в домене и каких их формировать можно почитать здесь: http://www.unav.es/cti/ldap-smb/smb-ldap-3-howto.html#Create_builtin

net groupmap add unixgroup=smbadmin rid=512 type=domain
net groupmap add unixgroup=smbuser rid=513 type=domain
net groupmap add unixgroup=nobody rid=514 type=domain
net groupmap add unixgroup=computers rid=515 type=domain

Посмотреть список групп можно командой:

net groupmap list

Вышли на финишную прямую, можно заводить пользователей и подключать их к домену. При включении win2k/NT/XP в домен необходимо также создавать аккаунт компьютера.

useradd -g machines -d /dev/null -c "описание компьютера" -s /bin/false имя_компьютера$
passwd -l имя_компьютера$
smbpasswd -a -m имя_компьютера

имя_компьютера - это NetBIOS имя компьютера (обратите внимание на значок `$` при добавлении системного пользователя и его отсутствие при добавлении в SAMBA). При включении машин с win2k/NT/XP в домен, MS Windows попросит ввести логин и пароль аккаунта имеющего права на подключение к домену. Это должен быть аккаунт администратора домена .

Добавление обычных пользователей происходит так же как обычно:

useradd -g smbuser -d /home/user -c "описание пользователя" -s /bin/false имя_пользователя
passwd -l имя_пользователя
smbpasswd -a имя_пользователя

Можно начинать работать.

© Елохин И.Ю. (Лаборатория Maint)