Ubuntu 12.04 OpenLDAP Samba3
Материал из Xgu.ru
Данная статья рассчитана на начинающих, она позволит «с нуля» настроить OpenLDAP и интегрировать с ним Samba 3. Является объединением знаний из статей Домен на Samba и OpenLDAP в Ubuntu 12.04 (с ошибками в статье, о которых автору написали в комментариях, но он их так и не исправил) и Samba and LDAP, в которой до сих пор не исправили ошибку.
Необходимо умение работы с терминалом, например по этой статье.
Команды в статье начинаются с символа «$» — его вводить не надо, это приветствие терминала, нужно чтобы в статье отличить вводимую команду от вывода.
Содержание |
[править] editor
В статье везде для редактирования используется команда editor — она является ссылкой на ваш любимый консольный редактор. Поменять его можно командой:
$sudo update-alternatives --config editor
[править] Перед установкой
Обязательно обновляем информацию о пакетах в репозитории:
$sudo apt-get update
[править] Выбор FQDN
Необходимо, чтобы у сервера с OpenLDAP было FQDN — полностью определённое имя, т.е. в частном случае, имя сервера + имя домена. В качестве примера, здесь будет использован домен example.com и имя сервера dc1, то есть получается полное имя: dc1.example.com.
- Не рекомендуется использовать .local, т.к. это имя зарезервировано, и могут возникнуть проблемы с некоторыми службами ([1]).
- Если вы не знаете, какое выбрать имя домена, оставьте example.com.
Редактируем файл hosts:
$sudo editor /etc/hosts
Добавляем (или заменяем) строку:
127.0.1.1 dc1.example.com dc1
Убедимся, что настройка применилась:
$hostname -f
должно выдать полное имя — в данном примере, dc1.example.com
[править] slapd
Установим OpenLDAP и утилиты для него:
$sudo apt-get install slapd ldap-utils
На запрос при установке, вводим новый пароль администратора. Далее в статье, заменяем «MYSECRETPASSWORD» на введённый здесь пароль.
Для проверки работоспособности OpenLDAP, добавим индексы (можно будет сделать позже вместе с Samba):
$editor uid_index.ldif
Заполняем следующими данными:
dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: uid eq,pres,sub
Вносим:
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f uid_index.ldif
Проверяем:
$sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(olcDatabase={1}hdb)' olcDbIndex dn: olcDatabase={1}hdb,cn=config olcDbIndex: objectClass eq olcDbIndex: uid eq,pres,sub
[править] ACL
По-умолчанию, slapd в Ubuntu заполняется минимально необходимыми правилами. Проверим их:
$sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(olcDatabase={1}hdb)' olcAccess dn: olcDatabase={1}hdb,cn=config olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by self write by dn="cn=admin,dc=example,dc=com" write by * read
[править] Samba
$sudo apt-get install samba samba-doc smbldap-tools $sudo cp -p /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema $sudo gzip -d /etc/ldap/schema/samba.schema.gz $zcat /usr/share/doc/samba/examples/LDAP/samba.ldif.gz > samba.ldif
Вносим в LDAP:
$sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f samba.ldif adding new entry "cn=samba,cn=schema,cn=config"
Проверяем:
$sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config 'cn=*samba*'
Создаём индексы, чтобы Samba быстрее забирала данные из LDAP:
$editor samba_indices.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
(строка закомментирована знаками «###», т.к. выше в статье уже добавлялись эти индексы)
$sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f samba_indices.ldif modifying entry "olcDatabase={1}hdb,cn=config"
Проверяем, что индексы добавились:
$sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase={1}hdb olcDbIndex
[править] smbldap-tools
Смотрим уникальный номер созданного вами домена — SID (сохраняем его куда-нибудь в блокнот):
$net getlocalsid SID for domain DC1 is: S-1-5-21-1267572584-417879462-430437081
Примеры конфигураций можно распаковать, можно просто скопировать прямо из статьи.
$sudo -s #zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf #cp -p /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf #exit
$sudo editor /etc/smbldap-tools/smbldap.conf
Приводим файл к такому виду (SID вводим тот, который запомнили ранее):
SID="S-1-5-21-1267572584-417879462-430437081" sambaDomain="DC1" masterLDAP="dc1.example.com" masterPort="389" ldapTLS="0" ldapSSL="0" verify="none" cafile="/etc/smbldap-tools/ca.pem" clientcert="/etc/smbldap-tools/smbldap-tools.example.com.pem" clientkey="/etc/smbldap-tools/smbldap-tools.example.com.key" suffix="dc=example,dc=com" usersdn="ou=Users,${suffix}" computersdn="ou=Computers,${suffix}" groupsdn="ou=Groups,${suffix}" idmapdn="ou=Idmap,${suffix}" sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}" scope="sub" password_hash="SSHA" password_crypt_salt_format="%s" userLoginShell="/bin/bash" userHome="/home/%U" userHomeDirectoryMode="750" userGecos="System User" defaultUserGid="513" defaultComputerGid="515" skeletonDir="/etc/skel" shadowAccount="1" defaultMaxPasswordAge="45" userSmbHome="\\DC1\%U" userProfile="\\DC1\profiles\%U" userHomeDrive="H:" userScript="logon.bat" mailDomain="example.com" with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" with_slappasswd="0" slappasswd="/usr/sbin/slappasswd"
$sudo editor /etc/smbldap-tools/smbldap_bind.conf
Добавляем в него пароль администратора домена:
masterDN="cn=admin,dc=example,dc=com" masterPw="MYSECRETPASSWORD"
Исправляем ошибку «Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423, <DATA> line 522»:
$sudo editor /usr/share/perl5/smbldap_tools.pm
заменяем (строка 1423)
$sig_name qw(ALRM INT HUP QUIT TERM TSTP TTIN TTOU) {
на
$sig_name (qw(ALRM INT HUP QUIT TERM TSTP TTIN TTOU)) {
Можно сразу заполнить LDAP данными для Samba:
$sudo smbldap-populate -a admin
а можно создать ldif-файл, отредактировать и внести его. Параметр -a позволяет указать local administrator login name (default: root).
$sudo smbldap-populate -a admin -e samba.ldif
Можно отредактировать samba.ldif, чтобы задать uidNumber и gidNumber для пользователя admin, заодно завести такого же в linux (он нам понадобится позже для команды net rpc join -U admin):
$addgroup --gid 10000 admin $adduser --uid 10000 --gid 10000 --gecos "Samba admin" admin
$sudo smbldap-populate -a admin -i samba.ldif Populating LDAP directory for domain DC1 (S-1-5-21-1267572584-417879462-430437081) entry dc=example,dc=com already exist. adding new entry: ou=Users,dc=example,dc=com adding new entry: ou=Groups,dc=example,dc=com adding new entry: ou=Computers,dc=example,dc=com adding new entry: ou=Idmap,dc=example,dc=com adding new entry: sambaDomainName=DC1,dc=example,dc=com adding new entry: uid=admin,ou=Users,dc=example,dc=com adding new entry: uid=nobody,ou=Users,dc=example,dc=com adding new entry: cn=Domain Admins,ou=Groups,dc=example,dc=com adding new entry: cn=Domain Users,ou=Groups,dc=example,dc=com adding new entry: cn=Domain Guests,ou=Groups,dc=example,dc=com adding new entry: cn=Domain Computers,ou=Groups,dc=example,dc=com adding new entry: cn=Administrators,ou=Groups,dc=example,dc=com adding new entry: cn=Account Operators,ou=Groups,dc=example,dc=com adding new entry: cn=Print Operators,ou=Groups,dc=example,dc=com adding new entry: cn=Backup Operators,ou=Groups,dc=example,dc=com adding new entry: cn=Replicators,ou=Groups,dc=example,dc=com Please provide a password for the domain admin: Changing UNIX and samba passwords for admin New password: Retype new password:
Настраиваем Samba:
$sudo mkdir /var/log/samba/workstations $sudo editor /etc/samba/smb.conf
Заполняем конфигурацию:
[global] server string = workgroup = MAIN netbios name = dc1 passdb backend = ldapsam:ldap://dc1.example.com obey pam restrictions = no security = user encrypt passwords = yes unix extensions = no local master = yes os level = 255 domain master = yes preferred master = yes time server = yes admin users = admin log level = 1 log file = /var/log/samba/workstations/%m.log max log size = 50 getwd cache = yes read raw = yes write raw = yes max xmit = 65536 wins support = yes dns proxy = no name resolve order = wins hosts bcast lmhosts wide links = yes hosts allow = 192.168. 127.0.0.1 127.0.1.1 ldap suffix = dc=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 = off ldap passwd sync = yes ldap delete dn = no add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w "%u" passwd program = /usr/sbin/smbldap-passwd %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated* domain logons = yes load printers = no logon script = startup.bat logon path = [netlogon] path = /home/samba/netlogon read only = yes browseable = no
Исправляем ошибку «Failed to execute: /usr/sbin/smbldap-passwd.cmd: No such file or directory at /usr/sbin/smbldap-useradd line 668»:
$sudo ln -s /usr/sbin/smbldap-passwd /usr/sbin/smbldap-passwd.cmd
Применяем новую конфигурацию перезапуском процессов Samba:
$sudo restart smbd $sudo restart nmbd
Отдаём samba пароль LDAP-администратора (rootDN)?
$sudo smbpasswd -w MYSECRETPASSWORD Setting stored password for "cn=admin,dc=example,dc=com" in secrets.tdb
(TODO: лучше наверно так, чтобы не светить пароль: sudo smbpasswd admin — но не работает, выдаёт ldap_connect_system: Failed to retrieve password from secrets.tdb)
Добавим нового пользователя:
$sudo smbldap-useradd -a -P user1 $sudo smbldap-useradd -a -P user2
[править] Интеграция с ОС
Такие действия проводим как на сервере, так и на клиентах (на них будет ldap://dc1.example.com/)
$sudo apt-get install libnss-ldap
Отвечаем на вопросы:
- LDAP server Uniform Resource Identifier: ldap://127.0.0.1/ (или оставить ldapi:/// для работы через локальный сокет?)
- 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:
Эти изменения будут сохранены в /etc/ldap.conf (в Debian — в /etc/libnss-ldap.conf)
Пароль к rootbinddn сохраняется в сыром виде в /etc/ldap.secret
Если ошиблись, настраиваем заново с помощью команды sudo dpkg-reconfigure ldap-auth-config
$sudo auth-client-config -t nss -p lac_ldap $sudo pam-auth-update
Активируемые профили PAM: Unix authentication, LDAP Authentication
Проверяем: команда
$getent passwd
должна выдать и системных пользователей, и пользователей user1 и user2 из LDAP.
Здесь, возможно, понадобится перезагрузка — надо перепроверить и поправить статью (TODO).
Вводим в домен:
$sudo net rpc join -U admin Enter admin's password: Joined domain MAIN.
Если перед этим не создать системного пользователя admin, то получим ошибку smbd: Failed to find a Unix account for admin User admin in passdb, but getpwnam() fails!
Делаем группу «Domain Admins» настоящими администраторами:
$sudo net rpc rights grant "Domain Admins" SeMachineAccountPrivilege SeTakeOwnershipPrivilege SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege -Uadmin Enter admin's password: Successfully granted rights.
[править] Автоматическое создание домашних директорий
Создаём файл /usr/share/pam-configs/my_mkhomedir:
Name: Create home directory during login Default: yes Priority: 900 Session-Type: Additional Session: required pam_mkhomedir.so umask=0022 skel=/etc/skel
(файл не нужно будет создавать, когда закроют «пожелание» #568577)
Применяем:
$sudo pam-auth-update
[править] Версии ПО
Если используется не Ubuntu 12.04, то данная статья была проверена для следующих версий программ:
- slapd 2.4.28;
- samba 3.6.3;
- ldap-utils 2.4.28;
- smbldap-tools 0.9.7.
[править] TODO
- Для сверки паролей принято заводить proxyuser (http://www.bog.pp.ru/work/LDAP.html)
- SSL
[править] Лицензия на текст
Текст доступен на условиях лицензии Creative Commons Attribution/Share-Alike версии 3.0 или более новой.
[править] Материалы по LDAP на xgu.ru
- LDAP
- Схема LDAP
- LDAP-репликация и Samba
- Squid и LDAP
- Sudo и LDAP
- Jabber и LDAP
- Apache и LDAP
- RADIUS и LDAP
- Asterisk и LDAP
- man-страницы:
- man:ldapadd — добавление записей
- man:ldapdelete — удаление записей
- man:ldapmodify — модификация записей
- man:ldapmodrdn — переименование записей
- man/ldapsearch — поиск записей
Серверы LDAP: