Установка Samba с авторизацией через AD

Рассмотрим установку и настройку Samba для организации файлового хранилища с авторизацией доменных пользователей.

Предполагается что у нас уже есть домен на Windows Server с пользователями и группами.
1. Для начала настроим на сервере Samba DNS указывающий на AD. Для этого приведем файл /etc/systemd/resolved.conf к виду:


[Resolve]
# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
# Google: 8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
# Quad9: 9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
#DNS=
#FallbackDNS=
#Domains=
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=no
#LLMNR=no
#Cache=no-negative
#CacheFromLocalhost=no
#DNSStubListener=yes
#DNSStubListenerExtra=
#ReadEtcHosts=yes
#ResolveUnicastSingleLabel=no
DNS='IP AD Server';
Domains=~.

2. Установим необходимые пакеты

apt install realmd samba krb5-user samba-dsdb-modules samba-vfs-modules winbind smbclient

3. Правим файлы

/etc/krb5.conf

[libdefaults]
default_realm = YOURDOMEN.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
# The following krb5.conf variables are only for MIT Kerberos.
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
YOURDOMEN.LOCAL = {
kdc = DC.YOURDOMEN.LOCAL
admin_server = DC.YOURDOMEN.LOCAL
}
ATHENA.MIT.EDU = {
kdc = kerberos.mit.edu
kdc = kerberos-1.mit.edu
kdc = kerberos-2.mit.edu:88
admin_server = kerberos.mit.edu
default_domain = mit.edu
}
ZONE.MIT.EDU = {
kdc = casio.mit.edu
kdc = seiko.mit.edu
admin_server = casio.mit.edu
}
CSAIL.MIT.EDU = {
admin_server = kerberos.csail.mit.edu
default_domain = csail.mit.edu
}
IHTFP.ORG = {
kdc = kerberos.ihtfp.org
admin_server = kerberos.ihtfp.org
}
1TS.ORG = {
kdc = kerberos.1ts.org
admin_server = kerberos.1ts.org
}
ANDREW.CMU.EDU = {
admin_server = kerberos.andrew.cmu.edu
default_domain = andrew.cmu.edu
}
CS.CMU.EDU = {
kdc = kerberos-1.srv.cs.cmu.edu
kdc = kerberos-2.srv.cs.cmu.edu
kdc = kerberos-3.srv.cs.cmu.edu
admin_server = kerberos.cs.cmu.edu
}
DEMENTIA.ORG = {
kdc = kerberos.dementix.org
kdc = kerberos2.dementix.org
admin_server = kerberos.dementix.org
}
stanford.edu = {
kdc = krb5auth1.stanford.edu
kdc = krb5auth2.stanford.edu
kdc = krb5auth3.stanford.edu
master_kdc = krb5auth1.stanford.edu
admin_server = krb5-admin.stanford.edu
default_domain = stanford.edu
}
UTORONTO.CA = {
kdc = kerberos1.utoronto.ca
kdc = kerberos2.utoronto.ca
kdc = kerberos3.utoronto.ca
admin_server = kerberos1.utoronto.ca
default_domain = utoronto.ca
}
[domain_realm]
.YOURDOMEN.local=YOURDOMEN.LOCAL
YOURDOMEN.local=YOURDOMEN.LOCAL
.mit.edu = ATHENA.MIT.EDU
mit.edu = ATHENA.MIT.EDU
.media.mit.edu = MEDIA-LAB.MIT.EDU
media.mit.edu = MEDIA-LAB.MIT.EDU
.csail.mit.edu = CSAIL.MIT.EDU
csail.mit.edu = CSAIL.MIT.EDU
.whoi.edu = ATHENA.MIT.EDU
whoi.edu = ATHENA.MIT.EDU
.stanford.edu = stanford.edu
.slac.stanford.edu = SLAC.STANFORD.EDU
.toronto.edu = UTORONTO.CA
.utoronto.ca = UTORONTO.CA

/etc/samba/smb.conf


#======================= Global Settings =======================
[global]
## Browsing/Identification ###
# Change this to the workgroup/NT-domain name your Samba server will part of
workgroup = YOURDOMEN
security = ads
realm = YOURDOMEN.LOCAL
encrypt passwords = yes
password server = dc.YOURDOMEN.LOCAL
server signing = mandatory
idmap config * : backend = tdb
idmap config * : range = 5000-10000000
idmap config * : base_rid = 0
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
template homedir = /home/%D/%U
template shell = /bin/bash

/etc/nsswitch.conf


passwd: files winbind
group: files winbind
shadow: files winbind
gshadow: files
hosts: files dns
networks: files
#passwd: compat winbind files systemd
#group: compat winbind files systemd
#shadow: files
#gshadow: files
#hosts: files dns
#networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis

3. Заводим сервер в домен:
net ads join -U admin_user@yourdomain.local
4. Проверим, что Winbind установил доверительные отношения с Active Directory, выполним команду:


wbinfo -t
checking the trust secret for domain YOURDOMAIN via RPC calls succeeded

5. Для проверки видит ли Winbind пользователей и группы из Active Directory, выполним команды:

wbinfo -u
wbinfo -g

Если в ходе выполнения данных команд в консоль были выведены пользователи и группы из Active Directory, то это значит что Winbind работает правильно.
Так же удостоверится в корректной работе Winbind можно запросив данные по доменному пользователю:
id domainuser

6. Общие папки

Так как мы интегрируем Samba с Active Directory, то и управление правами доступа на общие папки будет гораздо удобней назначать из ОС Windows.
Учетные записи которые могут настраивать права на общие папки, нуждаются в привилегиях SeDiskOperatorPrivilege. Чтобы посмотреть текущий список привилегий на хосте, выполним команду:

net rpc rights list accounts -U'YOURDOMAIN\admin_user'

Выдадим разрешение SeDiskOperatorPrivilege группе «Администраторы домена» (Domain Admins), командой:

net rpc rights grant 'YOURDOMAIN\Domain Admins' SeDiskOperatorPrivilege -YOURDOMAIN\admin_user'
ENTER YOURDOMAIN\admin_user'S PASSWORD:
SUCCESSFULLY GRANTED RIGHTS.

Теперь можно приступать к созданию общих папок. Для примера рассмотрим создание общей папки PUBLIC.
Создаем папку и выставляем права доступа на нее:
mkdir -p /samba/public
chown "администраторы домена":"пользователи домена" /samba/public
chmod 770 /samba/public

В файле конфигурации Samba (/etc/samba/smb.conf) описываем параметры общей папки:

[PUBLIC]
path = /samba/public
read only = no
# Аналог технологии Access-based Enumeration(ABE — Перечисление на основании доступа)
hide unreadable = yes
# hide unwriteable files = yes

Для применения изменений перечитываем конфигурацию Samba, командой:
/etc/init.d/smbd reload

Далее все настройку прав доступа выполняем из оснастки Управление компьютером (Computer Manager).
Запускаем от администратора Управление компьютером (Computer Manager) (Меню ПУСК -> Выполнить -> compmgmt.msc). Подключится к другому компьютеру… и указываем компьютер
После подключения к системе, переходим в «Общие папки» — «Общие ресурсы» и видим нашу общую папку PUBLIC, далее привычным методом выставляем все необходимые права доступа на нее.