Настройка прав доступа к общим ресурсам сервера Samba AD DC

В прошлой статье я рассказывал как сделать резервный контроллер домена на Samba4 в домене Samba Active Directory и пообещал создать общий сетевой ресурс с возможностью назначения прав доступа доменным пользователям на уровне ОС. Оговорюсь сразу — общий ресурс будем создавать на основном контроллере домена с DNS-именем pdc.unlis.local.

Для того, чтобы создать общий ресурс, необходимо всего лишь в конец файла /etc/samba/smb.conf добавить секцию

[public]
path = /home/public
valid users = @"UNLIS\domain users"
writable = yes
browsable = yes
read only = no
guest ok = yes
public = yes
create mask = 0666
directory mask = 0777

Ну и конечно же не забываем создать каталог /home/public

Далее тестируем конфиг и перечитываем его

root@pdc:~# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[netlogon]"
Processing section "[sysvol]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC
<...>
root@pdc:~# smbcontrol all reload-config

Можно посмотреть список ресурсов:

root@pdc:~# smbclient -L localhost -U%
Domain=[UNLIS] OS=[Windows 6.1] Server=[Samba 4.2.10-Debian]

Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
public Disk
IPC$ IPC IPC Service (Samba 4.2.10-Debian)
Domain=[UNLIS] OS=[Windows 6.1] Server=[Samba 4.2.10-Debian]

Далее займемся доменными пользователями, чтобы они воспринимались ОС как локальные. Для этого нам потребуется служба winbind, которая у нас должна быть уже установлена при развертывании контроллера домена, а также библиотеки libpam-krb5, libpam-winbind и libnss-winbind. Установим их командой apt-get install libpam-krb5 libpam-winbind libnss-winbind

Далее правим /etc/nsswitch.conf, чтобы ОС знала где можно брать информацию о пользователях и группах:

passwd: compat winbind
group: compat winbind
shadow: compat

Протестируем:

root@pdc:~# wbinfo -p
Ping to winbindd succeeded
root@pdc:~# wbinfo -t
checking the trust secret for domain UNLIS via RPC calls succeeded
root@pdc:~# wbinfo -u
administrator
dns-pdc
krbtgt
guest
<...>
root@pdc:~# wbinfo -g
enterprise read-only domain controllers
domain admins
domain users
<...>

Winbind сходил в домен и показал нам пользователей и группы домена. Далее проверим вывод команды getent passwd и getent group. По хорошему команда должна выдавать список как локальных пользователей/групп, так и доменных. Но на практике выдает только локальные… Напрашивается вывод, что ничего не работает. Но если попросить у команды вывести данные о конкретном пользователе домена — она это сделает:

root@pdc:~# getent passwd Administrator
administrator:*:0:100::/home/UNLIS/administrator:/bin/false

Не совсем правильно, но победить никак не удается… Позже прочел, что в версиях Samba 4.2 и выше это не баг — это фича.  Проверим, как у нас устанавливаются права ACL на файлы в нашем общем ресурсе. Создаем файл, изменяем права доступа, смотрим:

public_testfile_prop

root@pdc:~# getfacl /home/public/testfile.txt
getfacl: Removing leading '/' from absolute path names
# file: home/public/testfile.txt
# owner: BUILTIN\134administrators
# group: users
user::rwx
user:vasya:r-x
group::rwx
group:users:rwx
group:BUILTIN\134administrators:rwx
group:vasya:r-x
mask::rwx
other::rwx

Как видим, наш Вася имеет права только на чтение и выполнение файла testfile. It Works!

Можно еще настроить PAM для возможности авторизации доменных пользователей на контроллере домена (прям как на w2k).

Руками править конфиги /etc/pam.d/* нынче не рекомендуется, поэтому воспользуемся утилитой pam-auth-update, вызываемой одноименной командой. Эта штука смотрит доступные в системе модули аутентификации, на основании этой информации строит список профилей:

pam_auth_update

Выбираем Winbind NT/Active directory authentication, нажимаем Ok и радуемся.

Теперь можно авторизоваться на контроллере домена при помощи доменной учетной записи. Но тут нас ждет облом… Пользователя сразу же выкидывает. Все дело в том, что в качестве оболочки входа у пользователя указан /bin/false. Самым простым способом явного задания оболочки входа является добавление строки template shell = /bin/bash в секцию [global ]конфигурационного файла Samba4. После применения изменений проверить можно все той же непонятно работающей командой getent:

root@pdc:~# getent passwd vasya
vasya:*:3000017:100:vasya:/home/UNLIS/vasya:/bin/bash

Оболочка сменилась на /bin/bash, можно заходить на сервер. Доменный пользователь стал таким же, как и локальный.

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

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