Samba в роли контроллера домена Active Directory.

В четвертой версии Samba появилась возможность использовать сервер с Linux в качестве контроллера домена. И, хотя это давно перестало быть новостью, я надеюсь, что многим пригодится информация из этой и следующих статей. Итак, сегодня я настрою контроллер домена на Ubuntu Server 16.04 в стандартной конфигурации, а заодно расскажу и покажу, как это сделать.

Цикл статей о Samba.

  1. Установка и простая настройка.
  2. Управление доступом.
  3. Графические и Web-интерфейсы.
  4. Подключаем сервер с Samba к домену Windows (1 часть).
  5. Подключаем сервер с Samba к домену Windows (2 часть).
  6. Подключаем сервер с Samba к домену Windows (3 часть): управление пользователями.
  7. Samba в роли контроллера домена Active Directory.

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

Одной только Samba нам будет недостаточно. Для аутентификации пользователей понадобится Kerberos, о котором уже говорилось ранее, для синхронизации времени — NTP, для управления правами доступа — ACL (система, многим известная как «виндовые галочки»). Если в сети присутствуют принтеры, которыми нужно управлять удаленно, придется установить и настроить СUPS. Samba 4 содержит встроенный DNS с ограниченной функциональностью, поэтому я буду использовать именно его. Если требуется полноценный DNS-сервер, добавьте в список BIND.

Устанавливаем минимальный набор, необходимый для нашей задачи:

sudo apt install samba samba-tool krb5-user ntp acl
Пакет acl, вероятно, уже установлен у вас в системе, поскольку он входит в стандартный набор Ubuntu 16.04, 16.10 и 17.04. Весьма вероятно, что он никуда не денется и в следующих версиях.

Kerberos попросит указать область по умолчанию. Можно оставить поля пустыми, позже мы все равно получим сгенерированный автоматически конфиг Kerberos.

Настройка Samba и Kerberos.

Для формирования файла /etc/samba/smb.conf воспользуемся утилитой samba-tool. То же самое в случае необходимости можно сделать и вручную, просто вписав соответствующие строки.

Для начала переименуем стандартный smb.conf, чтобы позволить samba-tool создать для нас новый.

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.old

Базовый вариант команды для формирования конфига Samba в роли контроллера домена выглядит так:

sudo samba-tool domain provision --use-rfc2307 --interactive
Сюда могут быть добавлены дополнительные параметры, но о самом необходимом нас и без того спросят. Кроме того, в случае проблем вы можете сделать логи более подробными, добавив ключ -d и число от 0 до 10. Значение по умолчанию — 1.

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

Realm полное_имя_домена
Domain короткое_имя_домена
Server Role оставляем по умолчанию (dc)
DNS Backend если не планируется отдельный DNS-сервер, оставьте SAMBA_INTERNAL
DNS Forwarder IP Adress  8.8.8.8 ( это DNS от Google), если только в вашей сети не настроен собственный сервер доменных имен.

После этого нужно будет придумать и дважды ввести пароль администратора домена.

Обратите внимание! Минимальная длина пароля — 7 символов. Если это условие не будет соблюдено или найдутся другие ошибки, придется вводить последнюю команду и все параметры заново.

На скриншоте видно, что подходящий конфигурационный файл Kerberos сгенерировался автоматически.

Вот его содержимое:

Однако этот файл нужен нам в другом месте. Вместо того, чтобы перемещать его, создадим ссылку там, где необходимо. Перед этим переименуем старый файл, чтобы избежать конфликта и не потерять исходный вариант.

sudo mv /etc/krb5.conf /etc/krb5.conf.old
sudo ln -s /var/lib/samba/private/krb5.conf /etc/krb5.conf

Параметр DNS Forwarder IP Adress — это адрес DNS-сервера, к которому будет выполнен запрос в том случае, если локальный, то есть, встроенный в Samba, сервер имен не найдет соответствия. Вы можете вписать сюда none, чтобы предотвратить разрешение доменных имен где-либо еще. При этом доступ к внешним сайтам по имени станет невозможным.

Настройка статического IP.

Динамически назначаемый IP-адрес — не лучшее решение для контроллера домена, он должен иметь статический IP. Для этого нужно знать имя сетевого интерфейса, а выяснить его можно так:

netstat -i

Затем открываем /etc/network/interfaces и приводим его примерно к следующему содержанию:

Перезагружаемся и смотрим, все ли у нас получилось:

ip addr

Отлично, IP соответствует только что указанному в конфиге:

В качестве DNS я указал статический адрес, который был прописан для этого сервера. При разрешении имен запрос будет направлен к внутреннему DNS Samba, который мы уже настроили. И, если подходящий результат не будет найден, запрос перенаправится на 8.8.8.8, который мы указали в качестве дополнительного DNS.

Давайте проверим, все ли работает как надо:

ping google.com

Если google.com или любой другой сайт успешно пингуется, значит, доступ к сети вы не сломали и внешние имена благополучно разрешаются через удаленный DNS-сервер.

На этом пока все. Мы сделали немало, но впереди еще много интересного.

  • Vasila

    Отличная серия статей. Жду с нетерпением продолжение как новый сезон популярного сериала!

    • Edward Kobylyanets

      Спасибо за отзыв. Но больше по Samba статей не будет, серия завершена. Должна была быть еще одна статья, но у автора этой серии пока нет времени.

  • https://www.facebook.com/app_scoped_user_id/10212775060285190/ Михаил Забулдыжников

    ERROR(): Provision failed — ProvisioningError: Your filesystem or build does not support posix ACLs, which s3fs requires. Try the mounting the filesystem with the ‘acl’ option.
    File «/usr/lib/python2.7/dist-packages/samba/netcmd/domain.py», line 471, in run
    nosync=ldap_backend_nosync, ldap_dryrun_mode=ldap_dryrun_mode)
    File «/usr/lib/python2.7/dist-packages/samba/provision/__init__.py», line 2175, in provision
    skip_sysvolacl=skip_sysvolacl)
    File «/usr/lib/python2.7/dist-packages/samba/provision/__init__.py», line 1806, in provision_fill
    names.domaindn, lp, use_ntvfs)
    File «/usr/lib/python2.7/dist-packages/samba/provision/__init__.py», line 1548, in setsysvolacl
    raise ProvisioningError(«Your filesystem or build does not support posix ACLs, which s3fs requires. «

  • https://www.facebook.com/app_scoped_user_id/10212775060285190/ Михаил Забулдыжников

    on ZFS i’m fix that simple:
    zfs set aclinherit=passthrough
    zfs set acltype=posixacl
    where that name my pool in «zpool status»