Яндекс

Файловый сервер Samba с разграничением доступа групповыми политиками AD

Установка файлового сервера на AL 1.8 (LFS Samba Server)

(7 Votes)
LFS - это samba сервер (файловый сервер) на Astra Linux 1.8
В данной инструкции мы поднимем несложный файловый сервер с доменным разграничением прав.
Продолжаем рубрику импортозамещения. Допустим, мы имеем парк машин на Linux, но как быть с обменом файлов? Файлопомойку на Linux сделать несложно, сложно - организовать порядок в этом хаосе. Сегодня мы поднимем файловый сервер в домене с разграничением прав, внесем правила хорошего тона.
Проверено на версии Astra Linux 1.8.1.X. Монтируется без проблем на AL 1.X
СТЕНД:
  • Домен: reactorcity.local
  • Сервер LFS (1.8.1.6): entnet-181 (будущий сервер LFS)
  • Компьютер пользователя (1.8.1.6): entnet-182
  • Сервер WFS (Windows): 192.168.31.17 (rc-nas-02)
  • Сервер DC (MS Windows Server 2008 R2 - AD): 192.168.31.12 (rc-dc-01)

Машину entnet-182 уже ввел в домен, поэтому вводить я буду сервер LFS. Он свежий, только что установленный.

УСТАНОВКА

Ввод в домен ActiveDirectory (если сервер уже в домене, переходим к пункту №3)

1. Сносим libpam-krb5 чтобы не мешал ввести в домен с помощью sssd

sudo apt purge libpam-krb5 --autoremove

2. Делаем обновление списка пакетов и ставим astra-ad-sssd-client

sudo apt update && sudo apt install astra-ad-sssd-client

Вводим область домена и контроллер.

Соглашаемся на изменения конфига Y

Сверим часы - как говорится 😄 Ага, у меня расхождение на шесть минут !!! . Давайте поправим.

date

Ставим пакет для синхронизации времени systemd-timesyncd

sudo apt install -y systemd-timesyncd

Удаляем альтернативные пакеты синхронизации времени

sudo apt purge ntp chrony -y

Включаем использование клиента systemd-timesyncd и запускаем соответствующую службу

sudo timedatectl set-ntp true

sudo systemctl start systemd-timesyncd

timedatectl

Снова проверяем часы, ага, бьют.

date

Теперь запустим консольную утилиту настройки сетевого адаптера в псевдографике nmtui  (network manager terminal user interface) и пропишем наш контроллер домена в качестве DNS.

sudo nmtui

Перезапускам сетевой адаптер

sudo systemctl restart networking.service NetworkManager

Вводим в домен

sudo astra-ad-sssd-client -d DOMAIN -u ADMIN

После успешного ввода, перезагружаем

sudo /sbin/reboot

После перезагрузки проверяем наличие машины в домене, выполнив id USER_IN_DOMAIN@DOMAIN


Отлично, машина в домене, переходим к настройке шары.

3. Ставим самбу

apt install samba -y

4. Ставим пакет libpam-winbind

sudo apt install libpam-winbind

5. Делаем на всякий случай бэкап smb.conf

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.back

6. Правим конфиг smb.conf

sudo vim /etc/samba/smb.conf

[ SMB.conf ]

7. После idmap config * : backend = tdb дописываем

store dos attributes = yes
server min protocol = SMB2_02
server max protocol = SMB3
deadtime = 30
log file = /var/log/samba/%m.log
max log size = 1000
smb ports = 445
disable netbios = yes
smb2 max read = 8388608
smb2 max write = 8388608

а так же удаляем server role = standalone server - если есть.

По поводу log file. По умолчанию log level = 0

Уровень Название (условное) Что логируется
0 Ошибки и предупреждения Только критические ошибки, проблемы с подключением, отказы в доступе, сбои аутентификации. Успешные операции - НЕ логируются
1 Информационный Подключения/отключения клиентов, открытие шар, общие события. Подходит для мониторинга активности
2 Подробный (debug) Операции с файлами (open, read, write), ACL-проверки, обмен пакетами между клиентом и сервером
3+ Отладка (очень подробно) Внутренние структуры, детали протокола, сетевые пакеты, трассировка вызовов. Только для разработчиков или глубокой диагностики.

log level = 0

  • Ошибки аутентификации (неверный пароль, учетка заблокирована)
  • Отказы в доступе (ACL deny, нет прав)
  • Проблемы с подключением к DC
  • Сбои при работе с файлами ("файл заблокирован", "нет места на диске")
  • НЕ логируется: успешный вход, открытие файла, чтение/запись

log level = 1

  • Все из уровня 0+
  • Успешное подключение клиента ([2025/12/02 10:05:22] smbd: connect from workstation (IP))
  • Отключение клиента
  • Монтирование шары

log level = 2

  • Все из уровня 1+
  • Каждое открытие/закрытие файла
  • Попытки чтения/записи
  • Проверки ACL и прав доступа
  • Действия с каталогами (создание, удаление)

Рекомендую уровень - 0 или 1 (но с logrotate + мониторинг диска), в редких исключениях 2 (но с небольшим количеством пользователей)

При выборе уровня не 0, то нужно в smb.conf еще дописать log level = 1

8. Удаляем секции [homes], [printers], [print$] и на их место вставляем *(Незабываем менять path (если отличается от моего) и менять comment на свой!):

[share]
	path = /share
	comment = entnet-181
	browseable = yes
	read only = no
	guest ok = no
	guest only = no
	acl check permissions = yes
	hide unreadable = yes
	create mask = 0660
	directory mask = 0770

9. После стартуем службу winbind

sudo systemctl start winbind

10. Добавляем в автозагрузку

sudo systemctl enable winbind

11. Проверяем статусы служб (должно быть все зеленое)

sudo systemctl status smbd sudo systemctl status winbind


Создаем иерархию

12. Переходим в root

sudo -i

12.1 Создаем директорию для шары

mkdir /share

13. Назначаем права

chmod 755 /share

chown root:root /share

14. Перезапускаем службы

systemctl restart smbd nmbd

15.1 Так как мы выключили NetBIOS в smb.conf, можно отключить службу nmbd

systemctl disable --now nmbd

15.2 Включив логирование, нужно настроить logrotate для /var/log/samba/

vim /etc/logrotate.d/samba

/var/log/samba/*.log {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    create 644 root root
}

16. Создаем структуру каталогов *(Меняем на свою структуру, здесь чисто для примера указано)

mkdir -p "1.ИТ/0.Внутренние_документы" "1.ИТ/1.Обмен"

И так далее

17. Права на каталоги 0.Внутренние_документы и 1.Обмен

Данные права:

  • 0.Внутренние_документы
    • Видят и имеют полный доступ только члены группы АД "ГРУППА_В_АД".
    • Все остальные (включая "Пользователи домена") - не видят и не имеют доступа.
    • Нельзя удалять, переименовывать или создавать рядом с этой папкой - права на родительский каталог 755.
  • 1.Обмен
    • Видят все доменные пользователи, но:
      • Члены группы "ГРУППА_В_АД" - полный доступ (чтение, запись, удаление).
      • Все остальные - только чтение (открытие файлов), редактирование, создание и удаление - запрещены.
      • Новые файлы и папки внутри 1.Обмен автоматически наследуют эти правила.

# Права для "0.Внутренние документы" *(замените "ГРУППА_В_АД" на реальную группу)

chown root:ГРУППА_В_АД 0.Внутренние_документы/

chmod 2770 0.Внутренние_документы/

setfacl -m g:ГРУППА_В_АД:rwx,o::--- 0.Внутренние_документы/

setfacl -d -m g:ГРУППА_В_АД:rwx,o::--- 0.Внутренние_документы/

# Права для "1.Обмен" *(замените "ГРУППА_В_АД" на реальную группу)

chown root:ГРУППА_В_АД 1.Обмен/

chmod 2775 1.Обмен/

setfacl -m g:ГРУППА_В_АД:rwx,g:"пользователи домена":r-x,o::--- 1.Обмен/

setfacl -d -m g:ГРУППА_В_АД:rwx,g:"пользователи домена":r-x,o::--- 1.Обмен/

и так для каждого каталога (1.ИТ,2.Бухгалтерия...).

18. С помощью команды getfacl проверим права, должны быть как на скриншоте ниже

0.Внутренние_документы

1.Обмен

19. Накинем нашему тестовому пользователю ivanovii группу gr_it. Проверяем

Готово, наш сервер создан


Настройка на АРМ пользователя (entnet-182)

1. Ставим пакеты для PAM_MOUNT

sudo apt install -y libpam-mount cifs-utils

2. Заменяем все содержимое pam_mount.conf.xml

sudo vim /etc/security/pam_mount.conf.xml

На конфиг если у вас две шары (винда и линукс) [Связка Windows/Linux FileShare]:

*(Незабываем менять server на свой (только DomainName srv-01 итд, никаких IP, а так же прописываем path (ваша шара, если делали по дефолту, то share пишем либо свое название, которое прописали в smb.conf)

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!--
See pam_mount.conf(5) for a description.
-->
<!--ВНИМАНИЕ! ВАЖНО! Требуется: DFS с FQDN (не IP!) для корректной работы Kerberos для сетевых шар WINDOWS с DFS -->
<pam_mount>
<debug enable="0"/>
<mntoptions allow="*"/>
<mntoptions require="nosuid,nodev,uid,gid,dir_mode,cruid" />
<logout wait="0" hup="0" term="0" kill="0" />
<cifsmount>mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o %(OPTIONS),cruid=%(USERUID)</cifsmount>
<mkmountpoint enable="1" remove="true" />

<volume
user="*"
fstype="cifs"
server="ВАШ_СЕРВЕР_DN_WINDOWS"
path="ПУТЬ_К_ШАРЕ"
nssd_lookup="0"
mountpoint="/home/%(DOMAIN_USER)/[WFS - WINDOWS] - ОБМЕН/"
options="sec=krb5i,vers=2.1,cruid=%(USERUID),uid=%(USERUID),gid=%(USERGID),nobrl,iocharset=utf8,user=%(USER)"
/>

<volume
user="*"
fstype="cifs"
server="ВАШ_СЕРВЕР_DN_LINUX"
path="ПУТЬ_К_ШАРЕ"
mountpoint="/home/%(DOMAIN_USER)/[LFS - LINUX] - ОБМЕН/"
options="sec=krb5,vers=3.0,nosetuids,noperm,user=%(USER)"
/>

</pam_mount>

Готово, после перезагрузки появится в домашней у любого пользователя каталог LFS и WFS с сетевым диском share который мы создали на lfs.

На конфиг если у вас только линукс шара [Linux FileShare]:

*(Незабываем менять server на свой (только DomainName srv-01 итд, никаких IP, а так же прописываем path (ваша шара, если делали по дефолту, то share пишем либо свое название, которое прописали в smb.conf)

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<pam_mount>
 
    <!-- Общие параметры -->
    <debug enable="0" />
    <luserconf name=".pam_mount.conf.xml" />
    <mntoptions allow="*"/>
    <mntoptions require="sec=krb5,vers=3.0" />
    <logout wait="0" hup="0" term="0" kill="0" />
    <cifsmount>mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o %(OPTIONS),cruid=%(USERUID)</cifsmount>
 
    <!-- Пример монтирования общей шары в домашнюю папку -->
    <volume
        user="*"
        fstype="cifs"
      server="ВАШ_СЕРВЕР_LINUX_DN"
      path="/ПУТЬ_К_ШАРЕ"
      mountpoint="/home/%(DOMAIN_USER)/LFS-Обмен/"
        options="sec=krb5,vers=3.0,nosetuids,noperm"
    />
 
</pam_mount>

 

Готово, вот мы и импортозаместили забугорский windows :D


Здесь я чисто покажу результат нашей работы.

Продемонстрирую работу под разными учетными записями и разграничение

Заходим доменным пользователем ivanovii. Ему мы накинули группу gr_it, он может все делать только с 1.ИТ, в других только смотреть 1.Обмен.

Видим, что в 2.Бухгалтерия у нас нет полномочий, только просмотр.

Аналогично и в других директориях

Попробуем создать в своем отделе "ИТ", во внутренних документах - папку и текстовый файл.

Скопируем папку и файл из 0.Внутренние_документы в 1.Обмен

Попробуем скопировать аналогично в 1.Обмен 2.Бухгалтерия

Получили ошибку, все правильно. "Не туда ты залетел, сынок."

Так же я не могу создать новую папку у бухглатерии

Не могу и переименовать

Не могу создать и в корне отделов - новую папку.

Не могу сделать и со своим отделом никаких лишних операций. То есть нашу иерархию ломать - нельзя!

Снова пробуем манипуляцию в своем отделе, но с файлами.

Теперь посмотрим, как Windows примонтирует нашу LFS шару.

Глянем, как он видит права на папки.

А так же, как этим же ivanovii видим и работаем на windows.

Внесем в наш файл немного текста и сохраним в 1.Обмен

Теперь давайте зайдем нашей - главной бухгалтершой pechkinali с группой gr_buh

Видим, что Лариска наша, не имеет доступ в ИТ, так как она не вкатилась в ИТ

Но в своей отделе, она местный босс

Вернемся в ИТ и посмотрим файл для общего доступа.

Попробуем внести корректировки в файл и сохранить

Получили ошибку, наши разграничения работают.

Теперь давайте протестируем третим пользователем dorohoven с правами gr_it, gr_buh, gr_kadr, gr_bezop - да, тут лучше использовать одну группу и накидать ее на каждую папку отдела, чем добавлять каждую группу всех отделов, но в качестве тестирования можно. Допустим наша служба безопасности должна следить за всеми и у них должен быть полный доступ ко всем отделам. Давайте посмотрим, как это будет выглядеть.

Как мы видим, наш Евгений Николаевич имеет полный доступ ко всем отделам.

Теперь давайте протестируем второй pam_mount конфиг связки (Windows Share + Linux Share)

Видим, что появилось две папки ([LFS - Linux] - Обмен и [WFS - Windows] - Обмен). Видим так же LFS-Обмен - но она пустая, осталась от старого монтирования конфига pam_mount LFS.

LFS примонтировался успешно

Как и Windows.

На этом наш обзор завершен. Если вы досмотрели до сюда, то большое спасибо, что проявили интерес к данной статье! Удачи!

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

Будьте взаимовежливы и корректны.

Все сообщения проходят премодерацию.

Рекламные сообщения и комментарии с ссылками, не несущими смысловую нагрузку по тематике материала будут удаляться.


На развитие проекта

Вход