Настройка Samba Active Directory в Docker

Задача состоит в следующем: используя готовый контейнер, развернуть Active Directory и SMB шару под Linux в Docker.

Контейнер был позаимствован на GitHub  (или на Docker Hub) с использованием минимальных доработок:в Dockerfile добавлены дополнительные пакеты для удобства настройки:vim и net-tools:

RUN apt-get install -y vim net-tools

Далее необходим склонировать репозиторий с гита:

git clone https://github.com/Fmstrat/samba-domain.git

И собрать образ в Docker:

docker build -t samba-domain .

Пробуем запустить контейнер, подробный разбор далее:

docker run -t -i \
-d \
-e "DOMAIN=YOUR.COMPANY.RU" \
-e "DOMAINPASS=Qwerty123$" \
-e "DNSFORWARDER=8.8.8.8" \
-e "HOSTIP=10.10.4.11" \
--network host \
-v /etc/localtime:/etc/localtime:ro \
-v /data/docker/containers/samba/data/:/var/lib/samba \
-v /data/docker/containers/samba/config/samba:/etc/samba/external \
-v /stor/samba-data:/data \
--dns-search your.company.ru \
--dns 127.0.0.1 \
--add-host srv-name.your.company.ru:10.10.4.11 \
-h dc0 \
--name dc0 \
--privileged \
samba-domain (если был скачан с докер хаба,  указать nowsci/samba-domain вместо samba-domain )

DNS используется встроенный в Samba, в рамках требуемой задачи (небольшой офис в 50 ПК) этого достаточно.

–network-host говорит о том, что обращаться к контейнеру можно будет по IP хост машины (в доке на сайте самбы можно посмотреть список портов, которые необходимы, и нужно убедиться, что они не конфликтуют с другими имеющимися на хост-машине)

Далее пробрасываются 3 директории с хост-машины, это:
1. /data/docker/containers/samba/data/ и /data/docker/containers/samba/config/samba – эти директории нужно создать вручную, так задумано автором:

mkdir -p /data/docker/containers/samba/data
mkdir -p /data/docker/containers/samba/config/samba


2. /stor/samba-data – директория для хранения файлов на шаре.

После того, как был запущен контейнер по инструкции от автора без дополнительных манипуляций, требуемая задача не была выполнена, т.к. DNS не работал и файл /etc/resolv.conf в контейнере содержал в себе ненужные мне записи. Поэтому дальше пришлось допиливать самому.

Ниже приведен итоговый готовый конфиг /etc/samba/smb.conf с последующими пояснениями ниже:

[global]
	idmap uid = 10000 - 40000
	idmap gid = 10000 - 40000
	winbind enum groups = yes
	winbind enum users = yes
	winbind use default domain = yes
	winbind refresh tickets = yes


        dns forwarder = 77.88.8.8
        idmap_ldb:use rfc2307 = yes
                        wins support = yes
                        template shell = /bin/bash
                        winbind nss info = rfc2307
                        idmap config IN: range = 10000-20000
                        idmap config IN: backend = ad
        workgroup = IN
        realm = IN.ROSPARTNER.RU
        netbios name = DC0
        server role = active directory domain controller
        idmap_ldb:use rfc2307 = yes

[netlogon]
        path = /var/lib/samba/sysvol/in.rospartner.ru/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No
[share]
        path = /data
        read only = no

В блоке [global] выделены жирным строки, относящиеся к демону Winbind, настройка которого необходима для раздачи прав на шару через Active Directory.  Winbind является связующим звеном между пользователями и группами в Linux и между теми же в Active Directory.

Короче и проще говоря: чтобы видеть пользователей AD на своем сервере с Samba, нужен Winbind.

В блоке [share] указаны минимальные параметры для шары: это путь и право на запись. Всё остальное управляется через AD.

Теперь, когда мы разобрали файл, его нужно подсунуть по пути /data/docker/containers/samba/config/samba, откуда он будет скопирован внутрь Docker-контейнера. Способ немного костыльный, но рабочий. Теперь осталось пересоздать контейнер и зайти в него:

docker stop dc0
docker rm dc0
<Длинная команда по запуску контейера из образа, описанная выше>
docker exec -it dc0 bash

Попав внутрь контейнера, можно проверить, что конфиг успешно подхвачен самбой, команда testparm

Потом проверить, что Winbind установил доверительные отношения с AD (должен выдать succeeded:

wbinfo -t

Также Winbind должен видеть юзеров и группы AD в терминале Linux:

wbinfo -u и wbinfo -g

На данном этапе все работает, но не прикручено к системе. Нужно добавить Winbind в качестве источника пользователей и групп. Для этого необходимо в файле /etc/nsswitch.conf прописать следующее (дописать, если быть точнее к имеющимся строкам):

passwd:         compat winbind
group:          compat winbind

А теперь можно проверить, что мы можем получить список в терминал:

getent passwd
getent group

Первая команда должна вам вернуть всё содержимое вашего файла /etc/passwd, то есть ваших локальных пользователей, плюс пользователей домена с ID из заданного вами в smb.conf диапазона. Вторая должна сделать тоже самое для групп.

После этого в контейнере нужно установить права на шару для нужной группы, я это сделал для админов домена:

chmod -R 775 /data
chown -R root:"Domain Admins" /data

После этого можно подключать к домену виндовые машины, а для управления использовать удобную оснастку RSAT, которая ставится отдельно на Windows систему – статей по установке RSAT предостаточно и это не займёт много времени.

Один нюанс: при добавлении DNS-сервера в оснастке надо использовать его доменное имя, а не IP, иначе не подключится.

При заходе на шару //10.10.4.11 будет директория share. Доступ настраивается через группы уже в самой AD, а не средствами Samba на сервере, т.к. у нас работает уже настроенный Winbind.


Ваш комментарий будет первым

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *