C ростом организации рано или поздно перед каждым администратором возникает вопрос о централизованном хранении и управлении учетными записями. Данная статья посвящена настройке Samba 3 в качестве основного контроллера домена (PDC), все записи о пользователях будут храниться в LDAP-каталоге. Преимущества подобной организации очевидны - упрощение управления пользователями, возможность делегирования полномочий по управлению пользователями в домене, повышение отказоустойчивости системы, простота переноса и восстановления после отказа аппаратного обеспечения, возможность интеграции с LDAP других сервисов - svn, jabber, squid, postfix/exim, proftpd и т.п. и т.д.
Все дальнейшие настройки мы будем производить согласно следующей схеме LDAP каталога.
sys-adm.local | ||||||||||||||||||||||||||||
ou=Users | ||||||||||||||||||||||||||||
ou=Department1 | ||||||||||||||||||||||||||||
uid=user1 | ||||||||||||||||||||||||||||
… | ||||||||||||||||||||||||||||
ou=Department100 | ||||||||||||||||||||||||||||
uid=user100 | ||||||||||||||||||||||||||||
ou=Groups | ||||||||||||||||||||||||||||
cn=Domain Admins | ||||||||||||||||||||||||||||
cn=Domain Users | ||||||||||||||||||||||||||||
cn=Domain Guests | ||||||||||||||||||||||||||||
ou=Computers | ||||||||||||||||||||||||||||
uid=workstation1$ | ||||||||||||||||||||||||||||
… | ||||||||||||||||||||||||||||
uid=workstation100$ | ||||||||||||||||||||||||||||
Итак, в нашем распоряжении имеется следующая система:
# cat /etc/redhat-release CentOS release 5.8 (Final) # uname -r 2.6.18-308.4.1.el5
Подключаем репозитарии EPEL и RPMForge
# wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt # rpm --import RPM-GPG-KEY.dag.txt # wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm # rpm -K rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm: (sha1) dsa sha1 md5 gpg OK # rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm Preparing... ########################################### [100%] 1:rpmforge-release ########################################### [100%] # wget http://ftp.tlk-l.net/pub/mirrors/fedora-epel/RPM-GPG-KEY-EPEL # rpm --import RPM-GPG-KEY-EPEL # wget http://ftp.tlk-l.net/pub/mirrors/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm # rpm -K epel-release-5-4.noarch.rpm epel-release-5-4.noarch.rpm: (sha1) dsa sha1 md5 gpg OK # rpm -ivh epel-release-5-4.noarch.rpm Preparing... ########################################### [100%] 1:epel-release ########################################### [100%]
Обновляем систему
# yum update
Редактируем файл /etc/hosts и настраиваем корректное имя нашего хоста
# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain 192.168.127.2 pdc pdc.sys-adm.local
Настраиваем демон ntp для синхронизации времени. После выполнения всех предварительных настроек можно приступать к установке samba.
Устанавливаем пакеты, необходимые для сборки samba.
# yum install rpm-build.x86_64 pam-devel.x86_64 readline-devel.x86_64 libacl-devel.x86_64 openldap-devel.x86_64 # yum install krb5-devel.x86_64 cups-devel.x86_64 autoconf gcc-c++.x86_64 which.x86_64 make.x86_64
Скачиваем исходный код samba с официального сайта и запускаем сборку пакета.
# cd /tmp # wget http://samba.org/samba/ftp/stable/samba-3.4.17.tar.gz # tar zxf samba-3.4.17.tar.gz # cd samba-3.4.17/packaging/RHEL # sh makerpms.sh --target=x86_64 Supported RPM version [4.4.2.3] /tmp/samba-3.4.17/packaging/RHEL /tmp/samba-3.4.17/packaging/RHEL /tmp/samba-3.4.17/packaging/RHEL /tmp/samba-3.4.17/packaging/RHEL /tmp/samba-3.4.17/packaging/RHEL Creating samba-3.4.17.tar.bz2 ... Done. /tmp/samba-3.4.17/packaging/RHEL setup/ ... ... ... Wrote: /usr/src/redhat/SRPMS/samba-3.4.17-1.src.rpm Wrote: /usr/src/redhat/RPMS/x86_64/samba-3.4.17-1.x86_64.rpm Wrote: /usr/src/redhat/RPMS/x86_64/samba-client-3.4.17-1.x86_64.rpm Wrote: /usr/src/redhat/RPMS/x86_64/samba-common-3.4.17-1.x86_64.rpm Wrote: /usr/src/redhat/RPMS/x86_64/samba-swat-3.4.17-1.x86_64.rpm Wrote: /usr/src/redhat/RPMS/x86_64/samba-doc-3.4.17-1.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.3392 + umask 022 + cd /usr/src/redhat/BUILD + cd samba-3.4.17 + rm -rf /var/tmp/samba-3.4.17-root + exit 0 Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.3392 + umask 022 + cd /usr/src/redhat/BUILD + rm -rf samba-3.4.17 + exit 0 makerpms.sh: Done.
После того, как пакеты успешно собрались устанавливаем их.
# cd /usr/src/redhat/RPMS/x86_64/x86_64/ # rpm -ivh samba-3.4.17-1.x86_64.rpm samba-common-3.4.17-1.x86_64.rpm samba-client-3.4.17-1.x86_64.rpm samba-doc-3.4.17-1.x86_64.rpm Preparing... ########################################### [100%] 1:samba-common ########################################### [ 25%] 2:samba ########################################### [ 50%] 3:samba-client ########################################### [ 75%] 4:samba-doc ########################################### [100%]
Копируем схему samba.schema в каталог OpenLDAP. Для корректной работы LDAP сервера у вас в системе должны быть установлены следующие пакеты - openldap-servers и openldap-clients
# cp /usr/share/doc/samba-doc-3.4.17/LDAP/samba.schema /etc/openldap/schema/samba.schema
Собственно вся настройка LDAP каталога сводится к редактированию файла /etc/openldap/slapd.conf.
# Подключаем стандартные схемы. Порядок подключений схем имеет значение! include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/samba.schema # Задаем путь для pid файла pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # Определяем настройки хранения данных # Значение для поля rootpw генерируем с помощью команды: slappasswd -h {SSHA} database bdb suffix "dc=sys-adm,dc=local" rootdn "cn=root,dc=sys-adm,dc=local" rootpw {SSHA}2n7rOetD0z6RoWG2zZ9Cuvw5thEnPZVh # Указываем обязательное использование протокола v3 и запрещаем анонимный доступ к нашему каталогу # LDAPv3 - требуем, чтобы при любом обращении к DIT использовались процедуры 3-ей версии протокола LDAP. # authc - требуем, чтобы при любом обращении к DIT, перед тем как выполнить какую-либо операцию с каталогом, # была пройдена LDAP-аутентификация. Использование этого значения также подразумевает неявное использование # ключевого слова bind. require LDAPv3 authc # Задаем уровень логирование и путь к log файлу # 256 0x100 stats статистика соединений/операций/результатов # 32 0x20 filter обработка поисковых фильтров # 256 + 32 = 288 loglevel 288 logfile /var/log/ldap.log # Определяем несколько базовых ACL access to attrs=userPassword,sambaNTPassword,sambaLMPassword by self write by anonymous auth by * none access to * by self read by users read by anonymous auth by * none # Путь directory /var/lib/ldap # Индексы, для ускорения поиска index objectClass eq index cn pres,sub,eq index sn pres,sub,eq index uid pres,sub,eq index displayName pres,sub,eq index uniqueMember eq index uidNumber eq index gidNumber eq index memberUID eq index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index sambaGroupType eq index sambaSIDList eq index default sub
Производим небольшие настройки базы данных
# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # mkdir /var/lib/ldap/{db,logs} # chown -R ldap:ldap /var/lib/ldap/
Редактируем файл /var/lib/ldap/DB_CONFIG
# $OpenLDAP: pkg/ldap/servers/slapd/DB_CONFIG,v 1.1.2.4 2007/12/18 11:51:46 ghenry Exp $ # Example DB_CONFIG file for use with slapd(8) BDB/HDB databases. # # See the Oracle Berkeley DB documentation # <http://www.oracle.com/technology/documentation/berkeley-db/db/ref/env/db_config.html> # for detail description of DB_CONFIG syntax and semantics. # # Hints can also be found in the OpenLDAP Software FAQ # <http://www.openldap.org/faq/index.cgi?file=2> # in particular: # <http://www.openldap.org/faq/index.cgi?file=1075> # Note: most DB_CONFIG settings will take effect only upon rebuilding # the DB environment. # one 0.25 GB cache set_cachesize 0 268435456 1 # Data Directory set_data_dir db # Transaction Log settings set_lg_regionmax 262144 set_lg_bsize 2097152 set_lg_dir logs # Note: special DB_CONFIG flags are no longer needed for "quick" # slapadd(8) or slapindex(8) access (see their -q option).
Для того, чтобы OpenLDAP писал все сообщения в определенный файл, настраиваем соответствующим образом syslog. Редактируем файл /etc/syslog.conf и добавляем следующую строку в конец файла, после чего перезапускаем демон, предварительно создав сам log файл.
local4.* /var/log/ldap.log
# touch /var/log/ldap.log # chmod 640 /var/log/ldap.log # service syslog restart Shutting down kernel logger: [ OK ] Shutting down system logger: [ OK ] Starting system logger: [ OK ] Starting kernel logger: [ OK ]
И последний момент, который нам необходимо сделать, это добавить одну строку в конец файла /etc/sysconfig/ldap
SLAPD_OPTIONS="-4"
Таким образом наш демон slapd будет слушать только IPv4 адреса. Теперь у нас все готово к запуску OpenLDAP. Запускаем демон и добавляем его запуск при старте системы.
# service ldap start Starting slapd: [ OK ] # chkconfig --level 35 ldap on
При этом в log файле должны появиться такие записи
# cat /var/log/ldap.log May 23 10:16:44 pdc slapd[7256]: @(#) $OpenLDAP: slapd 2.3.43 (Feb 22 2012 16:01:18) $ [email protected]:/builddir/build/BUILD/openldap-2.3.43/openldap-2.3.43/build-servers/servers/slapd May 23 10:16:45 pdc slapd[7257]: slapd starting
Устанавливаем пакет nss_ldap
# yum install nss_ldap.x86_64
Редактируем файл /etc/nsswitch.conf и настраиваем поиск пользователей в LDAP каталоге. Так же поиск компьютеров будет производиться с помощью wins сервера.
passwd: files ldap shadow: files ldap group: files ldap hosts: files dns wins
Все остальные строки оставляем без изменений. Таким образом при поиске пользователей, групп и их паролей система так же будет обращаться в LDAP каталог. Для того, чтобы система знала к какому именно LDAP каталогу обращаться и где искать необходимую информацию нам необходимо настроить nss_ldap. Редактируем файл /etc/ldap.conf. Настройки производим в соответствии с нашей структурой (см схему выше).
# Адрес нашего OpenLDAP сервера host 127.0.0.1 #uri ldap://localhost/ # База для поиска в LDAP каталоге base dc=sys-adm,dc=local # Так как у нас запрещены анонимные подключения, указываем пользователя и его пароль binddn cn=root,dc=sys-adm,dc=local bindpw 1234567 # Версия LDAP протокола и номер порта ldap_version 3 port 389 # Область поиска scope sub bind_policy soft # Задаем лимиты timelimit 120 bind_timelimit 120 sizelimit 500 idle_timelimit 3600 # Указываем фильтры для поиска пользователей, групп и паролей nss_base_passwd ou=Users,dc=sys-adm,dc=local?sub nss_base_shadow ou=Users,dc=sys-adm,dc=local?sub nss_base_group ou=Groups,dc=sys-adm,dc=local?sub nss_base_passwd ou=Computers,dc=sys-adm,dc=local?sub nss_connect_policy persist # При определении членства в группах исключаем следующих пользователей из поиска. nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd,gdm
smbldap-tools набор скриптов на perl значительно облегчающих работу с доменом, а именно создание, модификацию и удаление записей пользователей/групп/компьютеров.
# cd /tmp # wget http://wiki.sys-adm.org.ua/_media/srpms/perl-LDAP-0.34-6.src.rpm # rpm -ivh perl-LDAP-0.34-6.src.rpm 1:perl-LDAP ########################################### [100%] # cd /usr/src/redhat/SPECS/ # rpmbuild -ba perl-LDAP.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.59364 + umask 022 + cd /usr/src/redhat/BUILD + cd /usr/src/redhat/BUILD + rm -rf perl-ldap-0.34 + /bin/gzip -dc /usr/src/redhat/SOURCES/perl-ldap-0.34.tar.gz + tar -xf - ... ... ... Wrote: /usr/src/redhat/SRPMS/perl-LDAP-0.34-6.src.rpm Wrote: /usr/src/redhat/RPMS/noarch/perl-LDAP-0.34-6.noarch.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.8427 + umask 022 + cd /usr/src/redhat/BUILD + cd perl-ldap-0.34 + rm -rf /var/tmp/perl-LDAP-0.34-6-root-root + exit 0
Обновляем пакет
# rpm -Uvh /usr/src/redhat/SRPMS/perl-LDAP-0.34-6.src.rpm 1:perl-LDAP ########################################### [100%]
Теперь устанавливаем сам smbldap-tools с официального сайта
# yum install perl-Crypt-SmbHash perl-Digest-SHA1 # cd /tmp # wget http://download.gna.org/smbldap-tools/packages/el5/smbldap-tools-0.9.8-1.el5.noarch.rpm # rpm -ivh smbldap-tools-0.9.8-1.el5.noarch.rpm Preparing... ########################################### [100%] 1:smbldap-tools ########################################### [100%]
После того, как мы успешно установили smbldap-tools переходим непосредственно к настройке. Для этого редактируем два файла: /etc/smbldap-tools/smbldap_bind.conf и /etc/smbldap-tools/smbldap.conf
# $Id$ # # /etc/smbldap-tools/smbldap_bind.conf # ############################ # Credential Configuration # ############################ # Notes: you can specify two differents configuration if you use a # master ldap for writing access and a slave ldap server for reading access # By default, we will use the same DN (so it will work for standard Samba # release) # Указываем dn и пароль с которым мы будем подключаться к LDAP каталогу. masterDN="cn=root,dc=sys-adm,dc=local" masterPw="1234567" # В случае, если у вас несколько LDAP серверов, указываем данные для подключения на slave. slaveDN="cn=root,dc=sys-adm,dc=local" slavePw="1234567"
# $Id$ # # /etc/smbldap-tools/smbldap.conf # # This code was developped by IDEALX (http://IDEALX.org/) and # contributors (their names can be found in the CONTRIBUTORS file). # # Copyright (C) 2001-2002 IDEALX # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. # Purpose : # . be the configuration file for all smbldap-tools scripts ############################################################################## # # General Configuration # ############################################################################## # SID нашего домена SID="S-1-5-21-206255134-223837211-2022137911" # Имя домена. sambaDomain="SYSADM" ############################################################################## # # LDAP Configuration # ############################################################################## # Адрес и порт для slave LDAP сервера # Ex: slaveLDAP=127.0.0.1 slaveLDAP="127.0.0.1" slavePort="389" # Адрес и порт для master LDAP сервера masterLDAP="127.0.0.1" masterPort="389" # Если установлена 1 будет использоваться шифрованное соединение с использованием start_tls # на 389 порту. Но так как в нашем случае samba и OpenLDAP находятся на одном сервере, # то использовать TLS нет смысла ldapTLS="0" # Если установлена 1 будет использоваться шифрованное соединение на 636 порту (ldaps) # Но так как в нашем случае samba и OpenLDAP находятся на одном сервере, # то использовать SSL нет смысла ldapSSL="0" # Проверка сертификата сервера, если такой задан и используется verify="none" # Так как мы не используем шифрование, то значения следующих 3х параметров не имеют значения для нас # Root CA сертификат cafile="/etc/smbldap-tools/ca.pem" # Сертификат сервера clientcert="/etc/smbldap-tools/smbldap-tools.example.com.pem" # private key сервера clientkey="/etc/smbldap-tools/smbldap-tools.example.com.key" # LDAP Suffix. см структуру LDAP каталога в начале статьи suffix="dc=sys-adm,dc=local" # Указываем путь, где будут храниться пользователи usersdn="ou=Users,${suffix}" # Указываем путь, где будут храниться компьютеры computersdn="ou=Computers,${suffix}" # Указываем путь, где будут храниться группы groupsdn="ou=Groups,${suffix}" # Указываем путь, где будут храниться Idmap записи (используется, если samba является domain member server) idmapdn="ou=Idmap,${suffix}" # Указываем путь, где будут храниться группы следующие значение uidNumber и gidNumber, # используемые при создании новых пользователей и групп sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}" # Область поиска по умолчанию scope="sub" # Хеш используемый для хранения паролей # Возможные значения: CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT password_hash="SSHA" # Если password_hash установлен в CRYPT, устанавливаем формат salt password_crypt_salt_format="$1$%.8s" ############################################################################## # # Unix Accounts Configuration # ############################################################################## # Задаем шел по умолчанию userLoginShell="/sbin/nologin" # Домашняя папка userHome="/home/%U" # Маска используемая при создании домашней папки userHomeDirectoryMode="700" # Gecos userGecos="System User" # GID используемый по умолчанию при создании пользователей defaultUserGid="513" # GID используемый по умолчанию при создании компьютеров defaultComputerGid="515" # Skel dir skeletonDir="/etc/skel" # Treat shadowAccount object or not shadowAccount="1" # Время жизни пароля в днях # defaultMaxPasswordAge="45" ############################################################################## # # SAMBA Configuration # ############################################################################## # UNC путь к домашней папке пользователя. Если задать пустым, то будет использоваться # значение 'logon home' из файла smb.conf userSmbHome="" # UNC путь к профилю пользователя. Если задать пустым, то будет использоваться # значение 'logon path' из файла smb.conf userProfile="" # Имя диска, используемое при подключении домашней папки во время входа пользователя userHomeDrive="W:" # Имя скрипта, выполняемого при входе пользователя на компьютер userScript="logon.bat" # Имя домена, добавляемое к имени пользователя при использовании smbldap-useradd -M mailDomain="example.com" ############################################################################## # # SMBLDAP-TOOLS Configuration (default are ok for a RedHat) # ############################################################################## # При значении 0 запрещает использование команды /usr/bin/smbpasswd, а вместо нее # использовать библиотеку Crypt::SmbHash, которая является более предпочтительной with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" # При значении 0 запрещает использование команды /usr/sbin/slappasswd, а вместо нее # использовать библиотеки Crypt::, которые являются более предпочтительными. with_slappasswd="0" slappasswd="/usr/sbin/slappasswd"
После того, как мы настроили smbldap-tools можно переходить к инициализации LDAP каталога.
Чтобы инициализировать наш LDAP каталог и создать минимально необходимую структуру, мы воспользуемся командой smbldap-populate.
# smbldap-populate -a sysadm-da -g 10000 -l 11111 -r 10000 -u 10000 Populating LDAP directory for domain SYSADM (S-1-5-21-206255134-223837211-2022137911) (using builtin directory structure) adding new entry: dc=sys-adm,dc=local adding new entry: ou=Users,dc=sys-adm,dc=local adding new entry: ou=Groups,dc=sys-adm,dc=local adding new entry: ou=Computers,dc=sys-adm,dc=local adding new entry: ou=Idmap,dc=sys-adm,dc=local adding new entry: sambaDomainName=SYSADM,dc=sys-adm,dc=local adding new entry: uid=sysadm-da,ou=Users,dc=sys-adm,dc=local adding new entry: uid=nobody,ou=Users,dc=sys-adm,dc=local adding new entry: cn=Domain Admins,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Domain Users,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Domain Guests,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Domain Computers,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Administrators,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Account Operators,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Print Operators,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Backup Operators,ou=Groups,dc=sys-adm,dc=local adding new entry: cn=Replicators,ou=Groups,dc=sys-adm,dc=local Please provide a password for the domain sysadm-da: Changing UNIX and samba passwords for sysadm-da New password: ******* Retype new password: *******
Как видно из вывода команды, она создает все необходимые OU (Organization Unit), а так же группы и двух пользователей nobody (гость) и sysadm-da (администратор домена). Ключи -u и -g задают начальные uid/gid соответственно для вновь создаваемых пользователей и групп. Параметр -a задает имя администратора домена, по умолчанию используется root. Теперь мы можем посмотреть информацию о пользователе sysadm-da
# smbldap-usershow sysadm-da dn: uid=sysadm-da,ou=Users,dc=sys-adm,dc=local objectClass: top,person,organizationalPerson,inetOrgPerson,sambaSamAccount,posixAccount,shadowAccount uid: sysadm-da cn: sysadm-da sn: sysadm-da gidNumber: 0 uidNumber: 0 homeDirectory: /home/sysadm-da sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaHomePath: \\PDC\home sambaHomeDrive: W: sambaProfilePath: sambaPrimaryGroupSID: S-1-5-21-206255134-223837211-2022137911-512 sambaSID: S-1-5-21-206255134-223837211-2022137911-500 loginShell: /sbin/nologin gecos: Netbios Domain Administrator sambaLMPassword: 0AFA9EFC9DE20294AAD3B435B51404EE sambaAcctFlags: [U] sambaNTPassword: 8F4BC1891E1050BDB614E72625AC2D7B sambaPwdLastSet: 1337698672 sambaPwdMustChange: 1341586672 userPassword: {CRYPT}0qaZvNIQMvD5. shadowLastChange: 15482 shadowMax: 45
Утилиты id/getent также должны видеть этого пользователя
# id sysadm-da uid=0(root) gid=0(root) groups=0(root),512(Domain Admins) # getent passwd sysadm-da sysadm-da:x:0:0:Netbios Domain Administrator:/home/sysadm-da:/sbin/nologin
Если вы откроете LDAP каталог в любом LDAP редакторе, в моем случае это Apache Directory Studio, то должны будете увидеть следующую структуру
Создаем учетную запись компьютера PDC в домене
# smbldap-useradd -W -g 515 PDC # smbldap-usershow PDC$ dn: uid=PDC$,ou=Computers,dc=sys-adm,dc=local cn: PDC$ uid: PDC$ uidNumber: 10000 gidNumber: 515 homeDirectory: /nonexistent loginShell: /sbin/nologin description: Computer gecos: Computer objectClass: posixAccount,account,sambaSamAccount sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaPwdMustChange: 2147483647 sambaPwdLastSet: 1337774553 sambaAcctFlags: [W ] sambaSID: S-1-5-21-206255134-223837211-2022137911-10001 sambaPrimaryGroupSID: S-1-5-21-206255134-223837211-2022137911-515 displayName: PDC$ sambaDomainName: SYSADM
Ну а теперь собственно можно переходить к заключительному этапу настройке системы, а именно - настройка samba.
Редактируем основной конфигурационный файл самбы /etc/samba/smb.conf
[global] # Общие настройки сервер workgroup = SYSADM server string = Primary Domain Controller netbios name = PDC security = user # Отключаем все, что связанно с печатью load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes # Путь к профилю, так как мы не используем перемещаемые профили, то оставляем пустым logon path = # Путь к домашней папке пользователя, которая будет мапиться на диск, указанный в 'logon drive' logon home = \\PDC\%U # Имя сетевого диска, для подключения домашней папки logon drive = W: # Имя скрипта, выполняемое при заходе на компьютер logon script = logon.bat # Путь log файла и его максимальный размер в килобайтах log file = /var/log/samba/samba.log max log size = 50000 # Включаем использование шифрованных паролей encrypt passwords = yes # Вызов wbinfo -u и wbinfo -g будет возвращать список доменных пользователей и групп соответственно winbind enum groups = yes winbind enum users = yes # Добавляет имя домена к имени пользователя, т.е. если мы указали user1, # то имя будет трактоваться как SYSADM\\user1 winbind use default domain = yes # Указываем, где хранить idmap преобразования idmap backend = ldap:"ldap://127.0.0.1/" ldap idmap suffix = ou=Idmap # Диапазон для маппинга uid/gid соответственно idmap uid = 10000-50000 idmap gid = 10000-50000 # Необходимые опции для полноценной работы с LDAP бекэндом ldapsam:trusted = yes ldapsam:editposix = yes # Синхронизируем LDAP пароли с NT и LM хешами (sambaLMPassword/sambaNTPassword) # При изменении пароля через windows он будет автоматически синхронизирован с LDAP. ldap passwd sync = yes # Удаляем полностью dn ldap delete dn = yes # Указываем, где LDAP хранит информацию о пользователях, группах и компьютерах ldap suffix = dc=sys-adm,dc=local ldap user suffix = ou=Users ldap group suffix = ou=Groups ldap machine suffix = ou=Computers # DN (Distinguished Name) используемой самбой при доступе к LDAP каталогу ldap admin dn = "cn=root,dc=sys-adm,dc=local" # Указываем самбе, что всю информацию о пользователях и группах мы храним в LDAP каталоге passdb backend = ldapsam:"ldap://127.0.0.1/" # Отключаем использование SSL ldap ssl = off enable privileges = yes # Наш сервер будет master browser, а так же будет выполнять роль доменного мастера # и logon сервера. os level = 128 local master = yes domain master = yes preferred master = yes domain logons = yes # Указываем что наш сервер будет выполнять роль WINS сервера wins support = yes # Так как наш PDC является wins сервером, включаем данный функционал dns proxy = yes # Сервер является источником синхронизации времени time server = yes # Используем NTLMv2 client ntlmv2 auth = yes # Запрещаем отправлять пароль в чистом виде, если сервер не поддерживает шифрование client plaintext auth = no # Отключаем использование старых методов аутентификации lanman auth = no lm announce = no # Время неактивности в минутах, после чего соединение считается мертвым и закрывается. deadtime = 15 # Задаем кодировки display charset = utf8 unix charset = utf8 dos charset = cp866 # Уровень информативности в log файлах log level = 3 # Наш сервер не является DFS сервером host msdfs = no # Скрипты для модификаций учетных записей add user script = /usr/sbin/smbldap-useradd -a -m "%u" add machine script = /usr/sbin/smbldap-useradd -w '%u' -g 515 add group script = /usr/sbin/smbldap-groupadd -a "%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" delete user script = /usr/sbin/smbldap-userdel -r "%u" delete group script = /usr/sbin/smbldap-groupdel "%g" rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold' # Тюнинг сокета socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192 SO_KEEPALIVE [home] comment = Home Directories path = /home/%U read only = no public = no writable = yes create mask = 0600 browseable = no directory mask = 0700 [netlogon] comment = Network Logon Service path = /var/lib/samba/netlogon guest ok = yes writable = yes write list = "@SYSADM\Domain admins" browseable = no [IPC$] path = /tmp
Задаем пароль для доменного пользователя, которого мы указали в ldap admin dn
# smbpasswd -w 1234567 Setting stored password for "cn=root,dc=sys-adm,dc=local" in secrets.tdb
Сохраняем доменный SID
# net getdomainsid SID for local machine PDC is: S-1-5-21-3476215178-4255336796-2547748680 SID for domain SYSADM is: S-1-5-21-206255134-223837211-2022137911
Запускаем samba
# service smb start Starting SMB services: [ OK ] Starting NMB services: [ OK ]
Необходимо подождать около минуты, пока пройдут выборы. Узнать о том, что наш PDC стал локальным и доменным мастер браузером можно с помощью следующей команды
# nmblookup 'SYSADM#1b' 'SYSADM#1c' added interface eth0 ip=192.168.127.2 bcast=192.168.127.255 netmask=255.255.255.0 Socket opened. querying SYSADM on 192.168.127.255 Got a positive name query response from 192.168.127.2 ( 192.168.127.2 ) 192.168.127.2 SYSADM<1b> querying SYSADM on 192.168.127.255 Got a positive name query response from 192.168.127.2 ( 192.168.127.2 ) 192.168.127.2 SYSADM<1c>
После этого запускаем winbind
# service winbind start Starting Winbind services: [ OK ]
Вводим наш сервер в домен. В принципе в параметре -U можно указать любого пользователя, у которого есть право на добавление компьютеров в домен.
# net rpc join -U sysadm-da MEMBER Enter sysadm-da's password: Joined domain SYSADM.
После добавления PDC в домен у учетной записи PDC$ должен появиться новый атрибут sambaNTPassword
# smbldap-usershow PDC$ dn: uid=PDC$,ou=Computers,dc=sys-adm,dc=local cn: PDC$ uid: PDC$ uidNumber: 10000 gidNumber: 515 homeDirectory: /nonexistent loginShell: /bin/false description: Computer gecos: Computer objectClass: posixAccount,account,sambaSamAccount sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaPwdMustChange: 2147483647 sambaSID: S-1-5-21-206255134-223837211-2022137911-10001 sambaPrimaryGroupSID: S-1-5-21-206255134-223837211-2022137911-515 displayName: PDC$ sambaDomainName: SYSADM sambaNTPassword: 51A8827A71C511FF556408867FB3330F sambaPwdLastSet: 1337889271 sambaAcctFlags: [S ]
Проверяем информацию о домене
# net rpc info -U sysadm-da Enter sysadm-da's password: Domain Name: SYSADM Domain SID: S-1-5-21-206255134-223837211-2022137911 Sequence number: 1337889347 Num users: 2 Num domain groups: 4 Num local groups: 0
Производим базовые проверки
# wbinfo -p Ping to winbindd succeeded # wbinfo -t checking the trust secret for domain SYSADM via RPC calls succeeded # wbinfo -i sysadm-da sysadm-da:*:0:0:sysadm-da:/home/sysadm-da:/bin/false # wbinfo -g | grep "domain" domain admins domain users domain guests domain computers
Проверяем аутентификацию через демон winbind
# wbinfo -a sysadm-da%1234567 plaintext password authentication succeeded challenge/response password authentication succeeded
Проверяем преобразование SID → uid и uid → SID
# wbinfo --name-to-sid=SYSADM\\sysadm-da S-1-5-21-206255134-223837211-2022137911-500 User (1) # wbinfo --sid-to-uid=S-1-5-21-206255134-223837211-2022137911-500 0
Добавляем запуск самбы при старте системы
# chkconfig --level 35 smb on # chkconfig --level 35 winbind on
В качестве теста попробуем ввести две машины в наш новый домен, одна из них будет Windows XP Professional SP3, а вторая Windows 7 Professional SP1. Для Win7 мы создадим учетную запись командой, в то время как для Win XP запись создатся автоматически.
Собственно процедура ввода в домен Windows XP стандартная. В свойствах ситемы на вкладке 'Имя компьютера' выбираем Изменить и в появившемся диалоговом окне вводит имя домена, в нашем случае SYSADM
После нажатия конпки Ok появится диалоговое окно с запросом учетных данных пользователя, обладающего правами на добавление компьютера в домен, в нашем случае это пользователь sysadm-da, который является администратором домена и был создан автоматически при выполнении скрипта smbldap-populate.
После того, как компьютер будет успешно добавлен на экране отобразится соответствующее информационное окно
После этого необходимо перезагрузить компьютер и при вводе логина и пароля в поле 'Вход в' выбрать наш домен
Если посмотреть свойства системы, то будет видно, что компьютер теперь является участником домена
Если открыть 'Мой компьютер', то будет виден подключенный сетевой диск с домашней папкой пользователя.
В сетевом окружении должен быть виден наш домен SYSADM
Внутри которого должны быть видны 3 компьютера - pdc, windows xp и windows 7
А так выглядят утилиты User Manager и Server Manager соответственно из архива srvtools.zip
Ниже привожу аналогичные свойства, но только для Windows 7. Как я уже писал выше, для компьютера на базе Windows 7 мы создадим учетную запись сами, из командной строки
# smbldap-useradd -W -g 515 Win7 # smbldap-usershow Win7$ dn: uid=Win7$,ou=Computers,dc=sys-adm,dc=local cn: Win7$ uid: Win7$ uidNumber: 10001 gidNumber: 515 homeDirectory: /nonexistent loginShell: /bin/false description: Computer gecos: Computer objectClass: posixAccount,account,sambaSamAccount sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaPwdMustChange: 2147483647 sambaAcctFlags: [W ] sambaSID: S-1-5-21-206255134-223837211-2022137911-10003 sambaPrimaryGroupSID: S-1-5-21-206255134-223837211-2022137911-515 displayName: Win7$ sambaDomainName: SYSADM sambaNTPassword: 5E415440CC8A65306EF7A88D88D8B3C3 sambaPwdLastSet: 1338147705 # smbldap-usershow WINXPSP3$ dn: uid=WINXPSP3$,ou=Computers,dc=sys-adm,dc=local uid: WINXPSP3$ sambaSID: S-1-5-21-206255134-223837211-2022137911-10002 sambaAcctFlags: [W ] objectClass: sambaSamAccount,account,posixAccount cn: WINXPSP3$ uidNumber: 10000 gidNumber: 513 homeDirectory: /home/SYSADM/SMB_workstations_home loginShell: /bin/false sambaNTPassword: DFFC9CCB77ABA78CA5F1DEB0E69E8AEB sambaPwdLastSet: 1338046413
Как видно из вывода, запись для компьютера Win7 содержит намного больше полей, чем для WINXPSP3. В принципе обе записи являются рабочими, но я предпочитаю создавать записи для рабочих станций из командной строки.
На этом настройку можно считать завершенной.
В связи со скорым выходом новой ОС Windows 8 решил проверить работу данной ОС в домене samba. Как и ожидалось никаких проблем с вводом Windows 8 в домен не оказалось. Для теста использовалась Windows 8 Consumer Preview. Ниже привожу несколько скриншотов
Сегодня, в первые за 5 лет использования в качестве КД samba, столкнулся с невозможностью зайти на компьютер под доменой учетной записью. При попытке входа на рабочую станцию выдается сообщение с ошибкой - «The local Session Manager service failed the logon. Data area passed to a system call is too small». Немного поискав в интернете обнаружил, что я не одинок - https://bugzilla.samba.org/show_bug.cgi?id=7343 . А здесь собственно дается пояснение - если в двух словах, то длина учетной записи, а в нашем случае длина поля uid, должна быть меньше 20 символов.