LinuxWindows

Samba-файловый сервер в Active Directory: join, idmap, ACL и проверка доступа

Ниже — практическая настройка Samba member server в Active Directory. В примере домен — EXAMPLE.LOCAL, NetBIOS-имя — EXAMPLE, контроллер домена — dc01.example.local. Подставьте свои значения и сначала проверьте DNS и время.

1. Проверяем DNS и время

hostnamectl
resolvectl status
getent hosts dc01.example.local
dig +short _ldap._tcp.example.local SRV
dig +short _kerberos._tcp.example.local SRV
timedatectl
chronyc tracking 2>/dev/null || true

DNS сервера должен указывать на DNS Active Directory. При заметной рассинхронизации времени Kerberos не заработает.

2. Устанавливаем пакеты

apt update
apt install samba winbind libnss-winbind libpam-winbind krb5-user smbclient acl attr dnsutils chrony

3. Проверяем Kerberos

kdestroy 2>/dev/null || true
kinit administrator@EXAMPLE.LOCAL
klist

Пока kinit не выдаёт ticket, переходить к join бессмысленно.

4. Сохраняем текущую конфигурацию

install -d -m 700 /root/samba-ad-backup
cp -a /etc/samba/smb.conf /root/samba-ad-backup/smb.conf.$(date +%F-%H%M)
cp -a /etc/krb5.conf /root/samba-ad-backup/krb5.conf.$(date +%F-%H%M)
testparm -s > /root/samba-ad-backup/testparm-before.txt

5. Настраиваем smb.conf

[global]
    workgroup = EXAMPLE
    realm = EXAMPLE.LOCAL
    security = ADS

    winbind use default domain = yes
    winbind enum users = no
    winbind enum groups = no

    idmap config * : backend = tdb
    idmap config * : range = 10000-19999
    idmap config EXAMPLE : backend = rid
    idmap config EXAMPLE : range = 20000-999999

    template shell = /bin/bash
    template homedir = /home/%D/%U

    vfs objects = acl_xattr
    map acl inherit = yes
    store dos attributes = yes

[department]
    path = /srv/samba/department
    read only = no
    browseable = yes
    valid users = @"EXAMPLE\FS_Department_RW", @"EXAMPLE\FS_Department_RO"
    write list = @"EXAMPLE\FS_Department_RW"
    force group = "EXAMPLE\FS_Department_RW"
    create mask = 0660
    directory mask = 0770
    inherit permissions = yes
    inherit acls = yes

Не меняйте idmap backend и диапазоны после запуска без плана миграции: ACL могут начать указывать на другие UID/GID.

6. Проверяем конфигурацию

testparm -s
testparm -s --section-name=department

7. Вступаем в домен

net ads join -U administrator
net ads testjoin
net ads info

8. Запускаем службы

systemctl enable --now smbd winbind
systemctl status smbd winbind --no-pager
wbinfo -t
wbinfo --ping-dc

9. Проверяем пользователей, группы и idmap

wbinfo -n 'EXAMPLE\FS_Department_RW'
wbinfo -i 'EXAMPLE\testuser'
getent passwd 'EXAMPLE\testuser'
getent group 'EXAMPLE\FS_Department_RW'
id 'EXAMPLE\testuser'

Если wbinfo работает, а getent нет, проверьте строки passwd: ... winbind и group: ... winbind в /etc/nsswitch.conf.

10. Создаём каталог share

install -d -m 2770 /srv/samba/department
chown root:'EXAMPLE\FS_Department_RW' /srv/samba/department
setfacl -m g:'EXAMPLE\FS_Department_RW':rwx /srv/samba/department
setfacl -m g:'EXAMPLE\FS_Department_RO':rx /srv/samba/department
setfacl -m d:g:'EXAMPLE\FS_Department_RW':rwx /srv/samba/department
setfacl -m d:g:'EXAMPLE\FS_Department_RO':rx /srv/samba/department
getfacl -p /srv/samba/department

11. Проверяем доступ через smbclient

smbclient -L //127.0.0.1 -U 'EXAMPLE\testuser'
echo 'rw test' > /tmp/rw-test.txt
smbclient //127.0.0.1/department -U 'EXAMPLE\rwuser' -c 'put /tmp/rw-test.txt rw-test.txt; ls; del rw-test.txt'
smbclient //127.0.0.1/department -U 'EXAMPLE\rouser' -c 'put /tmp/rw-test.txt must-fail.txt'

Пользователь RW должен создавать и удалять файлы, пользователь RO — только читать.

12. Проверяем ACL и наследование

getfacl -p /srv/samba/department
getfattr -d -m- /srv/samba/department 2>/dev/null
find /srv/samba/department -maxdepth 2 -printf '%m %u:%g %p\n'

13. Диагностика

journalctl -u smbd -u winbind --since '15 min ago' --no-pager
wbinfo -t
wbinfo --ping-dc
klist
net ads testjoin
testparm -s
smbstatus

14. Rollback

net ads leave -U administrator
systemctl stop smbd winbind
cp -a /root/samba-ad-backup/smb.conf.YYYY-MM-DD-HHMM /etc/samba/smb.conf
cp -a /root/samba-ad-backup/krb5.conf.YYYY-MM-DD-HHMM /etc/krb5.conf
testparm -s
systemctl start smbd

Критерий успеха: Kerberos ticket получается, net ads testjoin и wbinfo -t успешны, доменные пользователи разрешаются через getent, RW/RO-группы получают ожидаемые права, ACL наследуются после создания новых файлов.

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

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