Интеграция LDAP и Samba
В этом разделе описывается материал по теме 305.4 экзамена на профессионала Linux высокого уровня (LPIC-3) 301. Эта тема обладает весом 1.
Из этого раздела вы узнаете:
- Как осуществить миграцию из
smbpasswd в LDAP
- Как понимать схему OpenLDAP Samba
- Как работает LDAP в качестве хранилища паролей Samba
Samba – это способ интеграции с сетями Microsoft Windows, используемый сообществом UNIX. С помощью этого программного обеспечения вы можете обмениваться файлами в сетях Microsoft (как в качестве клиента, так и в качестве сервера) и обеспечивать доступность компьютеров под управлением UNIX для других Windows-клиентов так же, как если бы это были компьютеры под управлением Windows.
Понимание аутентификации Samba
Поскольку служба Samba предназначена для интеграции с сетями Windows, она должна использовать механизмы аутентификации, которые используются в Windows. Если вы выполняете аутентификацию на Windows-сервере, это замечательно, однако часто в роли хранилища учетных данных выступает Samba-сервер. Таким образом, необходимы две копии хэшей пароля – одна для обычных паролей UNIX, а другая – для хэшей Microsoft.
Пароли Microsoft похожи на пароли UNIX тем, что в обоих случаях они являются хэшами реального пароля. Хэш-функция – это односторонняя функция, которая принимает на вход данные переменной длины (такие как пароль) и формирует на выходе хэш фиксированной длины (строку). Имея хэш, невозможно восстановить оригинальный пароль, хотя для того, чтобы получить данный хэш, потребуется перебрать миллиарды различных паролей.
Для паролей Microsoft хранятся два различных хэша: хэш LANManager и хэш Windows NT. Первый из них менее защищен по сравнению со вторым, поскольку перед хэшированием пароля выполняются несколько действий, призванных снизить количество возможных выходных данных. Хэш Windows NT был разработан для преодоления этих ограничений. Хотя система хранит оба хэша, вы можете отключить поддержку LANManager, если все ваши клиенты поддерживают хэши Windows NT (такая поддержка доступна в ОС Windows NT SP3 и более поздних версиях).
Традиционно Samba хранит хэши паролей в файле smbpasswd и использует инструменты наподобие smbpasswd для управления этим файлом. Эти хэши можно легко переместить в LDAP так, чтобы несколько Samba-серверов могли выполнять аутентификацию без необходимости использования контроллеров домена и других компонентов инфраструктуры Microsoft. Хранение данных в LDAP также уменьшает дублирование информации в вашей сети.
Как устроена схема Samba
Пароли NT отличаются от паролей UNIX и не могут храниться в атрибуте userPassword. По этой причине схему LDAP нужно расширить для обеспечения поддержки хранения хэшей паролей и другой информации, необходимой клиентам Microsoft.
Дистрибутив Samba содержит файл схемы samba.schema. Скопируйте его в каталог /etc/openldap/schema и используйте директиву include в файле slapd.conf, что сделает его частью схемы вашего сервера.
Схема samba.schema определяет несколько новых классов объектов, которые перечислены в таблице 4.
Таблица 4. Классы объектов в схеме samba.schema
| Класс объекта (objectClass) | Описание |
|---|
sambaSamAccount
| Содержит информацию (компьютер, пользователь и так далее), необходимую для учетной записи в среде NT. |
sambaGroupMapping
| Сопоставляет группу UNIX группе Windows. |
sambaTrustPassword
| Содержит необходимую для аутентификации информацию о доверительных отношениях между доменами. |
sambaDomain
| Содержит информацию о домене в дереве LDAP. Вы обнаружите, что один из них будет автоматически добавлен в ваше дерево LDAP после того, как вы настроите связку Samba/LDAP. |
Настройка Samba для использования с LDAP
Настройка совместной работы Samba и LDAP заключается в следующем: редактирование файла smb.conf с целью настройки источника данных LDAP; управление записями пользователей LDAP с целью использования новых атрибутов Samba.
В файле smb.conf вы найдете строку, похожую на passdb backend = tdbsam, которая определяет механизм хранения файла smbpasswd. Замените эту строку измененным для вашей среды кодом, приведенным в листинге 15.
Листинг 15. Использование хранилища паролей ldapsam
# Необходимо указать для ldapsam uri к серверу LDAP
passdb backend = ldapsam:ldap://192.168.1.138/
# Пользователь на сервере LDAP, которому разрешено выполнять
# чтение и запись новых атрибутов
# Пароль будет указан позже
ldap admin dn = cn=root,dc=ertw,dc=com
# То же, что и база поиска
ldap suffix = dc=ertw,dc=com
# Контейнеры OU для пользователей/компьютеров/групп
ldap user suffix = ou=People
ldap machine suffix = ou=Computers
ldap group suffix = ou=Group
|
По завершении редактирования файла smb.conf перезапустите Samba и выполните команду smbpasswd -W. Вам будет предложено ввести пароль учетной записи (DN) администратора LDAP, указанной в smb.conf. С этого момента Samba будет использовать данные LDAP для аутентификации пользователей.
Управление пользователями Samba в LDAP
Прежде чем пользователи смогут использовать Samba, для них необходимо настроить класс объекта sambaSamAccount, что включает в себя настройку хэшей паролей и назначение пользователю идентификатора безопасности (SID). Это легко сделать с помощью утилиты smbpasswd, которая обычно используется для добавления пользователей в файл smbpasswd. smbpasswd будет управлять пользователями LDAP в том случае, если в файле smb.conf выполнены все необходимые настройки для использования LDAP, как, например, в листинге 15.
Чтобы выполнить настройки для нового пользователя, сначала убедитесь, что его учетная запись содержит класс объекта posixAccount и атрибут uid, которые уже должны присутствовать, если пользователь подключался через LDAP, работающий совместно с PAM или NSS. После этого выполните команду smbpasswd -a имя_пользователя
, чтобы выполнить редактирование записи пользователя LDAP, включающее в себя указание пароля Samba. В листинге 16 показана типовая запись пользователя после ее настройки для работы с Samba.
Листинг 16. Запись пользователя Samba
dn: cn=Jim Joe,ou=people,dc=ertw,dc=com
givenName: Jim
sn: Joe
cn: Jim Joe
uid: jjoe
uidNumber: 1000
sambaSID: S-1-5-21-2287037134-1443008385-640796334-
userPassword:: e01ENX1yTDBZMjB6QytGenQ3MlZQek1TazJBPT0=
sambaLMPassword: 5BFAFBEBFB6A0942AAD3B435B51404EE
sambaNTPassword: AC8E657F83DF82BEEA5D43BDAF7800CC
loginShell: /bin/bash
gidNumber: 4
homeDirectory: /home/a
sambaAcctFlags: [U]
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: top
|
Строки листинга 16, выделенные жирным шрифтом, были добавлены в результате выполнения команды smbpasswd. Начиная сверху, для учетной записи добавлен идентификатор безопасности SID. Использование smbpasswd освобождает вас от вычисления этого значения, поскольку smbpasswd самостоятельно определяет, какой SID использовать. Далее хранятся хэши паролей LanManager и NT. Атрибут sambaAcctFlags используется для хранения некоторых атрибутов записи. Возможными значениями этого флага являются:
-
N: Пароль не требуется
-
D: Учетная запись отключена
-
H: Требуется наличие домашней директории
-
T: Временная копия другой учетной записи
-
U: Постоянная учетная запись пользователя
-
M: Учетная запись пользователя для подключения к кластеру MNS (Majority Node Set)
-
W: Учетная запись доверия рабочей станции
-
S: Учетная запись доверия сервера
-
L: Автоматическая блокировка
-
X: Срок действия пароля не ограничен
-
I: Учетная запись доверия домена
Наконец, класс объекта sambaSamAccount позволяет использовать все эти атрибуты.
В дополнение ко всему вышеизложенному, вы можете настраивать многие другие параметры для указания дополнительной информации, используемой Windows. Узнать о работе с информацией пользователя Samba из командной строки можно из man-руководства pdbedit. Samba может выступать в роли основного контроллера домена Windows (PDC), в этом случае дополнительная информация необходима для правильной работы Windows-клиентов.
Синхронизация паролей
Теперь, когда существуют два набора паролей (userPassword и два хэша Samba), необходимо найти способ синхронизации паролей между собой. Если пользователь меняет свой пароль Samba из командной строки или с помощью Windows-клиента, пароль UNIX также должен измениться. И наоборот, если пользователь меняет пароль UNIX, должен измениться пароль Samba.
В первом случае дела обстоят намного проще. Добавьте строку ldap password sync = yes в раздел [global] файла smb.conf и перезапустите Samba. После этого при изменении паролей будут меняться хэши как для userPassword, так и для Samba.
Чтобы при изменении пользователями своих паролей посредством UNIX-команды passwd также менялись пароли Samba, необходимо использовать PAM. Samba поставляется с модулем mod_smbpasswd, который используется для проверки и изменения паролей через систему Samba. В данный момент вам не нужна проверка паролей, поэтому будет использоваться только функция password. В листинге 17 показана часть конфигурационного PAM-файла, который в случае его использования изменяет в LDAP как пароль UNIX, так и пароль Samba.
Листинг 17. Конфигурация PAM для одновременного изменения паролей в UNIX и Samba
password requisite pam_cracklib.so try_first_pass retry=3
password optional pam_smbpass.so use_authtok use_first_pass
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
|
В листинге 17 была добавлена строка, выделенная жирным шрифтом. Модуль pam_smbpass указан как необязательный, поэтому, если пользователь не указан в качестве пользователя Samba, этот шаг будет пропущен. Строка, изменяющая пароль Samba, поставлена перед соответствующими строками для UNIX и LDAP, поскольку последние две имеют тип sufficient, что означает, что первый введенный успешный пароль прекращает дальнейшую обработку файла.
После применения настроек, показанных в листинге 17, при смене пользователем своего пароля из командной строки также будет изменяться пароль Samba.
Миграция существующих пользователей в LDAP
Когда вы переходите к использованию LDAP в качестве хранилища данных, вероятно, у вас уже имеются пользователи, чьи пароли хранятся в файлах и должны быть перенесены в LDAP. Утилита pdbedit умеет копировать учетные записи из одного места в другое, облегчая эту задачу.
В листинге 18 показано использование утилиты pdbedit для выполнения миграции пользователей. Параметр -i задает источник данных, а параметр -e – их конечное местоположение. Перед запуском команды pdbedit у вас должна быть настроена база данных ldapsam в файле smb.conf.
Листинг 18. Миграция пользователей из tdbsam в ldapsam
[root@server1 ~]# pdbedit -e ldapsam -i tdbsam
Importing account for fred...ok
Importing account for jsmith...ok
|
Если вы используете хранилище паролей smbpasswd, вместо tdbsam укажите параметр smbpasswd.
|