Содержание
С выходом 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 )
Теперь копируем их в каталог /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 на 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.
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 - это переменная подставляющая название группы
Ну вот собственно и всё.
Надеюсь кому нибудь эта информация пригодится
P.S. Gosa довольно мощный инструмент для администрирования, немного в нём покопавшись я обнаружил что в Gosa реализована возможность администрирования почтового сервера Postfix. Так, что я решил перевести свой почтовик на LDAP и администрировать его через Gosa. О том что у меня получилось я напишу в следующей статье
Обсудить данную статью можно на форуме.
6. Перечень ссылок использованных при написании статьи
https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html
https://help.ubuntu.com/10.04/serverguide/C/samba-ldap.html
https://help.ubuntu.com/10.04/serverguide/C/samba-dc.html
https://oss.gonicus.de/labs/gosa/wiki/InstallingLdap.ru
https://oss.gonicus.de/labs/gosa/wiki/InstallingLdap
http://www.ultimateliga.com/article/linux/2605-ustanovka-gosa-dlja-upravlenija-ldap-kataloga-i.html
http://www.opennet.ru/base/net/smbldap_howto.txt.html
http://www.xakep.ru/post/43923/default.asp
http://www.rrcomputerconsulting.com/view.php?article_id=2
http://www.rrcomputerconsulting.com/view.php?article_id=3
https://oss.gonicus.de/labs/gosa/wiki/InstallingGOsa
https://oss.gonicus.de/labs/gosa/wiki/InstallingGOsaSetup
http://tudimon.com/2009/05/18/kontroller-domena-pdc-na-sambaopenldap.html
http://tudimon.com/2009/03/16/kontroller-domena-pdc-na-samba.html
http://jriosgosa.blogspot.com/2007/03/gosa2-perfect-integration.html
7. Статьи по теме
Настройка Amavisd-new + ClamAV + Dspam
Настройка Roundcubemail c адресной книгой в LDAP
Настройка сервера Ubuntu 10.04 Samba 3 (BDC) + OpenLDAP 2.4 (Slave) + PhpLdapAdmin 1.2.0.5
«Данный материал написан для «Первого конкурса русскоязычных статей для ОС Ubuntu 2011 года» (konkurs.ubuntu.ru)»