Ввод Samba в домен
Введение
Для ввода сервера Samba в домен Active Directory мы будем использовать дистрибутив Debian 12.
А вот и начальные данные:
- samba-test-ad / 192.168.0.8 — имя и ip-адрес samba сервера;
- srv-dc.test-domain.com / 192.168.0.18 — имя и ip-адрес контроллера домена;
- test-domain.com — имя домена.
Настройка сети
Для того чтобы настроить сеть, отредактируем файлы /etc/network/interfaces и /etc/resolv.conf.
$ sudo nano /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug ens18
iface ens18 inet static
address 192.168.0.8/24
gateway 192.168.0.1
$ sudo nano /etc/resolv.conf
domain test-domain.com
search test-domain.com
nameserver 192.168.0.18
- В файле
/etc/network/interfacesмы настроили ip-адрес для сетевого интерфейса ens18. - А в
/etc/resolv.confуказали ip-адрес dns-сервера (он же и контроллер домена). А также, здесь указали имя домена и имя поискового домена. - Поисковый домен указывает возможный суффикс для DNS адресов, то есть pc1 станет pc1.test-domain.com.
Проверка настройки DNS
Во-первых, проверим резолв домена и контроллера домена:
$ nslookup test-domain.com
Server: 192.168.0.18
Address: 192.168.0.18#53
Name: test-domain.com
Address: 192.168.0.18
$ nslookup srv-dc.test-domain.com
Server: 192.168.0.18
Address: 192.168.0.18#53
Name: srv-dc.test-domain.com
Address: 192.168.0.18
Во-вторых, пропингуем сам домен:
$ ping test-domain.com -c 1
PING test-domain.com (192.168.0.18) 56(84) bytes of data.
64 bytes from srv-dc.test-domain.com (192.168.0.18): icmp_seq=1 ttl=64 time=0.425 ms
--- test-domain.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.365/0.365/0.365/0.000 ms
Проверим, что по ip-адресу контроллера домена мы определяем его имя, то есть настроена обратная запись:
$ nslookup 192.168.0.18
18.0.168.192.in-addr.arpa name = srv-dc.test-domain.com.
Проверим SRV-запись. DNS использует такие записи для определения ip-адресов серверов, предоставляющих услуги определенных служб. Формат такой записи следующий: _Service._Protocol.DnsDomainName где:
- Service — название службы, которая доступна на данном сервере (например: Idap, kerberos, gc, kpasswd).
- Protocol — протокол для подключения к указанной службе (tcp, udp).
- DnsDomainName — имя домена.
В нашем случае, будем проверять следующую DNS запись: _ldap._tcp.test-domain.com. Для того чтобы это сделать используем интерактивную оболочку nslookup:
$ nslookup
> set type=SRV
> _ldap._tcp.test-domain.com.
Server: 192.168.0.18
Address: 192.168.0.18#53
_ldap._tcp.test-domain.com service = 0 100 389 srv-dc.test-domain.com.
> exit
- Наш домен обслуживает ldap сервер по ip-адресу — 192.168.0.18, то есть контроллер домена.
Установка пакетов
Установим необходимые пакеты:
$ sudo apt install -y krb5-user winbind libpam-krb5 \
libpam-winbind libnss-winbind acl attr
В процессе установки можем задать область Kerberos, она задается как имя домена, но большими буквами, в моем случае будет TEST-DOMAIN.COM:

Настройка kerberos
Настроим kerberos. Для этого отредактируем файл /etc/krb5.conf, но предварительно сделаем резервную копию:
$ sudo mv /etc/krb5.conf /etc/krb5.conf.back
$ sudo nano /etc/krb5.conf
[libdefaults]
default_realm = TEST-DOMAIN.COM
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
TEST.DOMAIN.COM = {
kdc = srv-dc.test-domain.com
admin_server = srv-dc.test-domain.com
default_domain = test-domain.com
}
[domain_realm]
.test-domain.com = TEST-DOMAIN.COM
test-domain.com = TEST-DOMAIN.COM
[login]
krb4_convert = false
krb4_get_tickets = false
Разберем конфиг:
- Секция libdefaults:
- default_realm — область Kerberos по умолчанию.
- kdc_timesync — 1 или 0. Если 1, то клиентские машины будут вычислять разницу между своим временем и временем, возвращаемым KDC в метках времени в билетах, и использовать это значение для исправления неточных системных часов при запросе. Но это не используется для изменения системных часов.
- ccache_type — формат кэша учетных данных. 4 это самый последний формат.
- forwardable и proxiable — будут пересылаться начальные билеты и они будут проксибельные (так по умолчанию).
- В секции realms мы указываем настройки для нашего realm, а именно:
- kdc — сервер на котором работает служба kdc.
- admin_server — сервер администрирования.
- default_domain — домен по умолчанию.
- В секции domain_realm мы указываем сопоставления доменов и realm.
- Секция login:
- krb4_convert — не следует использовать демон преобразования Kerberos для получения билетов.
- krb4_get_tickets — не нужно использовать пароль пользователя для получения билетов.
Проверяем настройку kerberos:
$ kinit administrator@TEST-DOMAIN.COM
Password for administrator@TEST-DOMAIN.COM:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@TEST-DOMAIN.COM
Valid starting Expires Service principal
08.07.2024 16:34:05 09.07.2024 02:34:05 krbtgt/TEST-DOMAIN.COM@TEST-DOMAIN.COM
renew until 09.07.2024 16:34:01
- После ввода пароля получим билет в AD для пользователя.
Настройка синхронизации времени
В системах базирующихся на SystemD клиентом синхронизации времени, по умолчанию, выступает служба systemd-timesyncd. Эта служба использует конфиг /etc/systemd/timesyncd.conf, именно в нём прописаны NTP сервера с которыми сервер синхронизирует своё время.
$ sudo nano /etc/systemd/timesyncd.conf
NTP=192.168.0.18
$ sudo systemctl restart systemd-timesyncd.service
$ systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
Active: active (running) since Mon 2024-07-08 16:42:22 MSK; 28s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 1442 (systemd-timesyn)
Status: "Contacted time server 192.168.0.18:123 (192.168.0.18)."
Tasks: 2 (limit: 2306)
Memory: 1.3M
CPU: 65ms
CGroup: /system.slice/systemd-timesyncd.service
└─1442 /lib/systemd/systemd-timesyncd
Установка и настройка samba
Установим samba:
$ sudo apt install -y samba
Настроим samba редактируя файл /etc/samba/smb.conf, предварительно сделав резервную копию:
$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.back
$ sudo nano /etc/samba/smb.conf
[global]
security = ADS
workgroup = test-domain
realm = TEST-DOMAIN.COM
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config TEST-DOMAIN : backend = rid
idmap config TEST-DOMAIN : range = 10000-999999
template shell = /bin/bash
template homedir = /home/%D/%U
winbind enum groups = yes
winbind enum users = yes
winbind nested groups = yes
winbind use default domain = yes
winbind refresh tickets = yes
unix charset = utf-8
dos charset = cp866
nt acl support = yes
acl group control = yes
map acl inherit = yes
unix password sync = yes
preferred master = No
local master = No
domain master = No
[data]
comment = Файлы пользователей домена
path = /share
hide special files = Yes
hide unreadable = Yes
store dos attributes = Yes
ea support = Yes
create mask = 0664
directory mask = 0775
force create mode = 0664
force directory mode = 0775
hosts allow = 192.168.0.0/24
inherit acls = Yes
inherit permissions = Yes
read only = No
vfs objects = acl_xattr
vfs objects = recycle
recycle:maxsize = 0
recycle:subdir_mode = 0700
recycle:directory_mode = 0777
recycle:touch = yes
recycle:versions = yes
recycle:keeptree = yes
recycle:repository = .recycle/%U
- Уточню, что параметры в секции
[global]отвечают за присоединение к домену, а секция[data]это настройка общего каталога data.
Разбор параметров в секции [global]
security = ADS— укажем, что Samba работает в режиме участника домена.workgroup = test-domain— укажем рабочую группа (первая часть домена).realm = TEST-DOMAIN.COM— укажем realm.idmap config * : backend = tdb— для сопоставление локальных id пользователей и доменных, для домена по умолчанию (*) выберем режим tdb (который позволяет и писать и читать id в свою базу данных).idmap config * : range = 3000-7999— диапазон id пользователей для домена по умолчанию.idmap config TEST-DOMAIN : backend = rid— выберем для нашего домена режим RID, который работает в режиме «только чтение». Этот режим извлекает информацию об учетных записях и группах из контроллера домена.idmap config TEST-DOMAIN : range = 10000-999999— диапазон id пользователей для нашего домена.template shell = /bin/bash— оболочка по умолчанию для доменных пользователей.template homedir = /home/%D/%U— домашний каталог для доменных пользователей.winbind enum groups = yes— поддержка определенных системных вызовов, позволяющих приложениям видеть доменных пользователей.winbind enum users = yes— тоже самое но для групп.winbind nested groups = yes— включим поддержку вложенных групп.winbind use default domain = yes— разрешим управлять пользователями без доменной части в имени пользователя.winbind refresh tickets = yes— укажем, что winbind должен обновлять билеты Kerberos.unix charset = utf-8— кодировка компьютера на котором работает samba.dos charset = cp866— укажем, что нужно переопределять кодировку для dos клиентов.nt acl support = yes— укажем, что нужно преобразовать права доступа unix в списки доступа Windows NT.acl group control = yes— в posix файловых системах, только владелец файла и суперпользователь может изменить разрешения и acl для файла. Этим параметром отменим это ограничение.map acl inherit = yes— укажем, что нужно использовать расширенные атрибуты файлов.unix password sync = yes— заставим синхронизировать пароли unix с паролями smb.preferred master = No— служба nmbd не будет предпочитаемым мастер браузером.local master = No— и не будет локальным мастером браузером.domain master = No— и не будет доменным мастером браузером.
Разбор параметров в секции [data]
Название секции [data] — это наш сетевой ресурс (общая папка). То есть так будет называться общая папка.
comment = Файлы пользователей домена— комментарий для общего ресурса.path = /share— путь к папке на сервере.hide special files = Yes— скроем специальные файлы, такие как сокеты, устройства и именованные каналы.hide unreadable = Yes— скроем файлы, к которым нет доступа.store dos attributes = Yes— укажем что нужно считывать DOS атрибуты (системный, скрытый, архивный, только для чтения).- ea support = Yes — разрешим клиентам OS/2 сохранять расширенные атрибуты.
create mask = 0664— когда создается файл, необходимые права доступа рассчитываются в соответствии с преобразованием из DOS прав в права UNIX . Полученный результат не может превзойти эту маску.directory mask = 0775— тоже самое, но для каталогов.force create mode = 0664— этот параметр переопределит права на создаваемые файлы.force directory mode = 0775— тоже самое, но для каталога.hosts allow = 192.168.0.0/24— разрешим подключаться только из этой сети.inherit acls = Yes— включим наследование прав acl.inherit permissions = Yes— включим наследование прав.read only = No— сетевой ресурс будет доступен и на чтение, и на запись.vfs objects = acl_xattr— модуль позволит использовать acl Windows, то есть будет возможно редактировать права из Windows.vfs objects = recycle— модуль позволит использовать корзину.recycle:maxsize = 0— файлы, размер которых превышает указанное число байт не будут перемещаться в корзину, если 0 то все файлы будут перемещаться в корзину.recycle:subdir_mode = 0700— к подкаталогам в корзине доступ будет иметь только владелец. То есть, кто удалил файл, тот и сможет его восстановить.recycle:directory_mode = 0777— сама корзина будет с такими правами.recycle:touch = yes— при перемещении файла в корзину, будем обновлять дату доступа к файлу.recycle:versions = yes— файлы с одинаковыми именами будут все храниться в корзине.recycle:keeptree = yes— при удалении каталога, будем сохранять его структуру.recycle:repository = .recycle/%U— у каждого пользователя будет свой подкаталог в корзине.
Создание каталога и корзины
Далее создаем каталог /share, именно туда будет ссылаться общий ресурс data:
$ sudo mkdir /share
Создадим корзину, так как сама она не создаётся:
$ sudo mkdir /share/.recycle
$ sudo chmod 777 /share/.recycle/
Применение настроек
Проверим настройки и перезагружаем службу:
$ testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
$ sudo systemctl restart smbd
Ввод samba в домен
Вводим сервер samba в домен и проверяем:
$ sudo net ads join -U administrator
$ sudo net ads testjoin
Join is OK
Перезапускаем службы:
$ sudo systemctl restart winbind
$ sudo systemctl restart smbd
$ sudo systemctl restart nmbd
Проверим доверительные отношения с доменом. Получим списки доменных пользователей и групп:
$ sudo wbinfo -t
$ sudo wbinfo -u
$ sudo wbinfo -g
Настроим права на каталог:
$ sudo chown -R administrator /share/
Теперь администратор домена является владельцем каталога share, а это и есть сетевой ресурс date. На этом можно считать что мы ввели сервер samba в домен.
Проверка работы с клиента windows
Мы зашли под доменным администратором (administrator) на Windows сервер. Пробуем открыть подготовленный сетевой каталог:

- Должно пустить в каталог не спрашивая логин и пароль! А если спрашивает, значит что-то сделали не так.
В свойствах каталога можем настраивать права:

- Таким образом, уже с Windows, мы можем вести дальнейшую настройку прав. На Linux, при этом, будут использоваться acl права .
Если понравилась статья, подпишись на мой канал в VK или Telegram .