С выходом Ubuntu 10.04 решил я перевести свои сервера на неё. Перевод начал с контроллера домена. Предыдущий контроллер домена представлял из себя Ubuntu 8.04, Samba3 (PDC) + OpenLDAP (Master), администрирование осуществлялось при помощи smbldap-tools. Как оказалось не всё так просто как хотелось, некоторые настройки претерпели серьёзные изменения и в добавок мне захотелось какую нибудь GUI для моего PDC. В процессе поиска GUI я наткнулся на Gosa. Меня вполне устроили возможности Gosa поэтому я остановил свой выбор на ней. Дабы не забыть как это всё настраивается я записал весь процесс настройки, собственно этими записями и решил поделится, может кому понадобиться. Это моя первая статья, так что сильно не пинайте :).

И так, имеется свежеустановленная Ubuntu 10.04 в процессе установки был выбран LAMP сервер, в связи с этим я здесь не буду описывать настройку apache2 + php5.

Все действия в этой статье выполняются от пользователя root.

Первым делом скачиваем Gosa 2.6.13 с оф. сайта. В ней находится ряд схем которые понадобятся при настройке LDAP.

wget -P /tmp http://oss.gonicus.de/pub/gosa/gosa-combined-2.6.13.tar.bz2

Распаковываем содержимое архива

tar xjf /tmp/gosa-combined-2.6.13.tar.bz2 -C /tmp

Копируем в /usr/share/gosa

cp -R /tmp/gosa-combined-2.6.13 /usr/share/gosa

Создаём каталоги необходимые Gosa

mkdir /etc/gosa && mkdir /var/spool/gosa && mkdir /var/cache/gosa

Разрешим группе www-data запись в каталоги

chown root:www-data /var/spool/gosa && chmod 775 /var/spool/gosa
chown root:www-data /var/cache/gosa && chmod 770 /var/cache/gosa

1. Приступаем к настройке LDAP.

Устанавливаем необходимые пакеты

apt-get install slapd ldap-utils

Подключаем базовые схемы

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/misc.ldif

Теперь нужно подключить схемы необходимые для работы Gosa и samba.

Копируем схему samba в каталог /etc/ldap/schema

cp /usr/share/gosa/contrib/openldap/samba3.schema /etc/ldap/schema/

Схему samba3.schema необходимо перевести в формат ldif. Для этого переходим в каталог /etc/ldap

cd /etc/ldap

и создаём файл schema_convert.conf

> schema_convert.conf

следующего содержания:

include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/openldap.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/misc.schema
include         /etc/ldap/schema/samba3.schema

Затем создадим временный каталог и конвертируем в него схему

mkdir /tmp/ldif_output
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={6}samba3,cn=schema,cn=config" > /tmp/cn=samba3.ldif

Переходим в каталог с полученной схемой

cd /tmp/

Далее приступаем к редактированию полученной схемы. Открываем схему cn=samba3.ldif в вашем любимом редакторе (я пользуюсь редактором в mc) и приводим её к следующему виду

Редактируем заголовок:

было:

dn: cn={6}samba3,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {6}samba3

стало:

dn: cn=samba3,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: samba3

В конце схемы удаляем строки примерно следующего содержания

structuralObjectClass: olcSchemaConfig
entryUUID: 7ffcc302-2474-102f-8b3e-d5fe493c556a
creatorsName: cn=config
createTimestamp: 20100715155056Z
entryCSN: 20100715155056.239425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100715155056Z

То есть удаляем всё начиная с structuralObjectClass: и до конца файла.

Ну и на последок копируем и переименовываем файл схемы

cp /tmp/cn\=samba3.ldif /etc/ldap/schema/samba3.ldif

Далее необходимо подобным образом отредактировать все ldif файлы находящиеся в /usr/share/gosa/contrib/openldap/

cd /usr/share/gosa/contrib/openldap/

К примеру возьмём файл trust.ldif.

Было:

dn: cn={13}trust
objectClass: olcSchemaConfig
cn: {13}trust
olcAttributeTypes: {0}( 5.3.6.1.1.1.1.0 NAME 'trustModel' DESC 'Access scheme'
  EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6
 .1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcAttributeTypes: {1}( 5.3.6.1.1.1.1.1 NAME 'accessTo' DESC 'Access to which 
 servers user is allowed' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subs
 tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: {0}( 5.3.6.1.1.1.2.0 NAME 'trustAccount' DESC 'Sets trust ac
 counts information' SUP top AUXILIARY MUST trustModel MAY accessTo )
structuralObjectClass: olcSchemaConfig
entryUUID: fbafdc48-f065-102e-960d-79233977c302
creatorsName: cn=config
createTimestamp: 20100510095600Z
entryCSN: 20100510095600.855485Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100510095600Z

Стало:

dn: cn=trust,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: trust
olcAttributeTypes: {0}( 5.3.6.1.1.1.1.0 NAME 'trustModel' DESC 'Access scheme'
  EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6
 .1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcAttributeTypes: {1}( 5.3.6.1.1.1.1.1 NAME 'accessTo' DESC 'Access to which 
 servers user is allowed' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subs
 tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: {0}( 5.3.6.1.1.1.2.0 NAME 'trustAccount' DESC 'Sets trust ac
 counts information' SUP top AUXILIARY MUST trustModel MAY accessTo )

При редактировании схем Gosa НЕ ЗАБЫВАЙТЕ в первой строке по мимо удаления скобок с номером {13} дописывать ,cn=schema,cn=config иначе схемы Gosa не будут подключены что в дальнейшем приведёт к множеству ошибок.

Теперь копируем их в каталог /etc/ldap/schema

cp /usr/share/gosa/contrib/openldap/*.ldif /etc/ldap/schema/ && cp /usr/share/gosa/contrib/openldap/*.schema /etc/ldap/schema/

Подключаем схемы в следующем порядке

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/trust.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/samba3.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosystem.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gofon.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/goto.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/goto-mime.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa-samba3.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gofax.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/goserver.ldif

Переходим в каталог /etc/ldap

cd /etc/ldap

Создаём базу LDAP с которой в последствии и будем работать. Для этого создаём файл db.ldif

>db.ldif 

следующего содержания:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb.la

dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=example,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet,userPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to dn.subtree="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read

Исправьте в созданном файле имя домена. Например, если ваш сервер называется servak.kontora.ru, то вам нужно заменить dc=example,dc=com на dc=kontora,dc=ru во всём тексте.

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

olcRootPW: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ== в данном примере пароль будет secret

для получения шифрованного пароля была использована утилита slappasswd, использовать её надо следующим образом

slappasswd -h {<МЕТОД_ХЕШИРОВАНИЯ>} -s ПАРОЛЬ

Например

slappasswd -h {MD5} -s secret

Вывод: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

Запомните имя и пароль администратора - GOsa потом спросит. Теперь загрузим эту конфигруацию:

ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif

Далее включаем шифрование для нашего LDAP.

Устанавливаем пакет gnutls-bin

apt-get install gnutls-bin

Создаём ключ для Certificate Authority (CA)

sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"

Создаём файл /etc/ssl/ca.info

cd /etc/ssl && >ca.info 

следующего содержания

cn = Example Company
ca
cert_signing_key

Example Company меняем на своё

Теперь создаём self-signed CA сертификат

certtool --generate-self-signed --load-privkey /etc/ssl/private/cakey.pem \
--template  /etc/ssl/ca.info --outfile /etc/ssl/certs/cacert.pem

Создаём закрытый ключ для нашего сервера При создании замените ldap01 на hostname вашего сервера

sh -c "certtool --generate-privkey > /etc/ssl/private/ldap01_slapd_key.pem"

Чтобы подписать сертификат сервера с СА, создадим файл /etc/ssl/ldap01.info

>/etc/ssl/ldap01.info 

следующего содержания (При создании замените ldap01 на hostname вашего сервера):

organization = Example Company
cn = ldap01.example.com
tls_www_server
encryption_key
signing_key

Example Company меняем на своё

ldap01.example.com меняем на «hostname -f» вашего сервера

ldap01.example.com необходимо обязательно поменять на «hostname -f» вашего сервера потому что значение параметра «cn» должно совпадать с именем хоста который будет использовать этот сертификат, в противном случает возможности подключится к LDAP с данным сертификатом не будет что приведёт в дальнейшем к множеству ошибок

Создаём сертификат для сервера (При создании замените ldap01 на hostname вашего сервера)

certtool --generate-certificate --load-privkey /etc/ssl/private/ldap01_slapd_key.pem \
--load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem \
--template /etc/ssl/ldap01.info --outfile /etc/ssl/certs/ldap01_slapd_cert.pem

Теперь мы имеем certificate, key, и CA cert для установки, используем утилиту ldapmodify для добавления новых опций в конфигурацию

Вводим в консоли

ldapmodify -Y EXTERNAL -H ldapi:///

затем вставляем следующее:

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem

После чего жмём дважды enter должна появится надпись modifying entry «cn=config» и Ctrl+D для выхода.

Далее редактируем /etc/default/slapd опцию SLAPD_SERVICES

SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

Теперь пользователь openldap дорлжен иметь доступ к сертификату (не забываем менять ldap01 на своё)

adduser openldap ssl-cert && chgrp ssl-cert /etc/ssl/private/ldap01_slapd_key.pem && chmod g+r /etc/ssl/private/ldap01_slapd_key.pem

Перезагружаем LDAP

/etc/init.d/slapd restart

Если после перезагрузки ldap не запустился, а в syslog присутствует main: TLS init def ctx failed: -1, это ошибка конфигурации, проверьте содержимое файла /etc/ldap/slapd.d/cn=config.ldif правильно ли в нём указаны пути и названия сертификатов и убедитесь в том что группа ssl-cert имеет возможность читать закрытый ключ /etc/ssl/private/ldap01_slapd_key.pem

Теперь добавим индексы для samba

cd /etc/ldap

Создаём samba_indexes.ldif

>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

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

ldapmodify -Y EXTERNAL -H ldapi:/// -f samba_indexes.ldif

Добавим индексы для gosa

Создаём gosa_indexes.ldif

>gosa_indexes.ldif 

следующего содержания:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: mail eq,sub
olcDbIndex: gosaMailAlternateAddress,gosaMailForwardingAddress eq
olcDbIndex: cn,sn,givenName,ou pres,eq,sub
olcDbIndex: gosaSubtreeACL,gosaObject,gosaUser pres,eq
olcDbIndex: displayName eq
olcDbIndex: ipHostNumber eq
olcDbIndex: postfixMyDestinations eq
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq

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

ldapmodify -Y EXTERNAL -H ldapi:/// -f gosa_indexes.ldif

Редактируем /etc/ldap/ldap.conf Указываем суффикс базы, в данном случае это dc=example,dc=com

BASE	dc=example,dc=com
URI     ldap://localhost ldaps://«hostname -f вашего сервера»
TLS_CACERT      /etc/ssl/certs/cacert.pem

Перезагружаем LDAP

/etc/init.d/slapd restart

Если при этом slapd на перезагрузится, а команда

slaptest

выдаст

config error processing olcDatabase={2}hdb,cn=config: <olcSuffix> namingContext "dc=example,dc=com" already served by a preceding hdb database
slaptest: bad configuration file!

то удалите файл /etc/ldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

rm /etc/ldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif

и повторите попытку перезагрузить LDAP

/etc/init.d/slapd restart

Всё настройка LDAP окончена.

2. Конфигурируем сервер на использование LDAP аутентификации

Устанавливаем необходимые пакеты

apt-get install libnss-ldap

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

Should debconf manage LDAP configuration?: Yes
LDAP server Uniform Resource Identifier: ldaps://«hostname -f вашего сервера»
Distinguished name of the search base: dc=example,dc=com
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=example,dc=com
LDAP root account password: secret

Если в процессе ответов на вопросы вы ошиблись, исправить можно запустив переконфигурацию пакета ldap-auth-config командой

dpkg-reconfigure ldap-auth-config

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

auth-client-config -t nss -p lac_ldap

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

pam-auth-update

и активируем профили аутентификации LDAP и UNIX.

3. Заполняем нашу базу в LDAP и настраиваем samba

Устанавливаем необходимые пакеты

apt-get install samba samba-doc smbldap-tools

Настраиваем smbldap-tools.

Запускаем скрипт конфигурации smbldap-tools

gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
perl /usr/share/doc/smbldap-tools/configure.pl

И начинаем отвечать на вопросы:

Samba Configuration File Path [/etc/samba/smb.conf] >
(Путь к конфиг файлу samba, если нажать enter будет указан путь поумолчанию который находится в квадратных скобках)

Smbldap-tools Configuration Directory Path [/etc/smbldap-tools/] >
(Место нахождения конфигов Smbldap-tools)

workgroup name [WORKGROUP] >  EXAMPLE
(Имя рабочей группы samba в нашем случает это сокращённое имя домена)

netbios name [] > pdc
(netbios имя samba, указываем имя нашего сервера)

logon drive [] >
(Локальный каталог, который будет играть роль домашнего каталога пользователя, например Н:)

logon home (press the "." character if you don't want homeDirectory) [\\pdc\%U] > .
(Подключение домашнего каталога пользователя, можно поставить « . » точку если не хотим подключать домашний каталог)

logon path (press the "." character if you don't want roaming profile) [\\svarog\profiles\%U] >.
(Путь к каталогу с профилями пользователей, « . » точка если не хотим чтоб профили загружались по сети)

home directory prefix (use %U as username) [/home/%U] >/bin/false
(Путь к домашней директории пользователя, в нашем случае у пользователя нет домашней директории)

default users' homeDirectory mode [700] > 
(Права на домашнюю директорию пользоватля)

default user netlogon script (use %U as username) [] >
(Скрипт который будет выполняться при аутентификации пользователя, %U — логин пользователя)

default password validation time (time in days) [45] >.
(Время жизни пароля пользователя в днях, через указанное количество дней пароль должен быть сменён, « . » точка — время жизни пароля неограниченно)

ldap suffix [] > dc=example,dc=com
(суффикс базы LDAP)

ldap group suffix [] > ou=Groups
(Группы в LDAP)

ldap user suffix [] > ou=Users
(Пользователи в LDAP)

ldap machine suffix [] > ou=Computers
(Компьютеры в LDAP)

Idmap suffix [ou=Idmap] >
(строка указывает, где находятся значения Idmap (используется, если сервер Samba является членом домена))

sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=EXAMPLE] > 
(параметр, описывающий где хранятся следующие свободные uidNumber и gidNumber )

 ldap master server [] > 127.0.0.1
(Основной сервер LDAP)

ldap master port [389] >
(Порт на котором работает LDAP)

ldap master bind dn [] > cn=admin,dc=example,dc=com
(Админ сервера LDAP)

ldap master bind password [] > secret
(Пароль админа сервера LDAP, в нашем случае secret)

ldap slave server [] > 127.0.0.1
(Вторичный сервер LDAP)

ldap slave port [389] >
(Порт вторичного сервера LDAP)

ldap slave bind dn [] > cn=admin,dc=example,dc=com
(Админ вторичного сервера LDAP)

ldap slave bind password [] >secret
(Пароль админа вторичного сервера LDAP, «secret»)

ldap tls support (1/0) [0] >1
(использовать tls или нет, в нашем случае используем)

How to verify the server's certificate (none, optional or require) [require] >
(вид проверки сертификата (нет, опционально или требовать))

CA certificate file [/etc/smbldap-tools//ca.pem] > /etc/ssl/certs/cacert.pem
(файл повышенной защищенности (дословно PEM-format file) включающий сертификат для CA которым будет доверять slapd)

certificate to use to connect to the ldap server [/etc/smbldap-tools//smbldap-tools.pem] > /etc/ssl/certs/ldap01_slapd_cert.pem
(файл, содержащий клиентский сертификат)

key certificate to use to connect to the ldap server [/etc/smbldap-tools//smbldap-tools.key] > /etc/ssl/private/ldap01_slapd_key.pem
(файл, содержащий приватный ключ, который соответствует клиентскому сертификату)

SID for domain WORKGROUP [S-1-5-21-2252343921-2211050572-3431777101] >
(идентификатор безопасности домена, у вас будет свой)

unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > MD5
(способ хэширования паролей пользователей)

default user gidNumber [513] > 
(по умолчанию основная группа для учетных записей пользователей)

 default computer gidNumber [515] > 
(по умолчанию основная группа для компьютеров)

default login shell [/bin/bash] >
(оболочка пользователя по умолчанию)

default skeleton directory [/etc/skel] >
(место, где находится <<скелетная>> директория, являющаяся шаблоном для директорий пользователей, эта опция используется лишь в том случае, если вы явно укажете создать домашнюю директорию пользователя в ходе создания нового пользователя)

default domain name to append to mail adress [] >
(домен, добавляемый к атрибуту пользователя "mail")

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

net getlocalsid hostname_вашего_сервера

ответом должна быть строка следующего вида

SID for domain hostname_вашего_сервера is: S-1-5-21-2252343921-2211050572-3431777101

Теперь идём в файл /etc/smbldap-tools/smbldap.conf находим там опцию SID и проверяем, должно совпадать с тем что мы получили выше.

Если при конфигурировании на вопрос «default password validation time (time in days) [45] >» вы поставили « . » точку, тогда ищем опцию

defaultMaxPasswordAge="" 

и комментируем её.

Находим

crypt_salt_format="" 

и меняем на

crypt_salt_format="$1$%.8s"

Заполняем базу LDAP.

Необходимо узнать администратора samba, для этого выполняем команду

pdbedit -Lw

Ответом должно показать двух пользователей, один из них nobody а второй и есть администратор samba (в моём случае это admins)

nobody:65534:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U          ]:LCT-00000000:
admins:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U          ]:LCT-00000000:

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

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

Вместо admins указываете своего админа samba.

Переходим в /etc/ldap

cd /etc/ldap

Необходимо отредактировать sambadb.ldif Выполняем команду

pdbedit -Lw admins -v

Ищем «User SID», записываем его (копируем или запоминаем :) ), далее открываем sambadb.ldif для редактирования, ищем описание администратора, начинается оно так

dn: uid=admins,ou=Users,dc=example,dc=com

ищем в описании sambaSID и меняем его значение на то что получили выше.

Я ещё сделал следующее, поменял значение gidNumber и uidNumber на 1000, прописал homeDirectory: /home/admins и loginShell: /bin/sh (это значения локального пользователя admins), и в описании домена

dn: sambaDomainName=EXAMPLE,dc=example,dc=com

изменил gidNumber и uidNumber на 1001. Думаю вы можете этого не делать.

Заполняем нашу базу

ldapadd -x -D cn=admin,dc=example,dc=com -W -f sambadb.ldif

Устанавливаем пароль администратору samba в LDAP

smbldap-passwd -a admins

Добавим нового пользователя

smbldap-useradd -a -P username

Перезагружаем сервер

reboot

Теперь проверим видит наш сервер пользователей в LDAP или нет, для этого можно попробовать войти в систему под ново созданным пользователем username или в mc выбрав любой файл перейти в меню Файл → Права (расширенные) и развернуть список групп, там должны быть все группы из LDAP которые мы добавили при заполнении базы, такие как Domain Admins, Domain Users и т.д.

Переходим к конфигурированию samba. Идём в /etc/samba

cd /etc/samba 

и делаем копию дефолтного конфига

cp smb.conf smb.conf.orig

Ниже приведу конфиг моей самбы:

[global]
        server string =
        workgroup = EXAMPLE
        netbios name = pdc
#=========================================================
        passdb backend = ldapsam:ldap://localhost
        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 = admins
#=========================================================
        log level = 1
        log file = /var/log/samba/workstations/%m.log
        max log size = 50
#=========================================================
        socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
        getwd cache = yes
        read raw = yes
        write raw = yes
        max xmit = 65536
        wins support = yes
        wins proxy = 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
        hosts deny = 0.0.0.0/0
        idmap uid = 10000-20000                                                                                                                                                     
        idmap gid = 10000-20000                                                                                                                                                     
#=========================================================                                                                                       
        ldap suffix = dc=example,dc=com
        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=example,dc=com
        ldap ssl = start tls
        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
       invalid users = root
       load printers = no
#=========Шары описываем сами :)========================

Создаём необходимые каталоги, в моём случае это

mkdir /var/log/samba/workstations/

Перезагружаем smbd

service smbd restart

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

smbpasswd -w secret

вместо secret поставьте ваш пароль.

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

smbpasswd -a admins

Перезагружаем nmbd

service nmbd restart

Проверяем как работает samba для этого получим список групп в домене

net groupmap list

ответом должно быть

Domain Admins (S-1-5-21-2302747472-2920907650-383109413-512) -> Domain Admins
Domain Users (S-1-5-21-2302747472-2920907650-383109413-513) -> Domain Users
Domain Guests (S-1-5-21-2302747472-2920907650-383109413-514) -> Domain Guests
Domain Computers (S-1-5-21-2302747472-2920907650-383109413-515) -> Domain Computers
Administrators (S-1-5-32-544) -> Administrators
Account Operators (S-1-5-32-548) -> Account Operators
Print Operators (S-1-5-32-550) -> Print Operators
Backup Operators (S-1-5-32-551) -> Backup Operators
Replicators (S-1-5-32-552) -> Replicators

Всё настройка samba окончена. Пробуем добавить виндовую машину в домен. Если всё ок продолжаем настраивать дальше.

4. Назначаем права администратору домена и добавляем сервер в домен

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

net rpc rights grant "Domain Admins" SeMachineAccountPrivilege SeTakeOwnershipPrivilege \
SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege SePrintOperatorPrivilege \
SeAddUsersPrivilege SeDiskOperatorPrivilege -Uadmins%secret

Ответом должно быть Successfully granted rights.

Теперь любой пользователь входящий в эту группу будет иметь права администратора домена.

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

net rpc join -U admins%secret

Ответом должно быть Joined domain EXAMPLE.

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

net rpc testjoin

Ответом должно быть Join to 'EXAMPLE' is OK

Команды для администрирования samba c помощью 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

Если для администрирования будет использоваться Gosa то этими командами пользоваться нельзя, так так пользователей и группы добавленные этими командами Gosa видеть не будет.

5. Настраиваем Gosa.

Создадим в каталоге /etc/apache2/conf.d файл gosa

>/etc/apache2/conf.d/gosa 

следующего содержания:

Alias /gosa /usr/share/gosa/html
<IfModule mod_php5.c>
   <Location /gosa>
     php_admin_flag engine on
     php_admin_flag register_globals off
     php_admin_flag allow_call_time_pass_reference on
     php_admin_flag expose_php off
     php_admin_flag zend.ze1_compatibility_mode off
     php_admin_flag register_long_arrays off
     php_admin_flag magic_quotes_gpc on
   </Location>
</IfModule>

Устанавливаем необходимые пакеты для gosa

apt-get install gettext php5-cli php5-common php5-gd php5-imagick php5-imap php5-ldap \
php5-memcache php5-mhash php5-mysql php5-pgsql php5-recode php5-snmp php5-sqlite

Заходим в каталог с gosa и запускаем update-gosa

cd /usr/share/gosa/ && ./update-gosa

Обновляем интернационализацию gosa

./update-gosa rescan-i18n

Перезагружаем apache

/etc/init.d/apache2 restart

Заходим на сервер через браузер

http://ваш_сервер/gosa

и приступаем к конфигурации:

Welcome

Здесь вас попросят выполнить непосредственно на сервере команду приблизительно следующего содержания

echo -n jkru9iqn9de354u32kcou43dt3 > /tmp/gosa.auth

команда указана на странице.

Language setup

Выбираем язык интерфейса. К сожалению перевод на русский ещё не закончен поэтому при выборе русского интерфейс будет русско-английский

Installation check

Здесь выполняется проверка модулей РНР если имеются error их необходимо исправить, до установив недостающие модули, прежде чем продолжить дальнейшее конфигурирование.

License

Раздел лицензии. Естественно нужно принять :)

LDAP setup

Здесь указываются настройки для соединения с LDAP.

Местоположение — пишем что хотим

Connection URL - ldap://localhost:389

TLS connection — yes

Ветка — dc=exampe,dc=com

DN администратора — cn=admin

Пароль администратора — secret

Ставим галочку на «Automatically append LDAP base to admin DN»

Use rfc2307bis compliant groups — no

Поле Информация должна быть подсвечена зелёным.

LDAP schema check

Проверка схем LDAP.

Enable schema validation when logging in — yes Check status должен быть Schema check succeeded в противном случае что-то не так со схемами и это необходимо устранить прежде чем продолжить настройку.

GOsa settings 1/3

Настройки Gosa этап первый. Здесь я укажу только то что я изменил, все остальные настройки оставил как есть.

People DN attribute — uid

People storage subtree — ou=Users

Group storage subtree — ou=Groups

Password encryption algorithm — md5

GOsa settings 2/3

Настройки Gosa этап второй.

Samba SID — S-1-5-21-2252343921-2211050572-3431777101

RID base — 1000

Workstation container — ou=Computers

Samba SID mapping - yes

Timezone — ваша

Enable Copy & Paste - yes

GOsa settings 3/3

Настройки Gosa этап третий. Здесь я всё оставил как есть

LDAP inspection

Здесь Gosa проверяет базу LDAP. Если есть ошибки или предупреждения их необходимо исправить, благо Gosa может это исправить самостоятельно. Для этого необходимо нажать на кнопку Migrate, а дальше либо ещё раз Migrate либо поставить галочки на нужных элементах и Применить. Здесь же вам необходимо будет создать администратора gosa.

В этом этапе Gosa также предложит мигрировать компьютеры имеющиеся в LDAP, как минимум это будет ваш сервер который вы добавили в домен в предыдущем разделе, как максимум это будут все машины уже добавленные в домен. Мигрировать компьютеры НЕ НУЖНО оставьте их как есть и продолжайте настройку.

Feedback

Здесь я ничего не писал а просто нажал Next

Готово

Конфигурация Gosa законченна. Скачиваем конфигурационный файл нажатием на кнопку Download configuration и помещаем его на сервер в папку /etc/gosa, после чего назначаем ему права

chown root:www-data /etc/gosa/gosa.conf
chmod 640 /etc/gosa/gosa.conf

и жмём Next.

Более подробно о всех этапах настройки можно почитать здесь.

После того как gosa.conf помещён в указанный каталог и ему присвоены необходимые права, жмём next и попадаем на страницу авторизации. Для входа используем логин и пароль админа gosa который был создан в разделе LDAP inspection.

Теперь создадим дополнительные каталоги, чтоб в gosa не появлялись предупреждения

mkdir /etc/gosa/asterisk && touch /etc/gosa/asterisk/sip_context.conf && touch /etc/gosa/asterisk/voicemail_context.conf

Вместо создания каталогов можно удалить плагин asterisk, но я не стал на этом заморачиваться.

Ну вот и всё, настройка Gosa законченна.

Попробуем создать пользователя при помощи Gosa.

Заходим в gosa, в разделе Administration выбираем пункт Пользователи. Далее выбираем Действия — Создать — Пользователь. На открывшейся странице есть три обязательных поля Last name — фамилия пользователя, First name — Имя пользователя, Имя пользователя — логин пользователя, который будет использоваться для авторизации указываем их, далее переходим на вкладку Unix и жмём кнопку Add Posix settings, здесь указываем Домашний каталог, в моём случае это /bin/false. Переходим на вкладку Samba, жмём кнопку Add samba settings, на этой вкладке я ничего не изменял. В низу страници жмём Ок, вас попросят задать пароль пользователя, указываем новый пароль и подтверждение, жмём изменить пароль. Всё пользователь создан.

Также необходимо открыть администратора samba перейти на вкладку Samba и нажать кнопку Применить. Это нужно сделать для внесения необходимых параметров для Gosa.

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

Добавить в конец файла /etc/sudoers следующую строку

www-data ALL=(ALL) NOPASSWD:ALL

В /etc/gosa/gosa.conf находим комент <!– User dialog –> ниже его идёт блок <usertabs> в котором описаны все вкладки диалога по созданию пользователя, к примеру вы хотите чтоб после создания пользователя создавался его домашний каталог, тогда необходимо изменить

<tab class="user" name="Generic" />

на

<tab class="user" name="Generic" 
postcreate="/usr/bin/sudo /etc/gosa/scripts/createuserfolder.sh %uid" />

если необходимо чтоб ещё выполнялись скрипты при удалении и изменении пользователя то необходимо добавить следующее

<tab class="user" name="Generic" 
postcreate="/usr/bin/sudo /etc/gosa/scripts/createuserfolder.sh %uid" 
postremove="/usr/bin/sudo /etc/gosa/scripts/deleteuserfolder.sh %uid"
postmodify="/usr/bin/sudo /etc/gosa/scripts/usermodify.sh" />

%uid - это переменная подставляющая имя пользователя, /etc/gosa/scripts/createuserfolder.sh - это полный путь к скрипту.

Скрипты должны иметь права 750 и быть доступны для группы www-data.

Если же вам необходимо чтоб скрипты выполнялись к примеру только при создании samba акаунта пользователя тогда вместо строки

<tab class="sambaAccount" name="Samba"  /> 

необходимо изменить

<tab class="sambaAccount" name="Samba" 
     postcreate="/usr/bin/sudo /etc/gosa/scripts/createuserfolder.sh %uid" 
     postremove="/usr/bin/sudo /etc/gosa/scripts/deleteuserfolder.sh %uid" />

Если же хотим выполнять скрипты после создания, удаления, изменения группы то ищем комент <!– Group dialog –> и изменяем строку

<tab class="group" name="Generic" />

на

<tab class="group" name="Generic" 
postcreate="/usr/bin/sudo /etc/gosa/scripts/creategroupdir.sh %cn" />

%cn - это переменная подставляющая название группы

Ну вот собственно и всё. Надеюсь кому нибудь эта информация пригодится 8-)

P.S. Gosa довольно мощный инструмент для администрирования, немного в нём покопавшись я обнаружил что в Gosa реализована возможность администрирования почтового сервера Postfix. Так, что я решил перевести свой почтовик на LDAP и администрировать его через Gosa. О том что у меня получилось я напишу в следующей статье 8-)

Обсудить данную статью можно на форуме.

6. Перечень ссылок использованных при написании статьи

7. Статьи по теме