Настройки всего с LDAP
Информацию по работе с этой вики можно найти в руководстве пользователя.
Содержание
- 1 Страницы документации сообщества администраторов drivesource.ru
- 2 Апгрейд Gutsy Gibbon 7.10 до Hardy Heron 8.04 LTS
- 3 Сервер директорий OpenLDAP
- 4 Браузер сервера каталогов phpLDAPadmin
- 5 Анализ конфигурации OpenLDAP в связке с smbldap-tools
- 6 Прокси сервер Squid с авторизацией пользователей в OpenLDAP
- 7 Установка BugZilla
- 8 Samba
- 9 Некоторые полезные ресурсы
Страницы документации сообщества администраторов drivesource.ru
замечания и предложения присылайте на почту svschwartz {at} gmail {dot} com
Для начала напишу маленький howto о том как быстро и просто поднять ldap + samba
Все действия выполняются на платформе Ubuntu Gutsy Gibbon 7.10
Теперь уже Hardy Heron 8.04 :)
Все команды выполняются "от рута". Чтобы стать рутом в убунте выполните команду
sudo bash # увас запросят ВАШ пароль, а не пароль пользователя root
Апгрейд Gutsy Gibbon 7.10 до Hardy Heron 8.04 LTS
Устанавливаем утилиту update-manager-core
aptitude install update-manager-core
Запускаем апгрейд
do-release-upgrade
Далее следуйте инструкциям в терминале :)
Сервер директорий OpenLDAP
Устанавливаем софт
apt-get install slapd ldap-utils smbldap-tools samba smbfs samba-doc
Конфигуратор системы запросит "Пароль администратора" - просто нажмите enter два раза - пароль администратора мы укажем позже.
Пара слов о пакетах. Пакет slapd - это непосредственно сервер директорий OpenLDAP.
ldap-utils - набор стандартных клиентских утилит таких как ldapsearch.
smbldap-tools - набор perl скриптов для управления данными в сервере директорий.
samba - собственно сервер протокола виндузятнегов CIFS
smbfs - модули ядра для монтирования ресурсов по протоколу CIFS
samba-doc - доки по samba. В его составе есть схема /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz необходимая для создания обектов samba.
Настраиваем сервер директорий
Распаковываем схему samba
zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
Сгенерируем хеш пароля администратора
slappasswd
Отредактируем конфигурацию сервера OpenLDAP - файл /etc/ldap/slapd.conf
# секция # Schema and objectClass definitions # добавляем пару схем include /etc/ldap/schema/misc.schema include /etc/ldap/schema/samba.schema # для начала пускай сервер будет разговорчивым loglevel 256 # переходим в раздел описания хранилища database hdb # укажем корень дерева для домена drivesource.ru suffix "dc=drivesource,dc=ru" # укажем DN администратора rootdn "cn=admin,dc=drivesource,dc=ru" # здесь же запишем хеш пароля администратора сгенерированный ранее rootpw "{SSHA}i/dxtpiLHF9bTJ4LET7uuYkm7YZFoAny" # индексирование влияет на производительность, так что советую сразу их задать # Indices to maintain for this database index objectClass eq,pres index ou,cn,sn,mail,givenname eq,pres,sub index uidNumber,gidNumber,memberUid eq,pres index loginShell eq,pres ## required to support pdb_getsampwnam index uid pres,sub,eq ## required to support pdb_getsambapwrid() index displayName pres,sub,eq index nisMapName,nisMapEntry eq,pres,sub index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub # далее идут прочие параметры для тонкой настройки, пока углубляться в них не будем перейдем к настройкам доступа ACL # алгоритм применения правил - кто первый подходит, тот и применяется - сверху вниз по конфигу # так что сначала применяем самые жесткие правила access to attrs=userPassword,sambaLMPassword,sambaNTPassword,sambaPwdMustChange,sambaPwdLastSet by dn="cn=admin,dc=drivesource,dc=ru" write by anonymous auth by self write by * none # правило написаное выше разрешает администратору запись перечисленных атрибутов # клиентам не прошедших аутентификацию - принуждает пройти аутентификацию # владельцам атрибутов - так же разрешено записывать их # все остальные - доступ запрещен # это правило необходимо для корректной работы политик срока давности паролей access to attrs=shadowLastChange,shadowMax by dn="cn=admin,dc=drivesource,dc=ru" write by self write by * read # данное правило необходимо для получения информации об особенностях сервера такие как supportedSASLMechanisms access to dn.base="" by * read # последнее правило на сегодня разрешает чтение атрибутов для всех категорий клиентов и запись для администратора access to * by dn="cn=admin,dc=drivesource,dc=ru" write by * read
На всякий пожарный ограничим доступ к серверу только на localhost
В файле /etc/default/slapd
SLAPD_SERVICES="ldap://127.0.0.1:389/"
Теперь когда все настроено правильно запустим сервер
# сначала остановим сервер /etc/init.d/slapd stop # удалим файлы который были созданы для конфига из коробки rm -rf /var/lib/ldap/* # стартуем сервер /etc/init.d/slapd start
Удостоверимся что сервер стартовал и забиндился на интерфейс lo
netstat -atnp | egrep slap
Вывод команды должен быть следующего вида
tcp 0 0 127.0.0.1:389 0.0.0.0:* LISTEN 15271/slapd
Если сервер не стартовал и как то поругался в терминал смотрите логи в /var/log/debug или /var/log/messages
Посмотрим на содержание директории и работоспособность админского доступа
ldapsearch -h localhost -b "dc=drivesource,dc=ru" -D "cn=admin,dc=drivesource,dc=ru" -x -W '(objectClass=*)' Enter LDAP Password: # extended LDIF # # LDAPv3 # base <dc=drivesource,dc=ru> with scope subtree # filter: (objectClass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1
Наш каталог пока что пуст, поэтому и объектов не найдено, но сервер работает и отвечает на запросы.
Настраиваем журнал syslog
В файл /etc/syslog.conf добавим строку
local4.* /var/log/slapd.log
Теперь необходимо рестартовать сервер журналов
/etc/init.d/syslog restart
Теперь сообщения от сервера OpenLDAP можно смотреть в файле /var/log/slapd.log
Настраиваем скрипты smbldap-tools
Распакуем примеры конфигурационных файлов
cd /usr/share/doc/smbldap-tools/examples zcat smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf cp smbldap_bind.conf /etc/smbldap-tools/
В файле /etc/smbldap-tools/smbldap_bind.conf нужно указать dn и пароль админа
masterDN="cn=admin,dc=drivesource,dc=ru" masterPw="password"
Не забудьте ограничить доступ к конфигу
chmod 0400 /etc/smbldap-tools/smbldap_bind.conf
Получим SID для нашего сервера
net getlocalsid
Основной конфиг скриптов /etc/smbldap-tools/smbldap.conf
# # Секция General Configuration # # первым делом указываем SID рабочей группы виндовз SID="S-1-5-21-1281770608-2748599951-4138892180" # затем собственно рабочую группу sambaDomain="DRIVESOURCE" # # Секция LDAP Configuration # # ip адрес нашего сервера masterLDAP="127.0.0.1" # порт сервера masterPort="389" # корень сервера директорий suffix="dc=drivesource,dc=ru" # # Секция SAMBA Configuration # # путь к каталогу пользователя в сетях виндовз userSmbHome="\\daemon\%U" # то же самое для профиля userProfile="\\daemon\profiles\%U" # домен электронной почты, используемый по умолчанию mailDomain="drivesource.ru"
Итак теперь когда скрипты настроены правильно и сервер директорий работает заполним каталог первичными данными, для чего выполним команду
smbldap-populate
Результатом выполнения команды будет примерно следующее
Populating LDAP directory for domain DRIVESOURCE (S-1-5-21-1281770608-2748599951-4138892180) (using builtin directory structure) adding new entry: dc=drivesource,dc=ru adding new entry: ou=Users,dc=drivesource,dc=ru adding new entry: ou=Groups,dc=drivesource,dc=ru adding new entry: ou=Computers,dc=drivesource,dc=ru adding new entry: ou=Idmap,dc=drivesource,dc=ru adding new entry: uid=root,ou=Users,dc=drivesource,dc=ru adding new entry: uid=nobody,ou=Users,dc=drivesource,dc=ru adding new entry: cn=Domain Admins,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Domain Users,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Domain Guests,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Domain Computers,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Administrators,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Account Operators,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Print Operators,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Backup Operators,ou=Groups,dc=drivesource,dc=ru adding new entry: cn=Replicators,ou=Groups,dc=drivesource,dc=ru adding new entry: sambaDomainName=DRIVESOURCE,dc=drivesource,dc=ru Please provide a password for the domain root: Changing UNIX and samba passwords for root New password: Retype new password:
Пользователь root для которого запросят ввести пароль - это учетная запись в сервере директорий, а не админ хост системы.
Посмотрите теперь что появилось в нашей базе каталогов
ldapsearch -h localhost -b "dc=drivesource,dc=ru" -D "cn=admin,dc=drivesource,dc=ru" -x -W '(objectClass=*)'
Так же выполните поиск анонимно, то есть без авторизации
ldapsearch -h localhost -b "dc=drivesource,dc=ru" -x '(objectClass=*)'
Обратите внимание что во втором случае атрибуты userPassword,sambaLMPassword,sambaNTPassword,sambaPwdMustChange,sambaPwdLastSet
не доступны для просмотра, это действие ACL которые мы прописали в конфиге сервера директорий.
Браузер сервера каталогов phpLDAPadmin
Итак правильно настроенная система, сервер OpenLDAP и скрипты smbldap-tools вполне рабочее решение с которым можно жить и строить. Но согласитесь что в современном мире правит GUI. Так что предлагаю воспользоваться достижениями современников и установить phpLDAPadmin для таких задачь как просмотр дерева и правка некоторых атрибутов вроде cn.
phpLDAPadmin как вы уже наверное догадываетесь веб приложение, свежие версии которого созданы с использованием технологии AJAX - YO! :)
Установка необходимого софта
В консоли от рута
apt-get update apt-get install apache2-mpm-prefork libapache2-mod-php5 php5-ldap /etc/init.d/apache2 restart
Итак мы установили apache2 собранный как mpm-prefork, не спрашивайте меня почему, на сколько я помню для php это оптимальный вариант. Так же установили php5(libapache2-mod-php5) и модуль к нему для работы с ldap(php5-ldap).
Создадим файл /var/www/phpinfo.php следующего содержания
<?php phpinfo(); ?>
Теперь в браузере наберите адрес http://yourserver/phpinfo.php - получите страницу с настройками php. Убедитесь что там присутствует модуль ldap
Установка phpLDAPadmin
На сайте проэкта http://phpldapadmin.sourceforge.net/ зайдите в раздел Downloads и скачайте latest release.
На данный момент выглядит это так
wget cdhttp://dfn.dl.sourceforge.net/sourceforge/phpldapadmin/phpldapadmin-1.1.0.5.tar.gz tar -xzf phpldapadmin-1.1.0.5.tar.gz mv phpldapadmin-1.1.0.5 /var/www/pla chown -R www-data.www-data /var/www
Теперь он доступен по адресу http://yourserver/pla
Настройка phpLDAPadmin
Настраивается phpLDAPadmin по всякому, опций тьма. Возьмем за основу конфиг "из коробки".
cd /var/www/pla/config cp config.php.example config.php
Для нас главное сейчас описать наш сервер каталогов и как пройти аутентификацию.
// опции которые я здесь компактно выписал начинаются примерно с 151 строки конфига $i=0; // $i=0 означает просто порядковый номер в массиве, так принято в программировании что считать начинают с нуля :) // создаем экземпляр класса, надеюсь никому не нужно обьяснять принципы ООП? отлично :) $ldapservers = new LDAPServers; // укажем название или по другому алиас для нашего сервера $ldapservers->SetValue($i,'server','name','DRIVE LDAP Server'); // ip адрес $ldapservers->SetValue($i,'server','host','127.0.0.1'); // порт $ldapservers->SetValue($i,'server','port','389'); //а теперь нам предлагают выбрать вариант аутентификации - всего их 4. Я выбрал авторизацию по конфигу для удобства. $ldapservers->SetValue($i,'server','auth_type','config'); $ldapservers->SetValue($i,'login','dn','cn=admin,dc=drivesource,dc=ru'); $ldapservers->SetValue($i,'login','pass','password'); $ldapservers->SetValue($i,'server','tls',false); // не показывать ссылки для модификации чеголибо $ldapservers->SetValue($i,'server','read_only',true); // не показывать ссылки для создания записей $ldapservers->SetValue($i,'appearance','show_create',false);
Наша цель в первую очередь ознакомительная. Но phpLDAPadmin очень хороший и гибкий инструмент и уж как его использовать личное дело каждого администратора.
А пока что хватит самой простой настройки. Мы сможем просматривать дерево каталогов и значения атрибутов. Запись по умолчанию заблокирована.
Обратите внимание что настройки прав в phpLDAPadmin и ACL в OpenLDAP разные вещи!
Настройка php5
Если вы уже обновили страничку http://yourserver/pla то очень огорчились увидев вместо дерева каталогов сообщение Your php memory limit is low - currently 16M
для корректной работы phpLDAPadmin нужно подкрутить опции php в файле /etc/php5/apache2/php.ini
memory_limit = 32M
Перезапустим apache
/etc/init.d/apache2 restart
Теперь обновите страничку, все должно заработать :)
Анализ конфигурации OpenLDAP в связке с smbldap-tools
Для наглядного обзора дерева каталогов воспользуемся phpLDAPadmin.
Корень дерева составляется по имени домена. В нашем случае домен drivesource.ru и корень для каталога соответственно dc=drivesource,dc=ru.
Классы для записей такого типа следующие
objectClass: dcObject objectClass: organization
Класс organization является структурным(structural), в то время как dcObject структурным не является(auxiliary).
Каждая запись в дереве каталогов должна в своем составе иметь хотябы один структурный класс.
Подробное описание класса можно посмотреть в phpLDAPadmin в разделе схема или в дереве каталогов напротив каждого класса есть ссылка на описание i.
Следующая ступень в иерархии каталогов это подразедел(ou - organizationalUnit)
objectClass: top objectClass: organizationalUnit
Данные которые интересуют администратора прежде всего это учетные записи пользователей, групп пользователей и компьютеров в домене.
Структура дерева каталогов довольно стандартна и названия подразделов говорит само за себя
# Users, drivesource.ru dn: ou=Users,dc=drivesource,dc=ru objectClass: top objectClass: organizationalUnit ou: Users # Groups, drivesource.ru dn: ou=Groups,dc=drivesource,dc=ru objectClass: top objectClass: organizationalUnit ou: Groups # Computers, drivesource.ru dn: ou=Computers,dc=drivesource,dc=ru objectClass: top objectClass: organizationalUnit ou: Computers # Idmap, drivesource.ru dn: ou=Idmap,dc=drivesource,dc=ru objectClass: top objectClass: organizationalUnit ou: Idmap
До сих пор мы рассматриваем стандартные обьекты которые существовали еще на заре становления протокола LDAP. Все как и 20 лет назад.
Самое интерестное это конечно же записи которые состоят из классов необходимых для UNIX и для SAMBA одновременно.
Это та самая фича ради которой затевался весь сыр бор :)
Итак рассмотрим учетную запись root которая хранится в нашем сервере каталогов.
# root, Users, drivesource.ru dn: uid=root,ou=Users,dc=drivesource,dc=ru cn: root sn: root objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: sambaSamAccount objectClass: posixAccount objectClass: shadowAccount gidNumber: 0 uid: root uidNumber: 0 homeDirectory: /home/root sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaHomePath: \\daemon\root sambaHomeDrive: H: sambaProfilePath: \\daemon\profiles\root sambaPrimaryGroupSID: S-1-5-21-1281770608-2748599951-4138892180-512 sambaSID: S-1-5-21-1281770608-2748599951-4138892180-500 loginShell: /bin/false gecos: Netbios Domain Administrator sambaAcctFlags: [U] shadowLastChange: 14001 shadowMax: 45
Учетная запись root в своем составе имеет классы необходимые для UNIX это posixAccount и shadowAccount.
Класс необходимый для SAMBA это sambaSamAccount. Прочие классы содержат атрибуты с такими данными как имя, фамилия, телефон и т.п.
Атрибуты хранят довольно непонятные значения, так что создавать записи вручную настоятельно не рекомендуется. Но знать что и как хранится в сервере каталогов очень полезно.
Накопленный опыт разработчиков smbldap-tools позволяет нам лекго выполнять административные задачи с использованием сервера каталогов.
Более того стандартной конфигурации достаточно для потребностей широкого круга. Просто берем готовое решение и пользуемся.
Прокси сервер Squid с авторизацией пользователей в OpenLDAP
Необходимо настроить прокси сервер с авторизацией пользователей для учета веб трафика. Учетные записи хранятся в созданном ранее сервере директорий.
Задача очень распространенная, так что желательно поднять прокси с авторизацией как можно скорее. Никаких манипуляций с сервером каталогов
или учетными записями пользователей делать не нужно, просто используем то что уже есть.
Устанавливаем софт
apt-get install squid
Правим файл конфигурации /etc/squid/squid.conf
# секция authparam # у сквида имеется набол хелперов, которые отрабатывают аутентификацию, интерфейс простой. # запускаете бинарный файл с параметрами, он ожидает строки "user password" в бесконечном цикле # если аутентификация будет успешной то напечатает ОК иначе ERR # итак хелпер ldap_auth -b "база поиска" -v версияпротокола -h хост auth_param basic program /usr/lib/squid/ldap_auth -b "ou=Users,dc=drivesource,dc=ru" -v 3 -h daemon auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off # то что мы настроили аутентификацию еще не значит что она применяется # для сквида нужно сформулировать правила доступа ACL похожие на такие же у OpenLDAP # подробно рассматривать не стану, просто приведу рабочий экземпляр # добавим наши правила в конце #Recommended minimum configuration: # my acls acl password proxy_auth REQUIRED # TAG: http_access # my access http_access allow password
Установка BugZilla
Для Ubuntu Server практически все основные компоненты уже установлены.
Скачайте с сайта http://www.bugzilla.org тарбол с багзиллой и русификацией.
На данный момент версия крайней стабильной багзиллы 3.0.4, русификация для нее 3.0.4-ru-1.0.
tar -xzf bugzilla-3.0.4.tar.gz cd bugzilla-3.0.4 ./checksetup --check-modules
Последняя команда выдаст вам информацию о модулях Perl от которых зависит работа багзиллы.
Так же расскажет какие модули обязательны а какие опциональны.
Установка модулей Perl
Мы установим практически все модули.
apt-get install libtemplate-perl libemail-send-perl libemail-mime-modifier-perl \ libgd-graph-perl libgd-text-perl libtemplate-plugin-gd-perl libgd-gd2-perl \ libhtml-scrubber-perl libmail-mboxparser-perl libxml-twig-perl libchart-perl \ perlmagick libsoap-lite-perl libnet-ldap-perl
В этом списке не хватает модулей Email-Reply, Email-MIME-Attachment-Stripper, PatchReader
Они либо отсутствуют в репозитариях Ubuntu либо я их там не нашел.
Запустите еще раз проверку модулей. Убедитесь что все необходимые модули установлены.
Запустим скрипт установки без всяких опций.
./checksetup.pl
Теперь у нас есть конфигурационный файл localconfig в котором необходимо указать параметры установки.
Для Ubuntu группа веб сервера apache2 - www-data, еще укажем пароль пользователя MySQL. Все остальное по дефолту.
$webservergroup = 'www-data'; $db_driver = 'mysql'; $db_host = 'localhost'; $db_name = 'bugs'; $db_user = 'bugs'; $db_pass = 'password';
Настроим сервер MySQL
Добавим в файл /etc/mysql/my.cnf в секции [mysqld] опцию для оптимизации индексирования
[mysqld] # Allow small words in full-text indexes ft_min_word_len=2
Сервер MySQL после этого необходимо перезапустить.
/etc/init.d/mysql restart
Создадим учетную запись багзиллы для базы данных MySQL.
mysql -u root -p mysql> GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, LOCK TABLES, CREATE TEMPORARY TABLES, DROP, REFERENCES ON bugs.* TO bugs@localhost IDENTIFIED BY 'password'; mysql> FLUSH PRIVILEGES; mysql> \q
Настройка Apache
Создадим файл /etc/apache2/conf.d/bugz следующего содержания
<Directory /var/www/bugz> AddHandler cgi-script .cgi Options +Indexes +ExecCGI DirectoryIndex index.cgi AllowOverride Limit </Directory>
Необходимо рестартовать веб сервер.
/etc/init.d/apache2 restart
Завершение установки bugzilla
Вернемся в папку содержащую скрипты bugzilla и запустим скрипт checksetup.pl для завершения устновки.
./checksetup.pl Enter the e-mail address of the administrator: admin@drivesource.ru Enter the real name of the administrator: Admin Enter a password for the administrator account: Please retype the password to verify:
Теперь когда база данных MySQL создана и первоначальный администратор создан можно вытащить багзиллу для доступа через веб.
cd .. mv bugzilla-3.0.4 bugz mv bugz /var/www chown -R www-data.www-data /var/www/bugz
Теперь багзилла должна работать по адресу http://yourserver/bugz
Аутентификация учетных записей Bugzilla в OpenLDAP
Прежде чем править настройки багзиллы необходимо залогиниться администратором - admin@drivesource.ru
После логина перейдем по ссылке Parameters, в разделе LDAP заполним следующими значениями
LDAPserver localhost LDAPstarttls off LDAPbinddn LDAPBaseDN ou=Users,dc=drivesource,dc=ru LDAPuidattribute uid LDAPmailattribute mail LDAPfilter (objectClass=posixAccount)
Для сохранения изменений нажмите кнопку Save Changes внизу
Теперь в разделе User Authentication
user_verify_class LDAP,DB
Сохраните изменения, теперь попробуйте залогиниться с учетной записью из сервера каталогов.
Обратите внимание что при аутентификации через OpenLDAP указываете логин а не адрес электронной почты.
ru_RU.UTF-8 - локализация
Вся локализация заключается в установке шаблонов багзиллы переведенных на русский язык.
Скачать свежие переводы можно по адресу http://sourceforge.net/projects/bugzilla-ru/
wget http://dfn.dl.sourceforge.net/sourceforge/bugzilla-ru/bugzilla-3.0.4-ru-1.0.tar.gz tar -xzf bugzilla-3.0.4-ru-1.0.tar.gz mv bugzilla-3.0.4-ru-1.0/help/ /var/www/bugz/ mv bugzilla-3.0.4-ru-1.0/template/ru/ /var/www/bugz/template/ chown -R www-data.www-data /var/www/bugz
В настройках локализации багзиллы Parameters->Localization
languages ru, en defaultlanguage en
Сохраните настройки.
Samba
Для тех кто хочет таки управлять сервером с пониманием того как и что происходт настоятельно рекомендую прочитать Samba Official How-to очень полезное чтиво.
В общем случаем сервер samba про пользователей ldap знаем мало, разработчики оставили это на совести хост системы.