Данная статья посвящена настройке Samba 3 в качестве основного контроллера домена (PDC), все записи о пользователях которой хранятся в LDAP-каталоге. Преимущества подобной организации очевидны - упрощение управления пользователями, возможность делегирования полномочий по управлению пользователями в домене, повышение отказоустойчивости системы.
Процесс установки производился на Alt Linux Master 2.2. Поэтому есть много специфических деталей в описании, касающиеся именно данного дистрибутива, но тем не менее, на основе данной статьи можно поднять данную схему на любом другом дистрибутиве.
Статья разбита на несколько частей. Первоначально будет вкратце описана установка и настройка OpenLDAP. Затем будет описана установка и настройка Samba 3. Ну а далее последует подробное описание каким образом создавать и управлять пользователями в домене.
·OpenLDAP
Установка
Процесс установки OpenLDAP уже описывался [link], поэтому заострять на этом внимания не буду. Важно отметить что при установке openldap из rpm не забудьте про devel-пакеты (libldap-devel), они потребуются для сборки samba3.
Конфигурация
Пример конфигурации slapd.conf также уже приводился [link]. Но поскольку описываемый процесс установки производится на Alt Linux Master 2.2, а также для того чтобы данная статья обрела некоторый статус самостоятельности (без зависимостей :), я опишу конфигурацию сначала, включая специфические моменты касающиеся samba3.
Также в данной конфигурации я расскажу как поднять ldap через ssl, поскольку наиболее вероятна ситуация когда ldap-сервер и samba-сервер расположены на различных компьютерах и трафик между ними проходит по общедоступной сети, а следовательно должен быть защищён от разного рода кул-хацкеров.
1. /etc/openldap/slapd.conf
#-----------------------slapd.conf-----------------------------------# include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/openldap.schema # Последняя схема samba.schema прилагается вместе с исходниками samba3 # Есть значительные отличия схемы samba2 от схемы samba3, # поэтому использовать нужно именно схему samba3 include /etc/openldap/schema/samba.schema
# Здесь включается ssl TLSCipherSuite HIGH:MEDIUM:+SSLv2:+TLSv1 TLSCertificateFile /etc/openldap/ldap.pem TLSCertificateKeyFile /etc/openldap/ldap.pem
database ldbm suffix "dc=home,dc=ru" rootdn "cn=root,dc=home,dc=ru" # Пароль rootpw лучше всего указывать в зашифрованном виде. # Для генерации шифрованного пароля используйте утилиту slappasswd # Например: slappaswd -h {crypt} rootpw {crypt}7Ly54RT33kms9.
directory /var/lib/ldap/bases # Для начала неплохо указать высокий уровень отладки, чтобы было проще разобраться, # если что-то пойдёт не так. loglevel 256
index objectClass,uid,uidNumber,gidNumber eq index cn,mail,surname,givenname eq,subinitial # Для samba3 также рекомендуются добавить эти индексы: index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq
# Basic ACL access to attr=userPassword by self write by anonymous auth by * none
# Доступ к smb-паролям пользователей только админу самбы crux access to attrs=lmPassword,ntPassword by dn="cn=crux,ou=Users,dc=home,dc=ru" write by * none
Несколько слов об ssl. Чтобы включить поддержку ssl, в системе должен быть установлен пакет openssl, а также libssl и libssl-devel (последний потребуется для сборки samba). Потребуется создать self-signed сертификат ldap.pem и выложить его в каталог /etc/openldap. Важно проследить, чтобы права на этот файл были - 400, и принадлежать он должен пользователю под которым работает OpenLDAP (в данном дистрибутиве - пользователь ldap). В состав пакета openldap-servers входит утилита gencert.sh (/usr/share/openldap/gencert.sh), с помощью которой можно создать сертификат. После того как вы настроили OpenLDAP, запустите его командой `service ldap start`. Можно проверить слушает ли сеть наш сервер, запустив команду:
Как видно slapd слушает порты 389 и 636 - последний как раз относится к соединению через защищёный канал ssl.
·Samba 3
Что нового появилось в Samba 3 версии: · Несколько схем хранения пользовательских аккаунтов (backends). · Включена поддержка Kerberos 5 аутентификации и LDAP, что позволяет самбе нативно входить в Active Directory домен (как клиент). · Поддержка Unicode. · Полная поддержка Windows NT4 domain trusts.
Надо отметить, что активно деклалируемая "поддержка Active Directory" в Samba3, означает, что Samba3 может входить в домен Active Directory как полноценный member (не буду употреблять русского аналога этого слова). Но это не значит, что Samba3 может выполнять роль сервера AD. Также по прежнему Samba не может быть полноценным BDC для PDC под Windows NT и наоборот, поскольку пока не реализована поддержка репликации SAM баз пользователей между Samba и NT.
Установка
В дистрибутиве Alt Master 2.2 присутствует пакет samba3, но он уже достаточно старый и собран без поддержки ldap. Поэтому есть два варианта действий: скачать последнюю версию сырцов samba с samba.org (на момент написания статьи это samba-3.0.1) или взять последнюю версию source-rpm пакета из Sisyphus. Правильнее, конечно, последний вариант, но попытка установить на Master2.2 что-либо из Сизифа может повлечь значительное обновление пакетов в системе. Поэтому я предпочёл взять source-rpm пакет samba3 пересобраный из Сизифа для Master2.2. Найти его можно здесь: ftp://212.13.100.3/pub/shrek/ALTLinux/samba3 . На момент написания статьи это был samba3-3.0-alt46.1m.src.rpm
1. Сборка samba3 из src.rpm пакета
Сборка source-rpm в Master'е производится под непривилегированным пользователем. Хочу отметить, что даже переделанный пакет под Master был сделан не совсем корректно. Обнаружились две "неудовлетворяемые" зависимости: требовались пакеты db2latex-xsl и kernel-headers-std, которых нет в Мастере. Как мне пояснили в рассылке altlinux первый пакет необходимо было взять из Сизифа, а чтобы ликвидировать 2-ую зависимость надо ручками исправить spec-файл, прописать вместо kernel-headers-std - kernel24-headers. Для этого:
$ rpm -ivh samba3-3.0-alt46.1m.src.rpm $ cd ~/RPM/SPECS $ vi samba3.spec Ищите в этом файле вхождение пресловутой строки "kernel-headers-std" и меняете на "kernel24-headers". Далее $ rpm -bb --with ldap samba3.spec
После сборки пакетов, нужно установить samba3. $ cd ../RPMS/i686 $ su # rpm -ivh samba3-common-3.0-alt46.1m.i686.rpm samba3-3.0-alt46.1m.i686.rpm \ samba3-client-3.0-alt46.1m.i686.rpm samba3-vfs-3.0-alt46.1m.i686.rpm \ samba3-doc-3.0-alt46.1m.i686.rpm
2. Сборка из сырцов с samba.org
Если вы решили собирать samba из сырцов, то процедура эта достаточно стандартная, важно чтобы в системе были devel-пакеты openldap, чтобы требуемая поддержка ldap была реализована.
$ tar zxf samba-3.0.1.tar.gz $ cd samba-3.0.1/source $ ./configure --with-ldap (...другие опции на ваш вкус...) $ make $ su # make install
Конфигурация
Приводить весь конфигурационный файл не имеет смысла, будут указаны лишь необходимые параметры, которые необходимы для работы Samba в качестве PDC с поддержкой LDAP.
1. Конфигурационный файл samba.conf [global] workgroup = HOMENET netbios name = HOME security = user admin users = crux
# В качестве базы данных пользователей-паролей используется ldap, # причём соединяемся с сервером ldap через TLS
[netlogon] comment = Network Logon Service path = /var/lib/samba/netlogon browseable = no guest ok = yes writable = no share modes = no
[Profiles] path = /var/lib/samba/profiles browseable = no guest ok = yes writeable = yes ; Для нормальной работы w2kSP2 убираем поддержку nt acl в профиле nt acl support = no
После редактирования файла, можно проверить его коррестность командой `testparm`. Если есть какие-то ошибки, то они будут обозначены в выводе команды. Конфигурационный файл готов и можно запускать samba.
Samba подключается к ldap под аккаунтом администратора ldap (cn=root,dc=home,dc=ru), поэтому необходимо сообщить ей пароль этого аккаунта. Делается это следующей командой: # smbpasswd -w PASSWORD
·Создание базовой схемы и добавление пользователей
В samba 3 применяется новая схема samba.schema и есть определённые отличия от схемы, применявшейся в samba 2-ой версии. Если есть какие-то причины, по которым вы хотите использовать старую схему в samba3, то такая возможность существует, требуется лишь собирать samba с опцией --with-ldapsam. Но не рекомендую... Далее я буду описывать лишь новую схему.
Есть ещё один весьма важный момент. Несмотря на то, что информация о пользователях samba будет хранится в ldap, необходимо по прежнему заводить системных пользователей для каждого пользователя samba и аккаунтов компьютеров. Если вспомнить схему без использования ldap, то было тоже самое, пользователи прописывались в двух местах: системные в passwd, а пользователи самба в smbpasswd. В схеме с ldap перестаёт использоваться smbpasswd, но системные аккаунты по прежнему нужны. Конечно наличие системного аккаунта не страшно, ведь он добавляется всего лишь один раз, и все последующие операции над пользователем samba производятся в ldap каталоге. Но это может быть очень неудобно, если вы планируете для отказоустойчивости использовать второй контроллер домена (BDC). Придётся дублировать системные учётные записи на двух компьютерах, что может свести на нет все преимущества схемы с ldap. Чтобы не заводить системных аккаунтов и полностью хранить информацию о пользователях (как пользователей samba так и системных) в LDAP, необходимо воспользоваться замечательной библиотекой nss_ldap и модулем pam_ldap. Как это сделать будет рассказано в следующей главе статьи, а пока будет описан общий процесс создания записей.
Итак, следующий древовидную схему требуется поместить в ldap, для работы с samba:
Внутри главного контейнера dc=home,dc=ru создаются ещё три: Users - для хранения пользовательских аккаунтов, Group - группы, Computers - аккаунты компьютеров в домене.
Получаем следующий ldif-файл base.ldif:
dn: dc=home,dc=ru objectClass: dcObject objectclass: organization dc: home o: home
Запишем его в ldap: # ldapadd -W -x -D "cn=root,dc=home,dc=ru" -f base.ldif
Замечание: Для упрощения добавления записей в ldap, в том числе и для добавления базовой схемы я бы порекомендовал использовать замечательный набор тулзов smbldap-tools (idealx.org), которые поставляется вместе с самбой.
Теперь перейдём к заполнению базы пользователями и группами. Пользовательский аккаунт для самбы использует два основных объектных класса: posixAccount и sambaSamAccount. Аккаунт группы: posixGroup, sambaGroupMapping.
Прежде всего должны быть созданы два пользователя: администратор и гость. А также соотвествующие им группы администраторов и гостей домена. Также необходимо создать группу пользователей домена, которой будут принадлежать все обычные пользователи. Для создания этих аккаунтов потребуется задать специфические атрибуты: sambaPrimaryGroupSID и sambaSID. (SID в windows NT является неким аналогом UID в UNIX). Для того чтобы знать, что писать в качестве значений этих аттрибутов необходимо знать SID нашего домена, который можно получить по команде: # net getlocalsid S-1-5-21-3153401187-884309351-300090610
Отсюда получаем такие значения для администратора домена: sambaPrimaryGroupSID: S-1-5-21-3153401187-884309351-300090610-512 sambaSID: S-1-5-21-3153401187-884309351-300090610-500
Для гостя домена: sambaPrimaryGroupSID: S-1-5-21-3153401187-884309351-300090610-514 sambaSID: S-1-5-21-3153401187-884309351-300090610-501
Для группы пользователей домена: sambaPrimaryGroupSID: S-1-5-21-3153401187-884309351-300090610-513
Запишем это в ldap: # ldapadd -W -x -D "cn=root,dc=home,dc=ru" -f user.ldif
После этого потребуется создать три группы (системные), например, smbadmins, smbguests и smbusers, с соотвествующими gid (1000 - 1002), ну и пользователя crux, входящего в группу c gid=1000.
Следующим шагом требуется задать пароль администратора самбы: # smbpasswd crux
Замечу также, что после выполнения данной команды устанавливается не только пароль для пользователя crux, но также прописывается запись в ldap-каталоге о нашем домене dn: sambaDomianName=HOMENET,dc=home,dc=ru
Теперь необходимо провести соотвествие между unix-группами и NT-группами, хранящимися в LDAP. # net groupmap add sid=S-1-5-21-3153401187-884309351-300090610-512 unixgroup=smbadmins type=domain # net groupmap add sid=S-1-5-21-3153401187-884309351-300090610-513 unixgroup=smbusers type=domain # net groupmap add sid=S-1-5-21-3153401187-884309351-300090610-514 unixgroup=smbguests type=domain
Всё. Можно попробовать подключиться в домен с любого win-клиента. Следует также помнить, что при включении win2k/NT/XP в домен необходимо также создавать аккаунт компьютера. Делается это так:
где machine_name - это NetBIOS имя компьютера (обратите особое внимание на значок `$` при добавлении системного пользователя и его отсутствие при добавлении в LDAP).
Также важно, что при включении машин с win2k/NT/XP в домен, винда попросит ввести логин и пароль аккаунта имеющего права на подключение к домену. Это должен быть аккаунт администратора домена (в нашем примере, crux).
Добавление обычных пользователей происходит абсолютно так же как и обычно: # useradd -g smbusers -d /home/user -c "new user" -s /bin/false user # passwd -l user # smbpasswd -a user
·Удалённое администрирование Samba
В Samba3 появилась уникальная возможность управления пользователями посредством стандартного набора утилит M$ SRVTOOLS ( ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTO… ), которые обычно используется для управления NT-доменом. Чтобы бы это было возможно, необходимо лишь добавить следующие строки в конфигурацию smb.conf:
[global] ... ... add user script = /usr/sbin/useradd %u add group script = /usr/sbin/groupadd %g add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u delete user script = /usr/sbin/userdel %u delete user from group script = /usr/sbin/deluser %u %g delete group script = /usr/sbin/groupdel %g
Теперь с любой win машины (в домене) можно войти под аккаунтом администратора самбы и производить все возможные действия над аккаунтами в домене Samba. Что можно про это сказать - фантастика!
·Использование nss_ldap, pam_ldap для хранения системных пользователей в ldap
Как я говорил, определённое неудобство может вызвать обязательное наличие системных аккаунтов в системе. Чтобы хранить системных пользователей в LDAP, должны быть установлены пакеты nss_ldap и pam_ldap, ну а также nscd (для кэширования лукапов).
Вся дальнейшая информация относится исключительно к дистрибутиву Alt Linux Master 2.2, поскольку настройка этого дистрибутива для работы c nss_ldap и pam_ldap очень специфична, а любая ошибка может привести к невозможности либо загрузить Линукс или войти в систему.
1. /etc/nsswitch.conf В этом файле необходимо изменить 3 строки. Важно чтобы слово ldap не стояло первым в списке, поскольку в Master2.2 есть большой глюк в такой раскладке. Рекомендую такой вариант:
3. /etc/ldap.secret - здесь должен содержаться пароль администратора ldap в plain-виде и с обязательным переносом строки в конце строки пароля. Права на файл root:root 400.
После данных операций вы получите систему, в которой пользователи могут содержаться как в системных файлах /etc/passwd , так и в ldap. Для добавления пользователей samba предварительно потребуется создавать в ldap posixAccount (либо создавая ldif-файл, либо оперируя специальными утилитами, например, те же ldap-tools Григория Ситкарева). После чего командой smbpasswd задавать пользователя samba.
·Утилита net
Для управления Samba и удалёнными CIFS серверами можно использовать утилиту net, которая теперь входит в состав пакета samba3. О полном списке её возможностей можно ознакомиться на man-страницах net. Упоминаю её здесь, потому что для некоторых операций: net user|group .. , будет запрашиваться пароль пользователя root. Соотвественно при использовании схемы с LDAP вам потребуется поместить в LDAP учётную запись пользователя root и задать для неё nt-пароль. Важно что у пользователя root аттрибуты sambaSID, sambaPrimaryGroupSID должны иметь вид: sambaSID: DOMAINSID-1000 sambaPrimaryGroupSID: DOMAINSID-1001
Связано это с тем, что ldapsam использует специальный алгоритм для связи uid с sid: rid='2*uidNumber+1000' primaryGroup='2*uidNumber+1001'
Соотвественно при uid,gid=0 получаем значения 1000 и 1001.
После этого при использовании утилиты net в качестве пароля root надо вводить именно тот пароль который вы задали утилитой smbpasswd (но никак не пароль системного пользователя root :).
·Утилита pdbedit
Утилита pdbedit служит для управления пользовательскими аккаунтами в SAM-базе (независимо от типа бекэнда: tdb, ldap, smbpasswd..). Она может служить хорошей заменой smbpasswd. Здесь я опишу несколько полезных опций при работе с этой утилитой:
# показывает список всех пользователей pdbedit -L
# более информативный листинг pdbedit -L -v
# добавление пользователя USER pdbedit -a -u USER
# добавление аккаунта машины machine pdbedit -a -m -u machine
# установка сетевого пути к домашнему каталогу пользователю USER pdbedit -h "\\\\HOME\\USER" -u USER
# сетевой путь к скрипту подключения пользователя USER pdbedit -s "\\\\HOME\\netlogon\\USER.cmd" -u USER
# полное имя пользователя pdbedit -f "USER of HOME" -u USER
С другими опциями можно ознакомиться в man pdbedit.