Установка и настройка Samba с доменной авторизацией и аутентификацией (файловый сервер)
Статья чисто для того, чтобы молодые коллеги, которые столкнутся с подобной задачей, могли быстрее с ней справиться. Всю информацию по развёртыванию брал почти только
из оф. документации Samba, ибо русскоязычные статьи скудны и неинформативны.
Всё описанное ниже можно даже назвать листингом по настройке. Создана статья с целью привести последовательность действий по базовой настройке на русском языке, т.к. не все могут сходу разобраться в англоязычной документации (понятное дело, можно сразу идти в официальную документацию Samba и там рыться)
Стенд: Debian 12, 1 ЦП, 1 ГБ ОЗУ (машина чистая, только создана)
Устанавливаем программу sudo
apt install sudo
Добавляем созданного пользователя в процессе установки в группу sudo
usermod -aG sudo имя_вашего_пользователя
Устанавливаем все необходимые сервисы для работы samba, как члена домена
sudo apt-get install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle
Далее все команды выполняется либо с применением sudo, либо в привилегированном режиме sudo — i
Указываем NTP-сервер
nano /etc/systemd/timesyncd.conf
[Time]
NTP=ваш_NTP_сервер
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
systemctl enable systemd-timesyncd
systemctl start systemd-timesyncd
systemctl status systemd-timesyncd
Указываем настройки для Kerberos
nano /etc/krb5.conf
[libdefaults]
default_realm = полное_название_вашего_домена
dns_lookup_realm = false
dns_lookup_kdc = true
Команда для просмотра, где находится основной конфигурационный файл samba:
smbd -b | grep CONFIGFILE
Редактируем конфигурационный файл, добавляя необходимые строчки
nano /etc/samba/smb.conf
min domain uid = 0
security = ADS
workgroup = краткое_имя_домена
realm = полное_название_вашего_домена
log file = /var/log/samba/%m.log
log level = 1
# Default ID mapping configuration for local BUILTIN accounts
# and groups on a domain member. The default (*) domain:
# - must not overlap with any domain ID mapping configuration!
# - must use a read-write-enabled back end, such as tdb.
idmap config * : backend = tdb
idmap config * : range = 3000-7999
# - You must set a DOMAIN backend configuration
# idmap config for the краткое_имя_домена domain
idmap config краткое_имя_домена : backend = rid
idmap config краткое_имя_домена : range = 10000-999999
# Template settings for login shell and home directory
template shell = /bin/bash
template homedir = /home/%U
Перечитываем конфигурационные файлы
smbcontrol all reload-config
Создаём папку
mkdir -p /usr/local/samba/etc/
Добавляем в smb.conf строчки
username map = /etc/samba/user.map
username map = /usr/local/samba/etc/user.map
Создаём файл сопоставления root с доменным пользователем
nano /usr/local/samba/etc/user.map
!root = краткое_имя_домена\логин_пользователя
Команда для проверки синтаксиса основного конфигурационного файла — testparm
В файл hosts заносим соответствие IP-адреса и доменного имени
nano /etc/hosts
X.X.X.X share-test.полное_название_вашего_домена share-test
Присоединяем машину к домену
net ads join -U логин_пользователя (должен иметь права для присоединения к домену)
В nsswitch.conf приводим первые две строчки к следующему виду для того, чтобы доменные пользователи видели локальную систему
nano /etc/nsswitch.conf
passwd: files winbind
group: files winbind
Запускаем службы
systemctl start smbd
systemctl start nmbd
systemctl start winbind
Перезагружаемся
poweroff –reboot
Проверяем, что можем подключиться к контроллеру домена
wbinfo --ping-dc
Проверяем поддерживает ли наша samba расширенные ACL
smbd -b | grep HAVE_LIBACL
Если вывод HAVE_LIBACL, то всё ок
Добавляем ещё пару строчек в конфигурационный файл
nano /etc/samba/smb.conf
vfs objects = acl_xattr
map acl inherit = yes
Добавляем в ещё один файл сопоставление пользователя домена с root
nano /etc/samba/user.map
!root = Домен\логин_пользователя
Назначаем права на изменение прав для общих папок для доменных администраторов или другой группы (можно и пользователя поставить)
net rpc rights grant "Домен\Domain Admins" SeDiskOperatorPrivilege -U "Домен\логин_пользователя"
Проверяем список тех, кто может менять права
net rpc rights list privileges SeDiskOperatorPrivilege -U "Домен\логин_пользователя"
Создаём папку для общего использования
mkdir -p /srv/samba/Demo/
Меняем владельца и группу папки
chown root:"Домен\Domain Admins" /srv/samba/Demo/
Ставим права на папку
chmod 0770 /srv/samba/Demo/
Вносим информацию про нашу папку в конфигурационный файл samba
nano /etc/samba/smb.conf
[Demo]
path = /srv/samba/Demo/
read only = no
Перечитываем конф. Файл
smbcontrol all reload-config
Настраиваем права для общей папки через Windows
Нажимаем Win+X → Управлением компьютером
Вкладка Действие и «Подключиться к другом компьютеру», вводим имя нашей машины, например, share-test
В Инструментах системы открываем Общие папки и уже через ПКМ по нашей папке → Свойства → Безопасность, настраиваем права
Добавляем в файл smb.conf в раздел нашей папки строчку
acl_xattr:ignore system acls = yes
Проверяем права на папку
getfacl /srv/samba/Demo/