Это старая версия документа.


Samba и LDAP

В этом разделе описана интеграция Samba и LDAP. В этом случае сервер Samba выполняет роль «отдельного» сервера, а LDAP обеспечивает уровень авторизации с описанием пользователя, группы и информации о пользователе компьютера для нормального функционирования и выполнения своих ролей (из 3 возможных). Отправной точкой в этом может служить сервер OpenLDAP с определённой директорией, которая принимает запросы авторизации. Подробнее эта процедура описана в предыдущей главе OpenLDAP сервер. После прочтения этой главы, вы должны решить для себя что вы хотите от вашего сервера Samba, а затем настроить его относительно ваших потребностей.

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

Для правильной интеграции Samba и LDAP вам необходимо установить три пакета: samba, samba-doc и smbldap-tools. Откровенно говоря, пакет smbldap-tools не является необходимым, но если вы хотите настроить ваш сервер иным способом, он может вам понадобится в дальнейшем.

Для установки введите в терминале:

sudo apt-get install samba samba-doc smbldap-tools

Настройка LDAP

Теперь настроим LDAP сервер, чтобы он мог хранить данные Samba. Для этого нам необходимо выполнить три пункта:

  1. Импортировать схему
  2. Индексировать записи
  3. Добавить объекты

Схема Samba

Для того чтобы OpenLDAP использовался как дополнение к Samba, теоретически в дереве (DIT) должны присутствовать атрибуты которые корректно описывают данные Samba. Такие атрибуты могут быть получены путем введения схемы Samba в LDAP. Сейчас мы это сделаем.

Для более детальной информации о схемах и их установке смотри Изменение базы данных настройки slapd.

1. Такая схема находится в свежеустановленном вами пакете samba-doc. Ее требуется скопировать и разархивировать в директорию /etc/ldap/schema следующим образом:

sudo cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema
sudo gzip -d /etc/ldap/schema/samba.schema.gz

2. Получаем файл конфигурации schema_convert.conf, который должен содержать следующие строки:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/ldapns.schema
include /etc/ldap/schema/pmi.schema
include /etc/ldap/schema/samba.schema

3. Оставляем каталог ldif_output для вывода.

4. Определяем индекс для схемы:

slapcat -f schema_convert.conf -F ldif_output -n 0 | grep samba,cn=schema
dn: cn={14}samba,cn=schema,cn=config

5. Конвертируем схему в формат LDIF:

slapcat -f schema_convert.conf -F ldif_output -n0 -H \
ldap:///cn={14}samba,cn=schema,cn=config -l cn=samba.ldif

6. Редактируем созданный файл cn=samba.ldif, удаляя индексную информацию, по достижению:

dn: cn=samba,cn=schema,cn=config
...
cn: samba

удалите строки в конце:

structuralObjectClass: olcSchemaConfig
entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
creatorsName: cn=config
createTimestamp: 20080827045234Z
entryCSN: 20080827045234.341425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080827045234Z

Внимание: Ваши данные могут отличаться!

7. Добавляем новую схему:

sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f cn\=samba.ldif

Для запроса и просмотра новой схемы введите:

sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config 'cn=*samba*'

Индексы Samba

Теперь, когда slapd знает о атрибутах Samba, мы можем создать несколько индексов на их основе. Индексация записей является способом повышения производительности, когда клиент осуществляет выборочный поиск в дереве (DIT).

Создайте файл samba_indices.ldif следующего содержания:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub

Используйте утилиту ldapmodify для загрузки новых индексов:

sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f samba_indices.ldif

Если все настроено правильно, вы увидите новые индексы используя утилиту ldapsearch:

sudo ldapsearch -Q -LLL -Y EXTERNAL -H \
ldapi:/// -b cn=config olcDatabase={1}hdb olcDbIndex

Добавление объектов Samba к LDAP


Далее настройте пакет smbldap-tools для соответствия среды работы. Пакет поставляется со скриптом конфигурации, в котором указаны вопросы о необходимых опциях установки. Для запуска скрипта введите в терминале:

sudo gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
sudo perl /usr/share/doc/smbldap-tools/configure.pl

Если у вас есть резервная копия, продолжайте наполнять директорию:

sudo smbldap-populate

Вы можете создать файл LDIF содержащий новые обьекты Samba выполнив sudo smbldap-populate -e samba.ldif. Это позволит просматривать изменения, убедившись, что все работает правильно. Если это так, перезапустите скрипт без опции '-e'. Либо вы можете взять файл LDIF и импортировать его данные в обычном режиме.

Сейчас ваша директория LDAP имеет всю необходимую информацию для авторизации пользователей Samba.

Конфигурация Samba

Есть несколько способов настройки Samba. Более подробную информацию смотри в разделе «Windows Networking». Чтобы настроить Samba для использования LDAP необходимо отредактировать конфигурационный файл /etc/samba/smb.conf указав комментарий в значении passdb и добавив некоторые значения для работы LDAP:

#   passdb backend = tdbsam

# LDAP Settings
   passdb backend = ldapsam:ldap://hostname
   ldap suffix = dc=example,dc=com
   ldap user suffix = ou=People
   ldap group suffix = ou=Groups
   ldap machine suffix = ou=Computers
   ldap idmap suffix = ou=Idmap
   ldap admin dn = cn=admin,dc=example,dc=com
   ldap ssl = start tls
   ldap passwd sync = yes
...
   add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w "%u"

Измените значения для вашей конфигурации.

Перегрузите сервер Samba для применения изменений.

sudo restart smbd
sudo restart nmbd

Теперь укажите Samba пароль DN пользователя root (который указывается при установке пакета slapd):

sudo smbpasswd -w password

Если у вас уже есть существующие пользователи LDAP, которых вы хотите включить в вашу конфигурацию Samba, они должны иметь необходимые атрибуты. Утилита smbpasswd подойдет для этого наилучшим образом (ваш компьютер должен иметь возможность видеть (нумеровать) этих пользователей через NSS; или же должны быть установлены и настроены пакеты libnss-ldapd или libnss-ldap):

sudo smbpasswd -a username

Вам будет предложено ввести пароль. Это рассматривается как выдача нового пароля пользователю, что делает его таким как прежде и является разумным решением.

Для настройки пользователей, групп и учётных записей на компьютерах используйте стандартные утилиты предоставляемые пакетом smbldap-tools. Вот несколько примеров:

1. Добавление нового пользователя:

sudo smbldap-useradd -a -P username

Опция '-a' добавляет атрибут Samba, а опция '-P' вызывает утилиту smbldap-passwd, после того как пользователь создан, позволяя создать новый пароль для этого пользователя.

2. Удаление пользователя:

sudo smbldap-userdel username

В этой команде также можно использовать опцию '-r' для удаления домашней директории пользователя.

3. Добавление группы:

sudo smbldap-groupadd -a groupname

В smbldap-useradd опция '-a' добавляет атрибуты Samba.

4. Сделать существующего пользователя членом группы:

sudo smbldap-groupmod -m username groupname

Опция -m может добавлять более одного пользователя за раз, если использовать список, разделенный запятыми.

5. Удаление пользователя из группы:

sudo smbldap-groupmod -x username groupname

6. Добавить в Samba учетную запись компьютера:

sudo smbldap-useradd -t 0 -w username

Замените username на имя рабочей станции. Опция -t 0 создает учетную запись без задержки, в то время как опция -w определяет пользователя как учетную запись компьютера. Также обратите внимание, что параметр add machine script в /etc/samba/smb.conf изменен чтобы использовался smbldap-useradd.

Существуют утилиты в пакете smbldap-tools, которые тут не рассматривались. Здесь полный список:

smbldap-groupadd
smbldap-groupdel
smbldap-groupmod
smbldap-groupshow
smbldap-passwd
smbldap-populate
smbldap-useradd
smbldap-userdel
smbldap-userinfo
smbldap-userlist
smbldap-usermod
smbldap-usershow

Ссылки

  1. Для дополнительной информации по установке и настройке Samba смотрите раздел Настройка сети Windows.

  2. Существует много мест где документированы LDAP и Samba по возрастанию сложности Samba HOWTO Collection.

  3. Относительно предыдущей ссылки, смотрите отдельно секцию passdb

  4. Также устаревшее (2007) Linux Samba-OpenLDAP HOWTO, содержит важные заметки.

  5. Основная страница документации сообщества Ubuntu по Samba содержит множество ссылок на статьи, которые могут оказаться полезными.