Для настройки работы Samba с доменом Active Directory понадобятся собственно сама Samba, а так же пакеты Kerberos и Winbind. Kerberos используется для установления защищенной связи между клиентом и сервером, а Winbind - для получения доменных пользователей и групп Linux сервером
Все команды выполняются от имени суперпользователя
Параметры сети
Пусть сеть будет содержать следующие параметры:
Имя домена | office.domain.com |
---|---|
Краткое имя домена | office |
Имя сервера - контроллера домена | SRV-DC |
ip-адрес сервера - контроллера домена | 192.168.10.15 |
Имя сервера на котором устанавливается samba | SRV-SMB |
ip-адрес сервера на котором устанавливается samba | 192.168.10.20 |
DNS сервер и контроллер домена установлены на одном сервере |
Подготовка
Нужно подготовить Linux сервер:
В файле
В файле
/etc/resolv.confДолжны быть указаны имя домена и адрес DNS сервера, например
domain office.domain.com search office.domain.com nameserver 192.168.10.15Для применения изменений нужно перезапустить сетевой интерфейс
nmcli con down <ID> && nmcli con up <ID>
Файл
/etc/hostsдолжен содержать имя хоста, на котором устанавливается samba
192.168.10.20 srv-smb.domain.com srv-smb
Для системы, на которой устанавливается samba, контроллер домена должен быть сервером для синхронизации времени. Для настройки нужно зайти в файл
/etc/chrony.confЗакомментировать строки с помощью знака решетки
#server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburstИ вместо них добавить
server 192.168.10.15 iburst preferПосле изменения нужно перезапустить службу
systemctl restart chronyd
Установка и конфигурирование
Установка необходимых пакетов
yum install samba-winbind samba-winbind-clients samba krb5-workstation
Разрешить доступ через файрвол
firewall-cmd --permanent --add-service=samba firewall-cmd --reload
Создать каталоги для общего доступа
mkdir -p /home/share/dir1 mkdir -p /home/share/dir2Дать разрешения SELinux для доступа к этим каталогам
semanage fcontext -a -t samba_share_t "/home/share/dir1(/.*)?" semanage fcontext -a -t samba_share_t "/home/share/dir2(/.*)?" restorecon -R -v /home/share/dir1 restorecon -R -v /home/share/dir2 setsebool -P samba_export_all_rw 1
Запуск и добавление в автозагрузку сервисов Samba
systemctl enable smb --now systemctl enable nmb --now
Можно проверить, видит ли текущая система сервер контроллера домена
realm discover office.domain.comЕсли выводит, что команда неизвестна, нужно установить пакет
yum install realmd
Теперь нужно заполнить конфигурационный файл kerberos, который лежит по пути
/etc/krb5.confВсе слова, которые написаны заглавными буквами, должны быть написаны заглавными. В конфиге нужно поменять имя домена на свое
[libdefaults] default_realm = OFFICE.DOMAIN.COM dns_lookup_realm = false dns_lookup_kdc = true ticket_lifetime = 24000 krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] OFFICE.DOMAIN.COM = { kdc = SRV-DC.OFFICE.DOMAIN.COM admin_server = SRV-DC.OFFICE.DOMAIN.COM default_domain = OFFICE.DOMAIN.COM } [domain_realm] .office.domain.com = OFFICE.DOMAIN.COM office.domain.com = OFFICE.DOMAIN.COM [login] krb4_convert = false krb4_get_tickets = false
Теперь нужно заполнить конфиг Samba. Настройка winbind так же осуществляется в этом конфиге. Он находится по пути
/etc/samba/smb.confВ конфиге нужно поменять имя домена, группы и пути к каталогам на свои
#глобальные параметры, для всех расшариваемых каталогов [global] #рабочая группа workgroup = OFFICE #имя в сетевом окружении netbios name = SRV-DC #область kerberos realm = OFFICE.DOMAIN.COM #тип безопасности - active directory service security = ads #использовать домен по умолчанию, тогда не нужно будет писать имя пользователя с указанием домена winbind use default domain = yes #разрешить winbind'у пробрасывать пользователей и группы домена на локальную систему winbind enum groups = Yes winbind enum users = Yes #автоматическое получение билетов kerberos winbind refresh tickets = yes #диапазон проброшенных winbind`ом uid и gid idmap config * : range = 1000000-20000000 idmap config * : rangesize = 1000000 idmap config * : backend = autorid #позволяет сопоставлять списки управления доступом windows и linux vfs objects = acl_xattr store dos attributes = yes #samba не может стать контроллером домена и master browser`ом domain master = no local master = no #nmbd-сервер не будет сервером wins preferred master = no os level = 0 #автоматическое обновление билета Kerberos winbind refresh tickets = yes #отключить поддержку принтеров load printers = no show add printer wizard = no disable spoolss = yes printcap name = /dev/null #опции для ускорения работы socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=65536 SO_SNDBUF=65536 #Имя каталога, отображаемое в сети (может быть любым) [dir1] #путь к расшариваемому каталогу path = /home/share/dir1 #скрывает от пользователя каталоги и файлы на которые у них нет доступа hide unreadable = yes #список тех, кому разрешен доступ valid users = "@OFFICE\пользователи домена", "@OFFICE\администраторы домена" #наследовать разрешения acl от родительского каталога inherit acls = yes #наследовать владельца от родительского каталога inherit owner = yes #наследовать права от родительского каталога inherit permissions = yes #сопоставлять разрешения linux со списками контроля доступа windows nt acl support = yes #наследовать списки доступа map acl inherit = yes #разрешение на запись, тем у кого есть доступ writable = yes #файлы и каталоги создаются с указанными разрешениями create mask = 0770 directory mask = 0770 #Имя каталога, отображаемое в сети (может быть любым) [dir2] #путь к расшариваемому каталогу path = /home/share/dir2 #скрывает от пользователя каталоги и файлы на которые у них нет доступа hide unreadable = yes #список тех, кому разрешен доступ valid users = "@OFFICE\администраторы домена" #наследовать разрешения acl от родительского каталога inherit acls = yes #наследовать владельца от родительского каталога inherit owner = yes #наследовать права от родительского каталога inherit permissions = yes #сопоставлять разрешения linux со списками контроля доступа windows nt acl support = yes #наследовать списки доступа map acl inherit = yes #разрешение на запись, тем у кого есть доступ writable = yes #файлы и каталоги создаются с указанными разрешениями create mask = 0770 directory mask = 0770
Для того, чтобы у каждого расшаренного каталога была корзина, в секцию [global] нужно добавить следующее. Если нужно, чтоб корзина была только у некоторых каталогов, то добавить строки нужно в их секции.
Вместо
Вместо
vfs objects = acl_xattrУказать
vfs objects = acl_xattr recycleДобавить
#НАСТРОЙКИ КОРЗИНЫ #где хранить удаленные файлы. Они будут храниться в скрытом каталоге recycle, для каждого пользователя будет создаваться свой подкаталог с удаленными им файлами recycle:repository = .recycle/%U #список исключений каталогов. Каталоги, файлы из которых не будут попадать в корзину recylce:excludedir = tmp temp cache #список исключений файлов. Если файл содержит в названии указанную строку, он не попадает в корзину recycle:exclude = *.tmp *.temp ~$* #если имена файлов совпадают, будет добавляться номер файла recycle:versions = yes #будет ли изменена дата файла на время удаления файла recycle:touch = yes #сохранение дерева каталогов для удаленных файлов recycle:keeptree = yes #файлы и каталоги создаются с указанными разрешениями recycle:directory_mode = 0750 #считать файлы и каталоги, начинающиеся с точки скрытыми hide dot files = yesЕсли нужна поддержка протокола smb1, то в конфиг нужно добавить строку
server min protocol= NT1Проверка конфига и перезапуск samba
testparm systemctl restart smb
Создание каталогов для корзины
mkdir /home/share/dir1/.recycle mkdir /home/share/dir2/.recycle
Для очистки каталога корзины от файлов старше 4 дней и пустых каталогов в файл
/etc/crontabЗапишем следующее
0 19 * * * root find /home/share/dir1/.recycle -mtime +4 -delete 30 19 * * * root find /home/share/dir1/.recycle -type d -empty -delete
Чтобы система использовала winbind для поиска пользователей и групп, нужно в файле
/etc/nsswitch.confК параметрам passwd и group добавить winbind
passwd: sss files systemd winbind group: sss files systemd winbind
Теперь можно проверить возможность авторизации в домене, для этого нужно выполнить команду с существующим именем пользователя домена, имя домена нужно писать заглавными буквами
Убедиться в том, что билет kerberos получен, можно командой
kinit username@OFFICE.DOMAIN.COMЕсли не появилось ошибок, значит все правильно
Убедиться в том, что билет kerberos получен, можно командой
klistУдалить все билеты (в данный момент они были нужны только для проверки) можно командой
kdestroy
Для добавления сервера в домен используется команда
При успешном вводе, появится сообщение
net ads join -U userDomain -S SRV-DC.office.domain.comУ указанного пользователя должно быть право на добавление пользователей в домен
При успешном вводе, появится сообщение
Using short domain name -- OFFICE Joined 'SRV-SMB' to dns domain 'office.domain.com'Может появится ошибка вида
Using short domain name -- OFFICE Joined 'SRV-SMB' to dns domain 'office.domain.com' No DNS domain configured for srv-smb. Unable to perform DNS Update. DNS update failed: NT_STATUS_INVALID_PARAMETERЭто значит, что не добавилась автоматически запись о системе на DNS сервер. Это можно сделать вручную, нужно зайти в настройки DNS сервера и добавить A-запись. Это не критичная ошибка, даже если она возникает хост все равно добавляется в домен.
Проверить добавился ли хост в домен, можно командами
net ads info net ads testjoin
Теперь можно запустить winbind и добавить его в автозагрузку
systemctl enable winbind --now
Проверить работу winbind можно следующими командами (запускать обязательно с правами суперпользователя)
Проверка соединения с доменом, вывод должен содержать calls succeeded
Проверка соединения с доменом, вывод должен содержать calls succeeded
wbinfo -tВывод пользователей домена
wbinfo -uВывод групп домена
wbinfo -gВывод локальных и доменных пользователей
getent passwdВывод локальных и доменных групп
getent groupМожно проверить отображается ли пользователь через id
id userDomainИли
id domain\\userDomainЕсли возникают ошибки, следует перезапустить samba и winbind
В linux по умолчанию максимальное количество открытых файлов составляет 1024, а в windows 16384, приведем эти значения в соответствие, для этого в файле
/etc/security/limits.confИзменить
* - nofile 16384 root - nofile 16384Изменения применятся после перезагрузки системы.
Настройка доступа к каталогам
Пусть нужно сделать так, чтоб в общий каталог и подкаталоги могли записывать данные все пользователи домена, тогда нужно изменить права следующим образом
chown -R "OFFICE\администратор":"OFFICE\пользователи домена" /home/share/dir1 chmod 770 /home/share/dir1
Пусть нужно сделать так, чтоб в корень общего каталога могли записывать данные и создавать там каталоги только некоторые пользователи, а в подкаталоги могли записывать данные все.
Тогда нужно на контроллере домена создать группу, например share_admins и включить в нее нужных пользователей (добавление в группу применится только после перезахода пользователя в учетную запись). Задать следующие права
Тогда нужно на контроллере домена создать группу, например share_admins и включить в нее нужных пользователей (добавление в группу применится только после перезахода пользователя в учетную запись). Задать следующие права
chown -R "OFFICE\администратор":"OFFICE\пользователи домена" /home/share/dir1 chmod 750 /home/share/dir1И задать права acl для корневого каталога и права по умолчанию для подкаталогов
setfacl -m g:"OFFICE\\share_admins":rwx /home/share/dir1 setfacl -d -m u::rwx,g::rwx,o::-,g:"OFFICE\\share_admins":rwx /home/share/dir1В этом случае, пользователи, находящиеся в группе share_admins будут иметь полные права на все каталоги.
Если настроена корзина, то нужно всем пользователям домена разрешить запись в нее
chmod 770 /home/share/dir1/.recycle
Проверить права ACL для каталога можно командой
getfacl <dir>
Удаление всех ACL прав
settfacl -b <dir>
С помощью ACL можно задавать различные права доступа к каталогам большому количеству пользователей и групп
Права доступа к каталогам можно менять и из windows, в Свойствах каталога, во вкладке Безопасность
После всех сделанных действий можно подключится к расшаренному каталогу из сети от доменного пользователя, по пути
\\SRV-SMB\dir1
Ссылки
Полный список параметров конфига Samba:
|ссылка|
Подробно про ACL:
|ссылка 1|, |ссылка 2|
Решение проблем:
|ссылка|
Samba и SELinux:
|ссылка|