Замена Microsoft AD на OpenLDAP+Samba3

Предисловие

Начиная эту статью, я не преследую цель написать подробное руководство по установке и настройке необходимого серверного программного обеспечения (ПО). Таких статей, How-To и т.п. в Сети много. Я постараюсь описать именно процесс перехода с AD на OpenLDAP+Samba3 и те сложности, с которыми мне пришлось столкнуться.

Хочу заметить, что в моей локальной сети переход прошел не так гладко, как хотелось. Были ошибки, сбои и весьма неприятные моменты. Такие «грабли» я постараюсь описать подробно, чтобы те, кто прочитает мою статью, на них не наступал.

По ходу описания я буду приводить ссылки на материалы, которые я использовал.

1. Предварительная подготовка

Что у нас есть и что с этим делать?

Имеется:

  • Русская версия Windows 2000 Server SP4, AD
  • Домен: MYDOMAIN
  • Netbios имя сервера: win_server
  • Имя нового Linux-сервера: lin_server
  • ОС на рабочих станциях: Windows 2000/XP

Для Linux-сервера я выбрал новый на момент написания статьи Ubuntu Linux 7.04 Feisty со следующими версиями пакетов:

  • slapd 2.3.30-2
  • samba 3.0.24-2ubuntu1.1
  • smbldap-tools 0.9.2-3
  • libnss-ldap 251-7.5
  • libpam-ldap 180-1.7
  • phpldapadmin 0.9.8.3-7
  • nscd 2.5-0ubuntu14
  • apache2 2.2.3-3.2build1

Инструмент для перехода: Windows to Linux Migration Toolkit (w2lmt).

Инструмент для графического отображения дерева LDAP: phpldapadmin.

Подготовка Windows-сервера.

Следующие группы, названные по-русски, необходимо переименовать:

Администраторы домена -> Domain Admins
Компьютеры домена -> Domain Computers
Гости домена -> Domain Guests
Пользователи домена -> Domain Users

Связано это с тем, что эти группы имеют фиксированное значение SID, а используемый в процессе перехода скрипт smbldap-populate создаст группы с именами в латинице, и пользователи корректно не перенесутся на новую систему.

Также надо быть особо внимательным, если в сети имеется несколько рабочих станций, за которыми работают под одним и тем же именем.

В моей сети не использовались перемещаемые профили Windows. Т.е. на Windows-сервере в настройках пользователей поле "Профиль" было пустым.

На двух станциях работали под одним и тем же именем пользователя. Должного внимания профилям в процессе перехода я не уделил. В результате профиль с одной станции скопировался на другую, затерев старый профиль. Соответственно преждние "Мои документы", "Рабочий стол" и т.д. были удалены. Пришлось снимать жесткий диск и восстанавливать удаленные файлы.

Подготовка Linux-сервера

Подготовка Linux-сервера сводится к устранению возможных дубликатов uid и gid, хранящихся в базе LDAP и в /etc/passwd.

После первоначальной установки ОС Linux, в системе создается первый пользователь с uid=1000 и gid=1000.

Скрипт smbldap-populate без параметров создаст первоначальную структуру LDAP, в которой будут созданы пользователи root и nobody, а первый пользователь домена будет иметь uid=1000. Т.е. будет конфликт между локальным пользователем и пользователем в LDAP, имеющими одинаковый uid=1000.

Группы, созданные smbldap-populate будут иметь следующие параметры:

Группа uid SID
Account Operators 548 S-1-5-32-548
Administrators 544 S-1-5-32-544
Backup Operators 551 S-1-5-32-551
Domain Admins 512 SID_СЕРВЕРА-512
Domain Computers 515 SID_СЕРВЕРА-515
Domain Guests 514 SID_СЕРВЕРА-514
Domain Users 513 SID_СЕРВЕРА-513
Print Operators 550 S-1-5-32-550
Replicators 552 S-1-5-32-552

В заново установленной ОС Linux локальных групп с такими gid-ми скорее всего не будет, но лучше убедиться, что их действительно нет. И, если есть, присвоить им другие значения gid, отличные от перечисленных.

Предполагается, что в сети уже есть работающий DNS-сервер.
В моей сети работает связка DDNS + DHCPD3. О том, как ее настроить можно прочитать здесь:
http://www.ops.ietf.org/dns/dynupd/secure-ddns-howto.html
http://www.opennet.ru/base/net/auto_dns_dhcp.txt.html

2. Windows to Linux Migration Toolkit

Краткое отступление
Об утилитах Windows to Linux Migration Toolkit (w2lmt) я узнал из книги Дэвида Аллена "Переход с Windows на Linux".

Другой документации или какого-либо описания работы w2lmt в Сети я не нашел. Поэтому все описанное цитаты из книги и личный опыт. Книга посвещена не только w2lmt, все "грабли" в ней не расписаны.

Кроме этого, я не буду полностью описывать работу w2lmt, а коснуcь только тех моментов, которые возникали именно в моем процессе перехода.

Состав w2lmt
Для перехода с AD на LDAP+Samba3 использовались w2lmt 0.3.1.
Скачанный архив, кроме всего прочего, содержит perl-скрипты и соответствующие им конфигурационные файлы.

w2lmt-migrate-dns Скрипт предназначен для автоматического переноса информации DNS из Windows в Linux.
Этот скрипт я не использовал, т.к. в локальной сети уже работал DNS на Linux-сервере.
w2lmt-migrate-smbauth Скрипт предназначен для извлечения информации аутентификации.
Это основной скрипт, который должен корректно перенести пользователей с Windows-сервера в LDAP.
w2lmt-migrate-directory Скрипт, который запускается после завершения w2lmt-migrate-smbauth. Этот скрипт запросит сервер Exchange для обновления объектов каталогов любой сохраненной в нем нужной информации. Также он добавляет объекты контактов и группы распределений.
В моей сети не использовался Exchange, а служба AD использовалась только для аутентификации. Поэтому у меня не было необходимости запускать этот скрипт.
w2lmt-migrate-imap

Все скрипты запускаются с ключем "-f /path/to/file.conf".
Для работы скриптов требуется пакет smbldap-tools версии не ниже 0.8.5.

3. Установка и настройка

Установка пакетов

Устанавливаем сервер LDAP:

$ apt-get install slapd

Отвечаем на следующие вопросы:

    DNS domain name: mydomain
    Name of organisation: My Organization
    Admin password: password
    Confirm password: password
    Allow LDAP v2: no

После первой установки slapd, в базе LDAP будет единственная запись администратора cn=admin,dc=mydomain с паролем password.

Устанавливаем phpldapadmin и apache2

$ apt-get install apache2 phpldapadmin

Устанавливаем samba

$ apt-get install samba smbclient smbfs samba-doc

Отвечаем на следующие вопросы:

    Domain Name: MYDOMAIN
    Use Password Encryption: Yes
    Modify smb.conf to use WINS settings via DHCP: No
    How to run Samba: daemons
    Create password database: Yes

Хотя созданный файл smb.conf будет изменет, на вопросы ответить придется.

Устанавливаем smbldap-tools и ldap-utils

$ apt-get install smbldap-tools ldap-utils

Настройка

Настройка slapd

  • Необходимо скопировать файл /usr/share/doc/samba-doc/example/LDAP/samba.schema.gz в папку /etc/ldap/schema/ и распаковать его.
  • В файл /etc/ldap/slapd.conf в конце списка, помеченного строкой
    # Schema and objectClass definitions
    нужно добавить строку
    include /etc/ldap/schema/samba.schema

    В результате файл slapd.conf будет выглядеть примерно так:

    # This is the main slapd configuration file. See slapd.conf(5) for more
    # info on the configuration options.

    #######################################################################
    # Global Directives:

    # Features to permit
    #allow bind_v2

    # Schema and objectClass definitions
    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

    # Where the pid file is put. The init.d script
    # will not stop the server if you change this.
    pidfile /var/run/slapd/slapd.pid

    # List of arguments that were passed to the server
    argsfile /var/run/slapd/slapd.args

    ###################################################################
    # loglevel # Logging description

    loglevel 256

    # Where the dynamically loaded modules are stored
    modulepath /usr/lib/ldap
    moduleload back_bdb

    # The maximum number of entries that is returned for a search operation
    sizelimit 500

    # The tool-threads parameter sets the actual amount of cpu's that is used
    # for indexing.
    tool-threads 1

    #######################################################################
    # Specific Backend Directives for bdb:
    # Backend specific directives apply to this backend until another
    # 'backend' directive occurs
    backend bdb
    checkpoint 512 30

    #######################################################################
    # Specific Directives for database #1, of type bdb:
    # Database specific directives apply to this databasse until another
    # 'database' directive occurs
    database bdb

    # The base of your directory in database #1
    suffix "dc=MYDOMAIN"

    # Where the database file are physically stored for database #1
    directory "/var/lib/ldap"

    # For the Debian package we use 2MB as default but be sure to update this
    # value if you have plenty of RAM
    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

    # Indexing options for database #1
    index objectClass eq

    # Save the time that the entry gets modified, for database #1
    lastmod on

    # users can authenticate and change their password
    access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange
    by dn="cn=admin,dc=MYDOMAIN" write
    by self write
    by anonymous auth
    by * none

    # The admin dn has full write access, everyone else
    # can read everything.
    access to *
    by dn="cn=admin,dc=MYDOMAIN" write
    by * read

  • Для проверки нужно выполнить команду slaptest:
    $ slaptest
    config file testing succeeded

Настройка samba

  • Файл /etc/samba/smb.conf:
    # Global parameters
    [global]
    wins support = no
    protocol = NT1
    name resolve order = lmhosts host bcast
    dns proxy = no
    dos charset = CP866
    unix charset = UTF-8
    display charset = UTF-8
    workgroup = MYDOMAIN
    server string = linserver Server
    netbios name = LINSERVER
    netbios aliases = linserver
    security = users
    map acl inherit = yes
    inherit acls = yes
    inherit permissions = yes
    encrypt passwords = yes
    null passwords = yes
    enable privileges = yes

    passdb backend = ldapsam:ldap://127.0.0.1
    idmap backend = ldap:ldap://127.0.0.1
    ldap admin dn = cn=admin,dc=mydomain
    ldap suffix = dc=mydomain
    ldap machine suffix = ou=Computers
    ldap user suffix = ou=Users
    ldap group suffix = ou=Groups
    ldap passwd sync = yes
    ldap delete dn = yes
    ldap passwd sync = yes
    ldap ssl = no

    preferred master = yes
    domain master = no
    domain logons = yes

    logon path =
    logon drive = Z:
    logon home = \\%L\SYSVOL\users\%U

    add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
    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 "%u" "%g"
    delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
    set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'

    interfaces = 127.0.0.0/8 eth0
    hosts allow = 127.0.0.1 192.168.0.0/255.255.255.0
    hosts deny = ALL
    map to guest = Bad User
    guest account = nobody
    log file = /var/log/samba/log.%m
    max log size = 500 # in Kb
    log level = 5
    socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
    socket address = 127.0.0.1 192.168.0.2

    printing = cups
    load printers = yes

    ####### MAIL THE ADMIN A BACKTRACE
    panic action = /usr/share/samba/panic-action %d

    [homes]
    comment = Home Directories
    guest ok = No
    browseable = No
    create mask = 0644
    directory mask = 0775
    writeable = yes
    inherit permissions = Yes

    [profiles]
    path = /home/SYSVOL/profiles
    comment = User Profiles
    guest ok = Yes
    browseable = No
    create mask = 0600
    directory mask = 0700
    writeable = Yes
    profile acls = Yes
    csc policy = disable
    force user = %U
    valid users = %U @"Domain Admins"

    [netlogon]
    comment = User Netlogon
    path = /home/SYSVOL/netlogon
    browseable = No
    write list = MYDOMAIN@"Domain Admins"

    [IPC$]
    # IPC необходимо для нормальной работы Windows-домена:
    # browse network, browse folder и прочее.
    path = /tmp
    hosts allow = 192.168.0.0/24, 127.0.0.1
    hosts deny = 0.0.0.0/0

    Для хранения сценариев регистрации, профилей и домашних папок пользователей LDAP, я создал папку /home/SYSVOL (по аналогии с Windows, мне так удобнее). Соответственно, в ней созданы папки netlogons, profiles, users.

    Параметры domain master = no и domain logons = yes превращают сервер Samba в резервный контроллер домена.

    Параметр logon path = оставлен пустым, т.к. я не хочу хранить профили пользователей рабочих станций на сервере. Если все же требуется хранить профили, то нужно указать путь. По-умолчанию
    logon path = \\%N\%U\profile

  • Проверить файл smb.conf на наличие ошибок можно с помощью команды testparm. Если ошибок нет, Samba надо перезапустить.
  • Далее следует задать Samba пароль администратора (rootdn) LDAP:

    $ smbpasswd -w password
  • Если все операции прошли без ошибок, Samba следует остановить.

    $ /etc/init.d/samba stop

Пакеты для аутентификации Linux

  • Устанавливаем пакет libnss-ldap
    $ apt-get install libnss-ldap
      LDAP Server Host: 127.0.0.1
      DN of Search Base: dc=mydomain
      LDAP Version: 3
      Database requires login: no
      Make config readable by owner only: yes
  • Корректируем в файле /etc/nsswitch.conf параметры passwd, group и shadow:
    passwd: compat ldap
    group: compat ldap
    shadow: compat ldap
  • Устанавливаем пакет libpam-ldap

    $ apt-get install libpam-ldap
      Make local root db admin: yes
      Database requires logging in : no
      Root login account : cn=admin,dc=mydomain
      Root password : password
      Crypt : crypt

    Файл /etc/ldap/ldap.conf должен выглядеть так:

    BASE dc=mydomain
    HOST localhost
  • Для настройки PAM для LDAP надо внести изменения в следующие файлы:

    /etc/pam.d/common-account

    # Закоментировать следующую строку
    #account required pam_unix.so

    # и добавить две строки
    account sufficient pam_ldap.so
    account required pam_unix.so try_first_pass

    /etc/pam.d/common-auth

    # Закоментировать следующую строку
    #auth required pam_unix.so nullok_secure

    # и добавить две строки
    auth sufficient pam_ldap.so
    auth required pam_unix.so nullok_secure use_first_pass

    /etc/pam.d/common-password

    # Закоментировать следующую строку
    #password required pam_unix.so nullok obscure min=4 max=8 md5

    # и добавить две строки
    password sufficient pam_ldap.so
    password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass

  • Устанавливаем пакет nscd (name service caching daemon):
    $apt-get install nscd

4. Переход

Итак, Linux-сервер готов для переноса пользователей из AD в LDAP. Но нужно сделать еще кое-что.

Дерево LDAP.

Я использовал простую структуру дерева LDAP, которую создает утилита smbldap-populate.

w2lmt

Скачиваем архив w2lmt-0.3.1 и распаковываем его любое удобное место.

Далее следует внести изменения в файл migrate-smbauth.conf.

#source windows PDC host (typically DNS name)
SourceHost="win_server"
#source windows domain name
SourceDomain="MYDOMAIN"
#source PDC type, can be NT4,AD
SourceType="NT4"
#source windows domain administrator account name
SourceAdminAccount="Администратор"
#target linux LDAP server
TargetHost="localhost"
#target linux LDAP port (389 is default)
TargetPort="389"
#location of config file for samba
smbconf="/etc/samba/smb.conf"
#location of config file for smbldap-toolkit
smbldap="/etc/smbldap-tools/smbldap.conf"

Если Active Directory выполняется в смешанном режиме (Mixed Mode, как раз мой случай), то в файле конфигурации сценария w2lmt-migrate-smbauth в качестве SourceType следует использовать настройку NT4. При использовании этой настройки сохраняется SID и RID существующего домена.

При выполнении Active Directory в "родном" режиме (Native Mode) сценарии будут создавать новый домен с новыми SID и RID для пользователей, групп и машин. Это происходит потому, что собственный режим AD не совместим с доменом типа Samba NT4, на который осуществляется переход. Следует помнить о том, что все объедененные в этом домене машины необходимо повторно объединять в новый домен на базе Linux.

Сценарий w2lmt-migrate-smbauth по ходу выполнения вызовет скрипт smbldap-populate без параметров. Т.к. установки по-умолчанию меня не устраивали, я внес в файл w2lmt-migrate-smbauth следующие изменения:

  • В конце файла есть описание функции initldapou
    sub initldapou {
    ########################################################################
    # Checks ldap server to see if initial entries have been placed in there
    # adds them if necessary
    ########################################################################
    .....
    if ($checkvar lt 110) {
    $cmd = $config{'smbldap-populate'};
    print $cmd;
    print "\n";
    print "Initializing root Directory objects...\n";
    $result=`$cmd`;
    } else {
    print "Directory root objects have been previously populated...\n";
    }
  • Строку "$result=`$cmd`;" я заменил на "$result=`$cmd -u 10000 -g 5000 -a Administrator -b guest`;".
    Т.е. добавил параметры к вызову скрипта smbldap-populate, которые означают, что в моем дереве LDAP uid-ы начинаются с 10000, gid-ы начинаются с 5000, учетное имя локального администратора (с uid=0) - Administrator, гостевое имя - guest.
    В smbldap-populate по-умолчанию, соответственно 1000, 1000, root, nobody.

smbldap-tools

По-умолчанию, после установки пакета smbldap-tools, в папке /etc отсутствуют его конфигурационные файлы. По-этому их надо создать вручную. Это файлы /etc/smbldap-tools/smbldap.conf и /etc/smbldap-tools/smbldap_bind.conf.

Непосредственно для перехода конфигурационные файлы smbldap-tools можно оставить пустыми. Главное, чтобы они были, иначе скрипты smbldap-tools просто не будут выполняться, ссылаясь на их отсутствие.

Сценарий w2lmt-migrate-smbauth сначала покажет список параметров и их значения по-умолчанию и позволит изменить значения некоторых из них, но, увы, не у всех. По-этому конфигурационные файлы smbldap-tools лучше все-таки заполнить. Как вариант, их можно скопировать из папки /usr/share/doc/smbldap-tools/examples в папку /etc/smbldap-tools/ и отредактировать.

У меня конфигурационные файлы smbldap-tools выглядят так:

/etc/smbldap-tools/smbldap_bind.conf

slaveDN="cn=admin,dc=mydomain"
slavePw="Пароль"
masterDN="cn=admin,dc=mydomain"
masterPw="Пароль"

/etc/smbldap-tools/smbldap.conf

# Put your own SID. To obtain this number do: "net getlocalsid".
# If not defined, parameter is taking from "net getlocalsid" return
#SID="S-1-5-21-1409082233-1383384898-839522115"

# Domain name the Samba server is in charged.
# If not defined, parameter is taking from smb.conf configuration file
sambaDomain="MYDOMAIN"

########################################################################
#
# LDAP Configuration
#
########################################################################

# Slave LDAP server
# If not defined, parameter is set to "127.0.0.1"
slaveLDAP="localhost"

# Slave LDAP port
# If not defined, parameter is set to "389"
slavePort="389"

# Master LDAP server: needed for write operations
# If not defined, parameter is set to "127.0.0.1"
masterLDAP="localhost"

# Master LDAP port
# If not defined, parameter is set to "389"
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=""

# LDAP Suffix
suffix="dc=mydomain"

# Where are stored Users
# Warning: if 'suffix' is not set here, you must set the full dn for usersdn
usersdn="ou=Users,dc=mydomain"

# Where are stored Computers
# Warning: if 'suffix' is not set here, you must set the full dn for computersdn
computersdn="ou=Computers,dc=mydomain"

# Where are stored Groups
# Warning: if 'suffix' is not set here, you must set the full dn for groupsdn
groupsdn="ou=Groups,dc=mydomain"

# Where to store next uidNumber and gidNumber available for new users and groups
# If not defined, entries are stored in sambaDomainName object.
sambaUnixIdPooldn="cn=NextFreeUnixId,dc=mydomain"

# Default scope Used
scope="sub"

# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)
hash_encrypt="CRYPT"

# 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
userLoginShell="/bin/bash"

# Home directory
userHome="/home/SYSVOL/users/%U"

# Default mode used for user homeDirectory
userHomeDirectoryMode="700"

# Gecos
userGecos="Domain 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
#
########################################################################

# The UNC path to home drives location (%U username substitution)
# Just set it to a null string if you want to use the smb.conf 'logon home'
# directive and/or disable roaming profiles
userSmbHome="\\LAN2\%U"

# The UNC path to profiles locations (%U username substitution)
# Just set it to a null string if you want to use the smb.conf 'logon path'
# directive and/or disable roaming profiles
userProfile=""

# The default Home Drive Letter mapping
# (will be automatically mapped at logon time if home directory exist)
userHomeDrive="Z:"

# The default user netlogon script name (%U username substitution)
# if not used, will be automatically username.cmd
# make sure script file is edited under dos
userScript="login.bat"

# Domain appended to the users "mail"-attribute
# when smbldap-useradd -M is used
mailDomain="my.mail.domain"

########################################################################
#
# 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="1"
slappasswd="/usr/sbin/slappasswd"

# comment out the following line to get rid of the default banner
# no_banner="1"

Обратите внимание на то, что параметр SID закомментирован. Если его раскомментировать, то сценарий w2lmt-migrate-smbauth сам подставит занчение SID, и оно будет не верным. Почему так, я не понял, установил опытным путем.
После того, как перенос данных из AD в LDAP будет выполнен, следует раскомментировать параметр SID и прописать его значение, узнать которое можно будет с помощью команды net getlocalsid.

Параметр ldapTLS="0" означает, что я не использую шифрование.

Параметр userProfile="" означает, что я не использую перемещаемые профили. Если есть необходимость их использовать, то этот параметр будет выглядеть, например, так: userProfile="\\LAN2\profiles\%U".

Ключ на старт

Перед запуском сценария w2lmt-migrate-smbauth стоит лишний раз убедиться в следующем:

  • Сервер Samba должен быть остановлен!
  • Сервер slapd должен быть запущен.
  • База LDAP должна содержать единственную запись администратора LDAP, т.е. cn=admin,dc=mydomain. Убедиться в этом можно с помощью phpldapadmin. Нужно в браузере зайти по адресу http://lin_server/phpldapadmin, выбрать "Login", в поле "Login DN" ввести "cn=admin,dc=mydomain", ввести пароль.
    Если в процессе настройки сервер slapd перезапускался, когда сервер samba был запущен, то в базе LDAP будет присутствовать запись "sambaDomainName=MYDOMAIN". Эту запись необходимо удалить.

Теперь запускаем сценарий w2lmt-migrate-smbauth

$ cd /path/to/w2lmt
$ w2lmt-migrate-smbauth -f /path/to/migrate-smbauth.conf

После этого на экране появится примерно такой диалог:

ready to migrate NT4 using the following parameters

=== LDAP Settings: ==============================================

Master LDAP Server: localhost
Master LDAP Port: 389
Master DN: admin
LDAP Base Suffix: dc=mydomain
Users OU: ou=Users
Groups OU: ou=Groups
Computers OU: ou=Computers
IDMap OU: ou=Idmap
Unix ID Pool DN: cn=NextFreeUnixId,dc=mydomain

=== SAMBA Settings: =============================================

User's Home Share: \\LAN2\%U
User's Login Script: login.bat
User's Profile:
Password Age: 45
User Default GID: 513
Computer Default GID: 515

=== POSIX Settings: =============================================

User's Home Directory: /home/SYSVOL/users/%U
Default Shell: /bin/bash
Default Mail Domain: my.mail.domain
Skeleton Directory: /etc/skel
Hash Encryption Type: CRYPT
Hash Encryption Salt: %s
Press (C) to continue, (M) to modify the above or (Q) to quit:

В общем то можно нажать M и исправить параметры, но я бы не рекомендовал так поступать, т.к. скрипт позволяет редактировать только некоторые из показанных. Лучше выйти и отредактировать файлы конфигурации в текстовом редакторе.

Жмем C.
Вот тут я не сразу смог понять, что же не так. Вроде бы и настройки верные, и первоначальное дерево LDAP создалось, а перенос пользователей начинается только, если нажать два раза Enter.
Дело в том, что по окончанию создания первоначального дерева LDAP, скрипт smbldap-populate предлагает ввести пароль Администратора. Скрипт w2lmt-migrate-smbauth строку приглашения ввода пароля не выводит, просто курсор мигает. Так что пароль и подтверждение пароля пользователя Administrator приходится вводить вслепую.

Теперь можно пойти заварить кофейку. Перенос моих пользователей занял около 20 мин. ;-)

"Обработка напильником"

Можно сказать, что на этом все. Windows сервер можно выключать. Все пользователи со всех рабочих станций успешно прошли аутентификацию. Но "грабли" на некоторых станциях все же были, причем я не смог установить связаны ли они с версий Windows или с чем то еще.
Проблемы следующие:

  • Не у всех пользователей подключился персональный диск (Z:).
  • На некоторых станциях Login Script вообще не выполнялся.
  • На некоторых станциях не проходила печать на сетевые принтеры, при этом доступ к сетевым дискам был.

Решение было одно - вывести станции из домена и заново их зарегистрировать.

5. Заключение

Осень 2007 года подходит к концу.
Описанный вариант замены Active Directory на OpenLDAP+Samba3 был осуществлен полгода назад.
Система продолжает успешно работать.

Повторюсь, предложенное описание перехода не претендует на Полное руководство или How-To. Пишу, в основном, для себя.

Буду рад, если кому-то это описание окажется полезным.