Дерево 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 вообще не выполнялся.
- На некоторых станциях не проходила печать на сетевые принтеры, при этом доступ к сетевым дискам был.
Решение было одно - вывести станции из домена и заново их зарегистрировать.