Здесь опишу как я делал систему авторизации пользователей windows в samba+ldap. Простейший сервер для сетевой авторизации, без прописывания в DNS и DHCP, без авторизации с помощью керберос, но сетевыми профилями хранящимися на сервере. Самое необходимое для небольшого офиса, что бы не покупать дорогущий сервер Windows с AD при минимальных временных затратах. Данный сервер был установлен на Fedora 10. Использовались пакеты из репозитария.Ничего не перекомпилировалось, все так сказать из коробки. Итак:
Сервер для авторизации windows клиентов с контролем доступа к ресурсам на основе Samba+OpenLDAP+Smbldap-tools
Для начала были установлены следующие пакеты:
# yum install samba openldap-servers smbldap-tools
После установки компонентов и их зависимостей, настраиваем ldap сервер. Для данной работу нужно сконфигурировать два файла. ldap.conf - конфиг клиента используемого самим сервером, и конечно же, slapd.conf - для конфигурации сервера. Оба файла находятся в /etc/openldap/ для своего сервера я использовал следующие конфигурации:
Конфиг ldap.conf
Конфиг slapd.conf
Разберём указанные директивы файла ldap.conf.
указываем базовый DN нашего домена должно указываться в отличительном формате LDAP:
Далее идет опция указывающая местонахождения сервера LDAP, в данном случае это 127.0.0.1:
Теперь рассмотрим директивы непосредственно самого сервера OpenLDAP указаные в его основном конфиге slapd.conf:
директивами include обозначаеться местонахождение файлов схем. Схемы являються своеобразными скриптами написанными на языке который понимает OpenLDAP, они служат для более простого создания нужной информации в базе данных LDAP сервера. В нашем случае используються стандарные схемы которые идут в комплекте с пакетами samba и другими. Нам нужны только эти:
Разрешаем доступ к ldap по протоколу LDAP версии 2
Директива указувающая на файл в котором прописаны аргументы запуска демона из командной строки. То есть те аргументы котрые вы бы прописали для запускаемого вручную bp rjvfylyjq cnhjrb демона LDAP:
Указываем формат базы данных. В данном случае это bdb:
Суфикс DN нашего домена:
Указываем корневого пользователя для нашего сервера:
в директиве:
Доступ к записям в базе LDAP где храняться пароли Samba пользователей. Разрешаем запись для авторизированных пользователей, анонимным пользователям даем право на авторизацию, остальным запрещаем доступ к парольным записям:
Атрибут обновления Shadow на запись только авторизированным клиентам:
Разберем указаные директивы. В начале у меня идут директивы работающие с именными параметрами сервера. В первой директиве указано что NetBios имя нашего сервера MAIN
Рабочая группа домена WORKGROUP
Расширенное описание сервера которое будет видно для windows клиентов
Сетевые настройки. Доступ до сервера разрешаем только для указных подсетей. В данном случае это петлевой интерфейс и локалка 10.12.0.0 с маской 255.255.255.0.
Для контроллера домена уровень доступа выставляем в user:
Указываем что пароли при передаче по сети следует шифровать:
Опции для соединения клиентов с сервером:
Интерфейсы которые на которых демон будет ожидать соединения:
Проверяем пакеты на соответствие широковещательному адресу для указанных интерфейсов, если пакет не соответствует этому адресу то не обрабатываем его:
Ниже следуют некоторые настройки для NetBios сервера. Указываем что наш сервер должен пытаться стать мастер-браузером NetBios в сети:
Указываем уровень сервера в выборах мастер-браузера сети. Максимальное значение 255. Данный параметр сравнивается с параметрами остальными присутствующих в подсети клиентов NetBios и в зависимости от величин устанавливается какой сервер будет мастер-браузеров:
Указываем что наш сервер может составлять списки машин в сети, и передавать их, в случае более высокого уровня у какой либо из машин, для мастер-браузера сети:
Если у вас один сервер в сети лучше всего выставить в принудительный захват роли мастер-браузера, если нет то следует очень осторожно обращаться с данным параметром, так как он может вызвать высокий широковещательный трафик в сети:
Некоторые параметры безопастности. Запрещаем пустые пароли:
Запрещаем показывать нечитаемые для клиентов файлы:
Запрещаем показывать файлы которые начинаются с точки. (Для LInux являются скрытыми файлами):
Поддержка режима работы для станций Win9x и режима работы как контроллер NT4:
Парметры указывающие пути до домашних директорий на сервере для пользователей, а так же сетевой диск с данными профиля, где под %L будет пониматься наш сервер, а %U имя пользователя :
Включаем поддержку WINS:
Указываем в каком порядке использовать методы резолвинга имён хостов в сети. В данном случае используются сначала wins, потом файл самбы lmhost, потом файл hosts системы, потом при помощи широковещательной рассылки:
Указываем что если демон wins не смог разрешить имя NetBios, то следует сделать запрос к серверу DNS:
Указываем что данный серве являеться сетевым сервером времени для Windows машин:
Указываем уровень вывода отладочной информации в лог. Также указываем вывод информации о чтении-записи в файловые системы.
Указываем лог-файл для сервера, в данном случае использеться разный лог для разных машин что указывает переменная %m:
Указываем, что не следует ограничивать размер файла лога:
Далее следуют скрипты обработки данных для работы с LDAP и samba из пакета smbldap-tools:
Скрипт добавления пользователя в домен:
Скрипт добавления машины в домен:
Скрипт добавления группы пользователей в домен:
Скрипт добавления пользователей в группу домена:
Скрипт удаления пользователея из группы домена:
Указываем параметры для работы с LDAP:
Адрес сервера LDAP. В нашем случае Samba и LDAP сервера находяться на одной машине:
Разрешаем операции удаления в данных в LDAP:
Не используем ssl соединение c LDAP:
Указываем суффикс для сервера:
Указываем DN администратора для соединения с LDAP:
Суффикс группы в базе LDAP:
Суффикс пользователей в базе LDAP:
Суффикс машин в базе LDAP (тут указан тот же суффикс что и для пользователей из-за некоторой ошибки при работе с LDAP при присоединении компьютера к домену) :
IDmap суффикс в базе LDAP:
Указываем кодировку для Windows клиентов (для корректной поддержки кириллицы в именах файлов):
Указываем что демону syslog передавать только сообщения о ошибках:
Системный ресурс [profiles] это ресурс на котором записывается профиль пользователя. У меня установлены следующие директивы:
комментарий к ресурсу который увидит пользователь Windows:
Путь до ресурса. Зависит от имени пользователя и домена.
Указываем что данные на шара могут быть перезаписаны пользователем:
Указываем что демон должен прочитать DOS атрибуты(Скрытй, Архивный, Только для чтения) файлов, из расширенных атрибутов прежде чем преобразовать атрибуты DOS в атрибуты UNIX:
Указываем маску для файлов создаваемых пользователем:
И маску для директорий создаваемых пользователем:
Далее следует каталог для пользовательской домашней директории [homes].
Путь на сервере в зависимости от имени пользователя, в папке /home/:
Маска для пользователей которым разрешён вход на ресурс:
Указываем что данный ресур не будет виден из проводника windows:
Не чувствительность к регистру символов для этого ресурса:
До данной директории допускаем только клиентов нашей подсети:
Указываем ресурс [IPC$] (Inter Process Communication) данный ресурс предназначен для создания именованных каналов, для обмена различной служебной информацией меж компютерами. Путь ресурса будет в папочке /tmp системы:
Разрешаем доступ до ресурса только для нашей подсети и запрещаем для всех остальных:
С конфигом smb.conf закончили. Нужно внести пароль для DN указаного в директиве 'ldap admin dn' в конфиге smb.conf, выполнив команду:
Далее следует указать настройки для локальной аутентификации. Для этого указываем в фале nsswitch.conf что для авторизации также используем winbind, добавляя параметр winbind для директив passwd, shadow, group:
Так же следует изменить файл /etc/ldap.conf принадлежащей пакету nss_ldap:
Имя сервера:
База на сервере LDAP:
Возвращение ошибки для nss_ldap при недоступности ldap:
Шифруем пароли методом md5:
Не используем ssl:
Указываем что атрибут member будет использоваться при запросах как атрибут uniqueMember:
Фильтр поиска по базе LDAP:
Далее следуют указание где искать данные для passwd, shadow, group,
Уровень отображения ошибок. Можно при настройке использовать уровень 256 что бы видеть отладочные сообщения:
Место нахождения log-файла:
Теперь настроим утилиту для взаимодействия с LDAP и самбой smbldap-tools. У утилиты есть два конфигурационых файла, находящихся в /etc/smbldap-tools/. Это smbldap_bind.conf и smbldap.conf, первый содержит параметры соединения с базой LDAP, второй содержит парметры для взаимодействия с базой LDAP. Итак smbldap_bind.conf:
Директива masterDN содержит DN в формате LDAP для основного доступа:
Параметр masterPw содержит пароль основного доступа
Рассмотрим директивы поподробнее. Первая это SID локальной системы. Что бы его получить следует запустить сервисы Samba:
После чего выполнить команду
которая в ответ выдаст SID локальной системы. Его следует скопировать в нижеследующую директиву:
Домен Samba кторый указали в конфиге smb.conf:
Указываем адресс основного сервера LDAP и порт который слушает LDAP:
требуем проверки сертификата сервера:
основные DN сервера:
Указываем как брать свобные UNIX UID и GID для новых пользователей:
Диапазон по умолчанию:
Метод шифрования:
Параметры пользователей которые будут прописаны в LDAP.
Шелл для пользователя:
Домашняя директория с точки зрения сервера:
Права дуступа для домашних каталогов:
Вспомогательное поле для пользовователей, содержашее дополнительную информацию:
Samba GID для пользователея по умолчанию:
Samba GID для компютера по умолчанию:
Директория которая буде копироваться в профиль новых пользователей:
Время жизни пароля по умолчанию в сутках:
Путь до домашней директории пользователя Samba:
Сетевой диск с домашней директорией подключаемы у клиента:
Почтовый домен:
Позволяет не использовать smbpasswd и slappasswd предпочитая Crypt:: библиотеки:
Будут внесены основные пользователи и группы. Остальных пользователей добавляем командой:
После этого в можно заводить пользовательский машины в домен.
Может что то забыл. Буду дополнять и исправлять статью по мере нахождения ошибок.
Конфиг ldap.conf
BASE dc=domain,dc=local
URI ldap://127.0.0.1/
Конфиг 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/misc.schema
include /etc/openldap/schema/samba.schema
allow bind_v2
loglevel 256
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database bdb
suffix "dc=domain,dc=local"
rootdn "cn=root,dc=domain,dc=local"
rootpw {MD5}secret_hash
access to attrs=userPassword,sambaLMPassword,sambaNTPassword
by self write
by anonymous auth
by * none
access to dn.base=""
by * read
access to dn.base="cn=Subschema"
by * read
access to attrs=shadowLastChange
by self write
by * read
access to *
by * read
directory /var/lib/ldap
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index objectClass,uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname eq,subinitial
database monitor
Разберём указанные директивы файла ldap.conf.
указываем базовый DN нашего домена должно указываться в отличительном формате LDAP:
BASE dc=domain,dc=local
Далее идет опция указывающая местонахождения сервера LDAP, в данном случае это 127.0.0.1:
URI ldap://127.0.0.1/
Теперь рассмотрим директивы непосредственно самого сервера OpenLDAP указаные в его основном конфиге slapd.conf:
директивами include обозначаеться местонахождение файлов схем. Схемы являються своеобразными скриптами написанными на языке который понимает OpenLDAP, они служат для более простого создания нужной информации в базе данных LDAP сервера. В нашем случае используються стандарные схемы которые идут в комплекте с пакетами samba и другими. Нам нужны только эти:
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/misc.schema
include /etc/openldap/schema/samba.schema
Разрешаем доступ к ldap по протоколу LDAP версии 2
allow bind_v2На время настроек устанавливаем высокий уровень логов, для выявления ошибок:
loglevel 256Стандартная директива указывающая на пид файл демона
pidfile /var/run/openldap/slapd.pid
Директива указувающая на файл в котором прописаны аргументы запуска демона из командной строки. То есть те аргументы котрые вы бы прописали для запускаемого вручную bp rjvfylyjq cnhjrb демона LDAP:
argsfile /var/run/openldap/slapd.args
Указываем формат базы данных. В данном случае это bdb:
database bdb
Суфикс DN нашего домена:
suffix "dc=domain,dc=local"
Указываем корневого пользователя для нашего сервера:
rootdn "cn=root,dc=domain,dc=local"Далее следует указать хеш пароля для вышеуказаного пользователя сгенерированный командой:
#slappasswd -h {MD5}
в директиве:
rootpw {MD5}secret_hashкуда вместо secret_hash следует вписать хеш сгененрированный вышеуказанной командой. Далее указываем правила доступа к данным храняшимся в LDAP:
Доступ к записям в базе LDAP где храняться пароли Samba пользователей. Разрешаем запись для авторизированных пользователей, анонимным пользователям даем право на авторизацию, остальным запрещаем доступ к парольным записям:
access to attrs=userPassword,sambaLMPassword,sambaNTPasswordУстанавливаем на данные право только для чтения всем клиентам:
by self write
by anonymous auth
by * none
access to dn.base=""
by * read
access to dn.base="cn=Subschema"
by * read
Атрибут обновления Shadow на запись только авторизированным клиентам:
access to attrs=shadowLastChangeОстальное только для чтения для всех:
by self write
by * read
access to *Теперь настроим Samba сервер. Основной конфиг самбы находиться в /etc/samba/ называеься smb.conf. Привожу свой рабочий конфиг:
by * read
netbios name = MAIN
workgroup = DOMAIN
server string = LDAP PDC
hosts allow = 10.12.0.0/24 127.0.0.0/8
security = user
encrypt passwords = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = lo eth0
bind interfaces only = yes
local master = yes
os level = 65
domain master = yes
preferred master = yes
null passwords = no
hide unreadable = yes
hide dot files = yes
domain logons = yes
logon path = \\%L\profiles\%U
logon drive = H:
logon home = \\%L\%U
wins support = yes
name resolve order = wins lmhosts host bcast
dns proxy = no
time server = yes
log level = 3 vfs:2
log file = /var/log/samba/log.%m
max log size = 0
add user script = /usr/sbin/smbldap-useradd -m "%u"
add machine script = /usr/sbin/smbldap-useradd -w -i "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%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"
passdb backend = ldapsam:ldap://127.0.0.1/
ldap delete dn = Yes
ldap ssl = no
winbind nested groups = no
ldap suffix = dc=domain,dc=local
ldap admin dn = cn=root,dc=domain,dc=local
ldap group suffix = ou=Group
ldap user suffix = ou=People
ldap machine suffix = ou=People
ldap idmap suffix = ou=Idmap
dos charset = CP866
syslog = 0
[netlogon]
path = /var/lib/samba/netlogon/
guest ok = Yes
browseable = no
write list = root
writable = no
share modes = no
[profiles]
comment = Network Profiles Service
path = %H
read only = No
store dos attributes = Yes
create mask = 0660
directory mask = 0770
[homes]
path = /home/%U
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
# inherit acls = Yes
create mask = 0660
directory mask = 0770
case sensitive = no
hosts allow = 10.12.0.0/24
[IPC$]
path = /tmp
hosts allow = 10.12.0.0/24 127.0.0.1
hosts deny = 0.0.0.0/0
Разберем указаные директивы. В начале у меня идут директивы работающие с именными параметрами сервера. В первой директиве указано что NetBios имя нашего сервера MAIN
netbios name = MAIN
Рабочая группа домена WORKGROUP
workgroup = WORKGROUP
Расширенное описание сервера которое будет видно для windows клиентов
server string = LDAP PDC
Сетевые настройки. Доступ до сервера разрешаем только для указных подсетей. В данном случае это петлевой интерфейс и локалка 10.12.0.0 с маской 255.255.255.0.
hosts allow = 10.12.0.0/24 127.0.0.0/8
Для контроллера домена уровень доступа выставляем в user:
security = user
Указываем что пароли при передаче по сети следует шифровать:
encrypt passwords = yes
Опции для соединения клиентов с сервером:
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
Интерфейсы которые на которых демон будет ожидать соединения:
interfaces = lo eth0
Проверяем пакеты на соответствие широковещательному адресу для указанных интерфейсов, если пакет не соответствует этому адресу то не обрабатываем его:
bind interfaces only = yes
Ниже следуют некоторые настройки для NetBios сервера. Указываем что наш сервер должен пытаться стать мастер-браузером NetBios в сети:
local master = yes
Указываем уровень сервера в выборах мастер-браузера сети. Максимальное значение 255. Данный параметр сравнивается с параметрами остальными присутствующих в подсети клиентов NetBios и в зависимости от величин устанавливается какой сервер будет мастер-браузеров:
os level = 65
Указываем что наш сервер может составлять списки машин в сети, и передавать их, в случае более высокого уровня у какой либо из машин, для мастер-браузера сети:
domain master = yes
Если у вас один сервер в сети лучше всего выставить в принудительный захват роли мастер-браузера, если нет то следует очень осторожно обращаться с данным параметром, так как он может вызвать высокий широковещательный трафик в сети:
preferred master = yes
Некоторые параметры безопастности. Запрещаем пустые пароли:
null passwords = no
Запрещаем показывать нечитаемые для клиентов файлы:
hide unreadable = yes
Запрещаем показывать файлы которые начинаются с точки. (Для LInux являются скрытыми файлами):
hide dot files = yes
Поддержка режима работы для станций Win9x и режима работы как контроллер NT4:
domain logons = yesВыключаем поддержку вложенных групп:
winbind nested groups = no
Парметры указывающие пути до домашних директорий на сервере для пользователей, а так же сетевой диск с данными профиля, где под %L будет пониматься наш сервер, а %U имя пользователя :
logon path = \\%L\profiles\%U
logon drive = H:
logon home = \\%L\%U
Включаем поддержку WINS:
wins support = yes
Указываем в каком порядке использовать методы резолвинга имён хостов в сети. В данном случае используются сначала wins, потом файл самбы lmhost, потом файл hosts системы, потом при помощи широковещательной рассылки:
name resolve order = wins lmhosts host bcast
Указываем что если демон wins не смог разрешить имя NetBios, то следует сделать запрос к серверу DNS:
dns proxy = no
Указываем что данный серве являеться сетевым сервером времени для Windows машин:
time server = yes
Указываем уровень вывода отладочной информации в лог. Также указываем вывод информации о чтении-записи в файловые системы.
log level = 3 vfs:2
Указываем лог-файл для сервера, в данном случае использеться разный лог для разных машин что указывает переменная %m:
log file = /var/log/samba/log.%m
Указываем, что не следует ограничивать размер файла лога:
max log size = 0
Далее следуют скрипты обработки данных для работы с LDAP и samba из пакета smbldap-tools:
Скрипт добавления пользователя в домен:
add user script = /usr/sbin/smbldap-useradd -m "%u"
Скрипт добавления машины в домен:
add machine script = /usr/sbin/smbldap-useradd -w -i "%u"
Скрипт добавления группы пользователей в домен:
add group script = /usr/sbin/smbldap-groupadd -p "%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"
Указываем параметры для работы с LDAP:
Адрес сервера LDAP. В нашем случае Samba и LDAP сервера находяться на одной машине:
passdb backend = ldapsam:ldap://127.0.0.1/
Разрешаем операции удаления в данных в LDAP:
ldap delete dn = Yes
Не используем ssl соединение c LDAP:
ldap ssl = no
Указываем суффикс для сервера:
ldap suffix = dc=domain,dc=local
Указываем DN администратора для соединения с LDAP:
ldap admin dn = cn=root,dc=domain,dc=local
Суффикс группы в базе LDAP:
ldap group suffix = ou=Group
Суффикс пользователей в базе LDAP:
ldap user suffix = ou=People
Суффикс машин в базе LDAP (тут указан тот же суффикс что и для пользователей из-за некоторой ошибки при работе с LDAP при присоединении компьютера к домену) :
ldap machine suffix = ou=People
IDmap суффикс в базе LDAP:
ldap idmap suffix = ou=Idmap
Указываем кодировку для Windows клиентов (для корректной поддержки кириллицы в именах файлов):
dos charset = CP866
Указываем что демону syslog передавать только сообщения о ошибках:
syslog = 0На этом раздел [global] закрыт. Делее следуют разделы в которых указываются общие ресурсы и доступ к ним.
Системный ресурс [profiles] это ресурс на котором записывается профиль пользователя. У меня установлены следующие директивы:
комментарий к ресурсу который увидит пользователь Windows:
comment = Network Profiles Service
Путь до ресурса. Зависит от имени пользователя и домена.
path = %H
Указываем что данные на шара могут быть перезаписаны пользователем:
read only = No
Указываем что демон должен прочитать DOS атрибуты(Скрытй, Архивный, Только для чтения) файлов, из расширенных атрибутов прежде чем преобразовать атрибуты DOS в атрибуты UNIX:
store dos attributes = Yes
Указываем маску для файлов создаваемых пользователем:
create mask = 0660
И маску для директорий создаваемых пользователем:
directory mask = 0770
Далее следует каталог для пользовательской домашней директории [homes].
Путь на сервере в зависимости от имени пользователя, в папке /home/:
path = /home/%U
Маска для пользователей которым разрешён вход на ресурс:
valid users = %S, %D%w%S
Указываем что данный ресур не будет виден из проводника windows:
browseable = No
Не чувствительность к регистру символов для этого ресурса:
case sensitive = no
До данной директории допускаем только клиентов нашей подсети:
hosts allow = 10.12.0.0/24
Указываем ресурс [IPC$] (Inter Process Communication) данный ресурс предназначен для создания именованных каналов, для обмена различной служебной информацией меж компютерами. Путь ресурса будет в папочке /tmp системы:
path = /tmp
Разрешаем доступ до ресурса только для нашей подсети и запрещаем для всех остальных:
hosts allow = 10.12.6.0/24 127.0.0.1
hosts deny = 0.0.0.0/0
С конфигом smb.conf закончили. Нужно внести пароль для DN указаного в директиве 'ldap admin dn' в конфиге smb.conf, выполнив команду:
# smbpasswd -WИ введя соответсвующий пароль.
Далее следует указать настройки для локальной аутентификации. Для этого указываем в фале nsswitch.conf что для авторизации также используем winbind, добавляя параметр winbind для директив passwd, shadow, group:
passwd: files ldap winbind
shadow: files ldap winbind
group: files ldap winbind
Так же следует изменить файл /etc/ldap.conf принадлежащей пакету nss_ldap:
host mainДирективы файла означают следующее:
base dc=domain,dc=local
bind_policy soft
pam_password md5
ssl no
nss_map_attribute uniqueMember member
pam_filter objectclass=posixAccount
nss_base_passwd ou=Computers,dc=domain,dc=local
nss_base_passwd ou=People,dc=domain,dc=local
nss_base_shadow ou=Computers,dc=domain,dc=local
nss_base_shadow ou=People,dc=domain,dc=local
nss_base_group ou=Group,dc=domain,dc=local
debug 0
logdir /var/log/nss_ldap
Имя сервера:
host main
База на сервере LDAP:
base dc=domain,dc=local
Возвращение ошибки для nss_ldap при недоступности ldap:
bind_policy soft
Шифруем пароли методом md5:
pam_password md5
Не используем ssl:
ssl no
Указываем что атрибут member будет использоваться при запросах как атрибут uniqueMember:
nss_map_attribute uniqueMember member
Фильтр поиска по базе LDAP:
pam_filter objectclass=posixAccount
Далее следуют указание где искать данные для passwd, shadow, group,
nss_base_passwd ou=Computers,dc=domain,dc=local
nss_base_passwd ou=People,dc=domain,dc=local
nss_base_shadow ou=Computers,dc=domain,dc=local
nss_base_shadow ou=People,dc=domain,dc=local
nss_base_group ou=Group,dc=domain,dc=local
Уровень отображения ошибок. Можно при настройке использовать уровень 256 что бы видеть отладочные сообщения:
debug 0
Место нахождения log-файла:
logdir /var/log/nss_ldap
Теперь настроим утилиту для взаимодействия с LDAP и самбой smbldap-tools. У утилиты есть два конфигурационых файла, находящихся в /etc/smbldap-tools/. Это smbldap_bind.conf и smbldap.conf, первый содержит параметры соединения с базой LDAP, второй содержит парметры для взаимодействия с базой LDAP. Итак smbldap_bind.conf:
masterDN="cn=root,dc=domain,dc=local"Параметры означают следующее:
masterPw="secret"
Директива masterDN содержит DN в формате LDAP для основного доступа:
masterDN="cn=root,dc=domain,dc=local"
Параметр masterPw содержит пароль основного доступа
masterPw="secret"Можно также настроит и вторичный доступ к серверу директивами slaveDN и slavePw. Я не стал усложнять и указал root пользователя из конфига LDAP, хотя ради безопастности можно создать отдельного пользователя в базе LDAP который бы имел права на изменение параметров других пользователей.
SID="S-1-5-21-76483924-3502640226-4065347779"
sambaDomain="DOMAIN"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
verify="require"
cafile="/etc/pki/tls/certs/ldapserverca.pem"
clientcert="/etc/pki/tls/certs/ldapclient.pem"
clientkey="/etc/pki/tls/certs/ldapclientkey.pem"
suffix="dc=domain,dc=local"
usersdn="ou=People,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Group,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
hash_encrypt="MD5"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"
userSmbHome="\\MAIN\%U"
userProfile="\\MAIN\profiles\%U"
userHomeDrive="H:"
mailDomain="domain.local"
with_smbpasswd="0"
with_slappasswd="0"
Рассмотрим директивы поподробнее. Первая это SID локальной системы. Что бы его получить следует запустить сервисы Samba:
#/etc/init.d/smb start
#/etc/init.d/nmb start
После чего выполнить команду
#net getlocalsid
которая в ответ выдаст SID локальной системы. Его следует скопировать в нижеследующую директиву:
SID="S-1-5-21-76483924-3502640226-4065347779"
Домен Samba кторый указали в конфиге smb.conf:
sambaDomain="DOMAIN"
Указываем адресс основного сервера LDAP и порт который слушает LDAP:
masterLDAP="127.0.0.1"Не используем TLS:
masterPort="389"
ldapTLS="0"
требуем проверки сертификата сервера:
verify="require"Пути до сертификатов сервера и клиента соотвественно:
cafile="/etc/pki/tls/certs/ldapserverca.pem"Суфикс в формате LDAP:
clientcert="/etc/pki/tls/certs/ldapclient.pem"
clientkey="/etc/pki/tls/certs/ldapclientkey.pem"
suffix="dc=domain,dc=local"
основные DN сервера:
usersdn="ou=People,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Group,${suffix}"
idmapdn="ou=Idmap,${suffix}"
Указываем как брать свобные UNIX UID и GID для новых пользователей:
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
Диапазон по умолчанию:
scope="sub"
Метод шифрования:
hash_encrypt="MD5"Формат соли для шифрования:
crypt_salt_format="%s"
Параметры пользователей которые будут прописаны в LDAP.
Шелл для пользователя:
userLoginShell="/bin/bash"
Домашняя директория с точки зрения сервера:
userHome="/home/%U"
Права дуступа для домашних каталогов:
userHomeDirectoryMode="700"
Вспомогательное поле для пользовователей, содержашее дополнительную информацию:
userGecos="User"
Samba GID для пользователея по умолчанию:
defaultUserGid="513"
Samba GID для компютера по умолчанию:
defaultComputerGid="515"
Директория которая буде копироваться в профиль новых пользователей:
skeletonDir="/etc/skel"
Время жизни пароля по умолчанию в сутках:
defaultMaxPasswordAge="45"
Путь до домашней директории пользователя Samba:
userSmbHome="\\MAIN\%U"Путь до профиля пользователя Samba:
userProfile="\\MAIN\profiles\%U"
Сетевой диск с домашней директорией подключаемы у клиента:
userHomeDrive="H:"
Почтовый домен:
mailDomain="mail.domain.local"
Позволяет не использовать smbpasswd и slappasswd предпочитая Crypt:: библиотеки:
with_smbpasswd="0"Теперь следует запустить службу LDAP
with_smbpasswd="0"
#/etc/init.d/ldap startТеперь с помощью скриптов из smbldap-tools заполняем базу данных:
#smbldap-populate
Будут внесены основные пользователи и группы. Остальных пользователей добавляем командой:
#smbldap-useradd -a -m -P user
После этого в можно заводить пользовательский машины в домен.
Может что то забыл. Буду дополнять и исправлять статью по мере нахождения ошибок.
во что забыл
ОтветитьУдалитьbdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap
Ну да этот файл следует создать в каталоге с базой данных. У меня он пустой.
ОтветитьУдалитьон лежит /usr/share/doc/openldap-servers-2.4.18/DB_CONFIG.example я его спопировал и переименовал
ОтветитьУдалитьи еще щас пробую все это на федоре 12 и наткнулся на вот что (уточняю openldap-servers 2.4.18) они все поменяли(враги блин)
--------------------
An existing slapd.conf(5) file can be converted to the new format using slaptest(8) or any of the slap tools:
slaptest -f /usr/local/etc/openldap/slapd.conf -F /usr/local/etc/openldap/slapd.d
You can then discard the old slapd.conf(5) file. Make sure to launch slapd(8) with the -F option to specify the configuration directory.
------------------
и еще учтони для людей
yum install migrationtools
потом правим /usr/share/migrationtools/migratiom_common.ph чтобы легко было сконвертить пользователей и т.д.
Щас все это проверю и попробую поставить Fedora Directory Server на существующую БД ldap.
https://wiki.samba.org/index.php/FAQ
ОтветитьУдалить"An LDAP backend to the AD DC is not a viable proposition at this point in time, as even with the addition of massive extra resources trying to revive it would create an incredible distraction. ..."