Домен на Samba и OpenLDAP в Ubuntu 12.04 |
Обновлено: 15.06.2025 - 21:55
В последнее время во время общения с клиентами по работе начал замечать активный рост популярности свободного ПО. Естественно и домен многие начали поднимать на 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
Файлы samba_indexes.ldif study.ldif вложил в архив, который скачать можно тут
------------------------
Восстановление сайтов из Вебархива
Размещение по доскам объявлений России
ТРИО теплый пол отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Категория: Компьютерные советы
Комментарии |