Домен на Samba и OpenLDAP в Ubuntu 12.04

Рейтинг:   / 1
ПлохоОтлично 

В последнее время во время общения с клиентами по работе начал замечать активный рост популярности свободного ПО. Естественно и домен многие начали поднимать на Samba.

В связи с этим решил дать пошаговую инструкцию по настройке домена на основе Samba и OpenLDAP. В качестве серверной платформы используется Ubuntu 12.04.

На сегодняшний день большинство инструкций для поднятия домена на Samba-сервере подразумевает или старые версии софта, или вообще отсутствие LDAP (так тоже, конечно, можно, но тогда теряется смысл централизованного хранилища учетных записей) или использование дополнительного софта типа ebox или gosa. Мне такие идеи не нравятся. По этому рассматривается построение домена исключительно при помощи Samba и OpenLDAP из репозитория Ubuntu. Если нужен какой-то графический просмотрщик LDAP, то я, например, использую JXplorer.

У нас есть сервер с именем PDC и IP-адресом 192.168.7.135. Поднимать домен будем с именем study.local.

 

Перед началом работы откроем файл /etc/hosts

#nano /etc/hosts

и допишем

192.168.7.135 pdc

192.168.7.135 pdc.study.local

 

Далее установим OpenLDAP

#apt-get install slapd ldap-utils

 

При настройке slapd вводим админский пароль

Для дальнейшей работы к OpenLDAP должны быть подключены следующие схемы:

core.ldif

cosine.ldif

nis.ldif

inetorgperson.ldif

openldap.ldif

misc.ldif

 

Смотрим какие схемы уже подключены:

#ls /etc/ldap/slapd.d/cn\=config/cn\=schema

 

Должно вывестись примерно следующее:

cn={0}core.ldif cn={1}cosine.ldif cn={2}nis.ldif cn={3}inetorgperson.ldif

 

Подключаем недостающие схемы:

#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/openldap.ldif

#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/misc.ldif

 

Теперь установим Samba:

#aptitude install samba smbclient smbldap-tools

 

Распаковываем схему Samba:

#zcat /usr/share/doc/samba/examples/LDAP/samba.ldif.gz > /etc/ldap/samba.ldif

 

И добавляем ее в LDAP

l#dapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/samba.ldif

 

Создаем файл study.ldif

#nano /etc/ldap/study.ldif

 

И заполняем его следующими данными:

# Load modules for database type

dn: cn=module,cn=config

objectclass: olcModuleList

cn: module

olcModuleLoad: back_bdb.la

 

# Create directory database

dn: olcDatabase=bdb,cn=config

objectClass: olcDatabaseConfig

objectClass: olcBdbConfig

olcDatabase: bdb

# Domain name (e.g. home.local)

olcSuffix: dc=study,dc=local

# Location on system where database is stored

olcDbDirectory: /var/lib/ldap

# Manager of the database

olcRootDN: cn=admin,dc=study,dc=local

olcRootPW: password

# Indices in database to speed up searches

olcDbIndex: uid pres,eq

olcDbIndex: cn,sn,mail pres,eq,approx,sub

olcDbIndex: objectClass eq

# Allow users to change their own password

# Allow anonymous to authenciate against the password

# Allow admin to change anyone's password

olcAccess: to attrs=userPassword

by self write

by anonymous auth

by dn.base="cn=admin,dc=study,dc=local" write

by * none

# Allow users to change their own record

# Allow anyone to read directory

olcAccess: to *

by self write

by dn.base="cn=admin,dc=study,dc=local" write

by * read

 

 

В этом файле нужно заменить имя домена на свое (например: dc=firma,dc=net для домена firma.net) Замените во всем тексте. Будьте внимательны.

Установите пароль администратора в соответствующей строке файла

В строке olcRootPW замените пароль администратора (в данном случае учетная запись admin) на свой. С точки зрения безопасности нехорошо использовать для пароля слово «password»

 

Теперь добавляем нашу схему в LDAP:

#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/study.ldif

 

И перезапускаем сервис LDAP:

#service slapd restart

 

Теперь добавим индексы для samba. Создадим файл samba_indexes.ldif

#nano /etc/ldap/samba_indexes.ldif

 

И запишем в него

dn: olcDatabase={1}hdb,cn=config

changetype: modify

add: olcDbIndex

olcDbIndex: uidNumber eq

olcDbIndex: gidNumber eq

olcDbIndex: loginShell eq

olcDbIndex: uid eq,pres,sub

olcDbIndex: memberUid eq,pres,sub

olcDbIndex: uniqueMember eq,pres

olcDbIndex: sambaSID eq

olcDbIndex: sambaPrimaryGroupSID eq

olcDbIndex: sambaGroupType eq

olcDbIndex: sambaSIDList eq

olcDbIndex: sambaDomainName eq

olcDbIndex: default sub

 

 

Добавляем в базу

#ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/samba_indexes.ldif

 

Редактируем /etc/ldap/ldap.conf

Запишем в него:

BASE dc=study,dc=local

URI ldap://192.168.7.135/

 

Далее перезапускаем сервис LDAP

#service slapd restart

 

Конфигурируем наш будущий контроллер домена на использование LDAP-аутентификации:

#apt-get install libnss-ldap

 

На вопросы, которые будут заданы в процессе установки и настройки отвечаем следующим образом:

LDAP server Uniform Resource Identifier: ldapi://192.168.7.135

Distinguished name of the search base: dc=study,dc=local

LDAP version to use: 3

Make local root Database admin: Yes

Does the LDAP database require login? No

LDAP account for root: cn=admin,dc=study,dc=local

LDAP root account password: password

 

Вносим изменения в аутентификацию на сервере

#auth-client-config -t nss -p lac_ldap

 

Настраиваем pam аутентификацию, для этого выполняем

#pam-auth-update

И отмечаем аутентификацию LDAP и UNIX.

 

Распакуем файлы конфигурации smbldap-tool

#zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf

#cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf

 

Теперь настроим smbldap-tool

 

Правим /etc/smbldap-tools/smbldap_bind.conf

Так как вторичного контроллера домена у нас нет приводим файл к следующему виду:

#slaveDN="cn=Manager,dc=example,dc=com"

#slavePw="secret"

masterDN="cn=admin,dc=study,dc=local"

masterPw="password"

 

Теперь нам необходимо проверить SID нашего домена. Для этого делаем следующее, набираем команду:

#net getlocalsid pdc

В результате должны получить нечто подобное:

SID for domain pdc is: S-1-5-21-3348427523-2420234745-2521914990

 

Полученый SID запоминаем.

 

Теперь начинаем редакрировать etc/smbldap-tools/smbldap.conf

#nano /etc/smbldap-tools/smbldap.conf

 

В разделе General Configuration

SID="S-1-5-21-3348427523-2420234745-2521914990"

sambaDomain="STUDY"

 

В разделе LDAP Configuration

Комментируем то, что относится к Slave LDAP

masterLDAP="192.168.7.135"

masterPort="389"

ldapTLS="0"

suffix="dc=study,dc=local"

 

В разделе SAMBA Configuration

userSmbHome="\\PDC\%U"

userProfile="\\PDC\profiles\%U"

mailDomain="study.local"

 

Наступило время настройки Samba.

Редактируем файл /etc/samba/smb.conf

И приводим его к такому виду:

 

[global]

server string =

workgroup = STUDY

netbios name = pdc

 

passdb backend = ldapsam:ldap://192.168.7.135

obey pam restrictions = no

security = user

encrypt passwords = yes

unix extensions = no

 

local master = yes

os level = 255

domain master = yes

preferred master = yes

time server = yes

admin users = admin

 

log level = 1

log file = /var/log/samba/workstations/%m.log

max log size = 50

 

getwd cache = yes

read raw = yes

write raw = yes

max xmit = 65536

wins support = yes

dns proxy = no

name resolve order = wins hosts bcast lmhosts

wide links = yes

hosts allow = 192.168. 127.0.0.1 127.0.1.1

 

ldap suffix = dc=study,dc=local

ldap user suffix = ou=Users

ldap group suffix = ou=Groups

ldap machine suffix = ou=Computers

ldap idmap suffix = ou=Idmap

ldap admin dn = cn=admin,dc=study,dc=local

ldap ssl = off

ldap passwd sync = yes

ldap delete dn = no

add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w "%u"

passwd program = /usr/sbin/smbldap-passwd %u

passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*

 

domain logons = yes

load printers = no

logon script = startup.bat

logon path =

 

[netlogon]

path = /home/samba/netlogon

read only = yes

browseable = no

 

Сохраняем файл и проверяем его корректность:

#testparm

 

Если все нормально — перезапускаем сервисы Samba:

#service smbd restart

#service nmbd restart

 

Обратите внимание, что в данной конфигурации мы не используем перемещаемые профиля для клиентов домена.

 

Теперь samba необходимо указать пароль админа LDAP

#smbpasswd -w password

 

Формируем ldif файл sambadb.ldif

smbldap-populate -a admin -e /etc/ldap/sambadb.ldif

 

Где admin — учетная запись администратора.

 

Теперь заполняем нашу базу LDAP

#ldapadd -x -D cn=admin,dc=study,dc=local -W -f sambadb.ldif

 

Устанавливаем пароль админу samba такой же как установили в LDAP командой smbldap-passwd:

#smbpasswd -a admin

 

Дадим группе Domain Admins права администратора домена для этого выполним следующее:

#net rpc rights grant "Domain Admins" SeMachineAccountPrivilege SeTakeOwnershipPrivilege SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege -Uadmin

И введем пароль нашего пользователя admin

 

Добавим наш сервер в домен

#net rpc join -U admin

 

Далее нужно будет ввести пароль

Enter admin's password:

 

Вводим его и в результате должны получить сообщение:

Joined domain STUDY

 

Если все прошло нормально (а так и должно быть), то можно нас поздравить — домен готов к работе. Теперь можно вводить в него компьютеры в нашей сети.

 

В качестве необходимого дополнения рассмотрим команды для администрирования нанего домена при помощи скриптов smbldap-tools

  • Добавление пользователя: smbldap-useradd -a -P username

  • Удаление пользователя: smbldap-userdel username

  • Добавление группы: smbldap-groupadd -a groupname

  • Добавление пользователя в группу: smbldap-groupmod -m username groupname

  • Удаление пользователя из группы: smbldap-groupmod -x username groupname

  • Добавление компьютера в домен: smbldap-useradd -t 0 -w username

  • Установить основную группу пользователя: smbldap-usermod -g groupname username

 

Так же имеет смысл обратить внимание на один досадный, но легко излечимый баг в smbldap-tools. В Ubuntu 12.04 сейчас используется smbldap-tools версии 0.9.7. при использовании любого скрипта для управления доменом появляется ошибка:

Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423

 

Исправить эту ошибку просто. Открываем файл /usr/share/perl5/smbldap_tools.pm Ищем в нем строку:

$sig_name qw(ALRM INT HUP QUIT TERM TSTP TTIN TTOU) {

 

И заменяем ее на:

$sig_name (qw(ALRM INT HUP QUIT TERM TSTP TTIN TTOU)) {

 

Описание ошибки: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=670246

 

           Еще одна ошибка в пакете smbldap-tools. При попытке добавить пользователя командой smbldap-useradd -a -P username выдается ошибка:

           Failed to execute: /usr/sbin/smbldap-passwd.cmd: No such file or directory at /usr/sbin/smbldap-useradd line 668.

  

           Лечится тоже не сложно:

           # ln -s /usr/sbin/smbldap-passwd /usr/sbin/smbldap-passwd.cmd

 

Еще одно немаловажное дополнение. При введении в домен компьютера с Windows 7 скорее всего будут проблемы. Что бы такую машину ввести в домен нужно будет поправить реестр.

HKLM\System\CCS\Services\LanmanWorkstation\Parameters

DWORD DomainCompatibilityMode = 1

DWORD DNSNameResolutionRequired = 0

 

Естественно после этого компьютер необходимо перезагрузить.

После ввода компьютера в домен возможно появление сообщения об ошибке:

 

"Changing the Primary Domain DNS name of this computer to "" failed.

The name will remain "MYDOM". The error was:

The specified domain either does not exist or could not be contacted"

В таком случае необходимо установить хотфикс, специально выпущенный для решения этой проблемы. Подробнее смотреть здесь : http://support.microsoft.com/kb/2171571

 

А вообще подробное описание проблем с Windows 7 есть тут: http://wiki.samba.org/index.php/Windows7

You have no rights to post comments

Яндекс.Метрика