Короткое вступление:
значит, был озадачен поднятием PDC сети Windows на базе Ubuntu Linux, для возможной замены в будущем работающего "левого" Windows Server 2003 + AD;
Сетка у нас не большая - около 70 машин, AD используется только как хранилище пользователей и компьютеров;
Поэтому было принято волевое решение посмотреть на "NT4 контроллер домена на базе Samba", хранить все записи решил в LDAP.
Да, и обязательным условием схемы было наличие графического интерфейса для управления учетными записями полученного домена - т.к. Windows - админы, как правило, от командной строки впадают в ступор

... да и самому иногда удобнее "картинку посмотреть"

Сразу отмечу - что описанная ниже операция не принесла успеха на ubuntu server 6.06TLS & ubuntu server 6.10 - из-за неразрешенного бага с libnss-ldap (сейчас под рукой ссылки нет, суть - nss не может установить связь с ldap-сервером); поэтому пришлось скачать ubuntu 7.04 server и ставить на нём;
При установке и настройке использовал следующие ресурсы:
http://www.islandlinux.org/HOWTO/openldap_samba.htmlhttp://www.nomis52.net/?section=docs&page=samldaphttp://ru.opensuse.org/Howto_setup_SUSE_as_SAMBA_PDC_with_OpenLDAP,_DYNDNS_and_CLAMhttp://gentoo-wiki.com/HOWTO_LDAP_SAMBA_PDC_Basic_Evaluationнаиболее полное руководство - последнее, от gentoo (я его еще продолжаю курить

)
Здесь я приведу шаги по настройке "простого" домена, используя samba + ldap (пользователи вводятся, компьютеры в домен входят).. т.е. - база; шифрование передаваемых паролей, оптимизация работы сервера, настройка samba - это мне еще предстоит сделать; на часть этих вопросов дает ответ хау-ту от гентушников
Замечания/комментарии/найденные у меня ошибки - только приветствуются, человек в этих технологиях я новый, многое сделано по шаблону; дока выкладывается по просьбе некоторых участников форума;
1. Первоначальная установка Перед установкой рекомендуется «сделать» root'у пароль:
sudo passwd root
Установка OpenLDAP+Samba+утилиты smbldap-tools:
sudo apt-get install slapd ldap-utils libnss-ldap libpam-ldap samba smbldap-tools smbclient samba-doc
При установке запросят базовую конфигурацию следующие пакеты:
slapd: пароль администратора; здесь все понятно
libnss-ldap:
ldap://127.0.0.1/
dc=domain,dc=net
LDAP v.: 3
LDAP Root: cn=manager,dc=domain,dc=net
password: secret_word
libpam-ldap - там все по умолчанию;
2. Натройка В /etc/default/slapd нужно добавить:
SLAPD_SERVICES= «ldap://127.0.0.1:389 ldaps://127.0.0.1/»
Далее, нужно скопировать необходимые схемы в /etc/ldap/schema
cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
gzip -d /etc/ldap/schema/samba.schema.gz
Затем приводим файл конфигурации /etc/ldap/slapd.conf в соответсвующий вид (*с рядом параметров пока не разобрался, они оставлены со значениями по умолчанию):
# Схемы и определения объектов
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
include /etc/ldap/schema/misc.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel 256 # статистика, подключения/операции/результаты (подробнее man slapd.conf
modulepath /usr/lib/ldap
moduleload back_bdb
sizelimit 500 # максимальное число записей, возвращаемое при поиске; по дефолту – 500; возможно установление unlimited
tool-threads 1 # зависит от кол-ва процессоров, по дефолту = 1
password-hash {MD5}
# Определение хранилища для наших данных
database bdb
suffix "dc=domain,dc=net"
rootdn "cn=manager,dc=zstm,dc=ru"
rootpw {MD5}FCaLRd/0ODcd+lX4PPsV0A== # Хэш пароля можно получить выполнив:
directory "/var/lib/ldap"
dbconfig set_cachesize 0 2097152 0
# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500
# Параметры индексирования для определенной базы;
index objectClass eq
index cn pres,sub,eq
index sn pres,sub,eq
index uid pres,sub,eq
index displayName pres,sub,eq
index uidNumber eq
index gidNumber eq
index memberUid eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub
# Save the time that the entry gets modified, for database #1
lastmod on
access to attrs=userPassword,sambaNTPassword,sambaLMPassword
by dn="cn=manager,dc=domain,dc=net" write
by anonymous auth
by self write
by * none
access to *
by dn="cn=manager,dc=domain,dc=net" write
by self write
by * read
Хэш пароля можно получить, выполнив:
slappasswd -h {MD5}
После сохранения конфига перезапускаем slapd:
/etc/init.d/slapd restart
Далее, настраиваем smbldap-tools, для этого нужно скопировать файлы:
cd /usr/share/doc/smbldap-tools/examples/
cp smbldap_bind.conf /etc/smbldap-tools/
cp smbldap.conf.gz /etc/smbldap-tools/
gzip -d /etc/smbldap-tools/smbldap.conf.gz
Для правки smbldap.conf необходимо узнать SID системы:
net getlocalsid
Узнав SID, правим /etc/smbldap-tools/smbldap.conf
# SID, находится командой net getlocalsid
SID="S-1-5-21-2922564939-1893613160-4090112378"
sambaDomain="DOMAIN"
##############################################################################
#
# LDAP Configuration
#
##############################################################################
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
# Use TLS for LDAP
# If set to 1, this option will use start_tls for connection
# (you should also used the port 389)
# If not defined, parameter is set to "1"
ldapTLS="0"
# How to verify the server's certificate (none, optional or require)
# see "man Net::LDAP" in start_tls section for more details
verify="require"
# LDAP Suffix
suffix="dc=domain,dc=net"
# Контейнер для пользователей
usersdn="ou=Users,${suffix}"
# Контейнер для компьютеров
computersdn="ou=Computers,${suffix}"
# Контейнер для групп
groupsdn="ou=Groups,${suffix}"
# Idmap
idmapdn="ou=Idmap,${suffix}"
# Where to store next uidNumber and gidNumber available for new users and groups
# If not defined, entries are stored in sambaDomainName object.
sambaUnixIdPooldn="sambaDomainName=DOMAIN,${suffix}"
# Default scope Used
scope="sub"
# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)
hash_encrypt="MD5"
# if hash_encrypt is set to CRYPT, you may set a salt format.
# default is "%s", but many systems will generate MD5 hashed
# passwords if you use "$1$%.8s". This parameter is optional!
crypt_salt_format="%s"
##############################################################################
#
# Unix Accounts Configuration
#
##############################################################################
# Login defs
# Default Login Shell
# Ex: userLoginShell="/bin/bash"
userLoginShell="/bin/bash"
# Home directory
# Ex: userHome="/home/%U"
userHome="/home/%U"
# Default mode used for user homeDirectory
userHomeDirectoryMode="700"
# Gecos
userGecos="System User"
# Default User (POSIX and Samba) GID
defaultUserGid="513"
# Default Computer (Samba) GID
defaultComputerGid="515"
# Skel dir
skeletonDir="/etc/skel"
# Default password validation time (time in days) Comment the next line if
# you don't want password to be enable for defaultMaxPasswordAge days (be
# careful to the sambaPwdMustChange attribute's value)
defaultMaxPasswordAge="45"
##############################################################################
#
# SAMBA Configuration
#
##############################################################################
mailDomain="domain.net"
##############################################################################
#
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
#
##############################################################################
# Allows not to use smbpasswd (if with_smbpasswd == 0 in smbldap_conf.pm) but
# prefer Crypt::SmbHash library
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
# Allows not to use slappasswd (if with_slappasswd == 0 in smbldap_conf.pm)
# but prefer Crypt:: libraries
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
# comment out the following line to get rid of the default banner
# no_banner="1"
И smbldap_bind.conf :
slaveDN="cn=manager,dc=domain,dc=net"
slavePw="secret_word"
masterDN="cn=manager,dc=domain,dc=net"
masterPw="secret_word"
После этого:
chmod 0644 /etc/smbldap-tools/smbldap.conf
chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
Теперь можно заполнить базу LDAP:
smbldap-populate -u 30000 -g 30000
"Рабочий" конфиг Samba:
[global]
workgroup = DOMAIN
netbios name = RIFTER
# ldapsam backend database
passdb backend = ldapsam:ldap://127.0.0.1/
# username map = /etc/samba/smbusers
# IDEALX
add user script = /usr/sbin/smbldap-useradd -m %u
delete user script = /usr/sbin/smbldap-userdel %u
add group script = /usr/sbin/smbldap-groupadd -p %g
delete group script = /usr/sbin/smbldap-groupdel %g
add user to group script = /usr/sbin/smbldap-groupmod -m %g %u
delete user from group script = /usr/sbin/smbldap-groupmod -x %g %u
set primary group script = /usr/sbin/smbldap-usermod -g %g %u
ldap delete dn = Yes
# add machine script = /usr/sbin/smbldap-useradd -w %u
# Автоматическое добавление машин
add machine script = /usr/sbin/smbldap-useradd -w -i %u
# Другое
obey pam restrictions = no
logon script =
logon path =
logon drive =
logon home =
domain logons = Yes
os level = 44
preferred master = Yes
domain master = Yes
dont descend = /proc,/dev,/etc,/lib,/lost+found,/initrd
show add printer wizard = yes
# OpenLDAP
ldap suffix = dc=zstm,dc=ru
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Users
ldap admin dn = cn=Manager,dc=zstm,dc=ru
ldap ssl = no
ldap passwd sync = Yes
passwd program = /usr/sbin/smbldap-passwd
passwd chat = *New*password %n\n *Retype*new*password* %n\n *all*autetication*tokens*updated*
#idmap uid = 15000-20000
#idmap gid = 15000-20000
# LOG
log level = 2
log file = /var/log/samba/%m.log
[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No
[share]
comment = data share
path = /var/share
valid users = %U
После сохранения файла конфигурации samba определяем пароль root'a LDAP для samba:
smbpasswd -w secret_word
3. Настройка аутентификации/etc/libnss-ldap.conf
base dc=domain,dc=net
uri ldap://127.0.0.1/
ldap_version 3
rootbinddn cn=manager,dc=domain,dc=net
/etc/nsswitch.conf
passwd: compat ldap
group: compat ldap
shadow: compat ldap
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
/etc/pam.d/common-account
account sufficient pam_ldap.so
account required pam_unix.so try_first_pass
/etc/pam.d/common-auth
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
/etc/pam.d/common-password
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass
Необходимо установить nscd
apt-get install nscd
Без него при попытке присоединения Win-компьютера к домену он ругается на то "что устройство не работает"; самба в логах отписывает что учетная запись для этого компьютера уже есть;
Работа полученной конфигурации проверяется следующим образом:
getent passwd | grep 0:0
Вывод должен быть такой:
root:x:0:0:root:/root:/bin/bash
root:x:0:0:Netbios Domain Administrator:/home/root:/bin/false
добавление пользователей в домен:
smbldap-useradd -a -m -P username
смотреть, как пользователь "устроился" в домене:
pdbedit -Lv username
Windows XP SP2 компьютер вводится в полученный домен от учетной записи root; прописывается в базе автоматически;
Для управления этой конфигурацией можно использовать phpLDAPAdmin (
http://phpldapadmin.sourceforge.net) или GOsa (
https://www.gosa-project.org);
При установке GOsa есть ньюансы, которые я опишу позже
Пользователи, созданные в phpLDAPAdmin не могут войти в домен; причину этого я так и не нашел