SCROLL
Среднее время на прочтение: 5 мин.

Разворачиваем файловый сервер Samba 4.5 с интеграцией Active Directory на Debian

Как известно система лицензирования Microsoft штука не дешевая и поэтому рассмотрим как установить файловый сервер Samba 4.5 и создавать общие папки с интеграцией Active Directory на Debian.

Исходные данные:

  • Контроллер домена (DC1) на Windows Server 2012 R2, домен JAKONDA.LOCAL
  • Система по файловый сервер (datastore1) на Debian 9 Stretch

Подготовка системы (Debian)

Перед началом выполнения ниже описанных действий обновляем систему до актуального состояния:

apt-get update && apt-get upgrade -y

Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле /etc/hostname:

/etc/hostname
datastore1.jakonda.local

Так же файл /etc/hosts приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP:

/etc/hosts
127.0.0.1	  localhost
192.168.1.2	datastore1.jakonda.local datastore1

Синхронизация времени

Для корректной аутентификации по протоколу Kerberos необходимо синхронизировать время сервера и клиента. Если системные часы расходятся более чем на 5 минут, то аутентификация не будет выполнена.

Установим NTP сервер и выполним синхронизацию времени с контроллером домена:

apt-get install ntp ntpdate -y

ntpdate dc1.jakonda.local
Более подробно о синхронизации времени на Debian можно почитать в этой статье

Настройка лимитов

Так как в Linux по-умолчанию установлен лимит на 1024 одновременно открытых файлов, а в Windows он 16384, поэтому увеличим лимит в Debian до значения 16384.

В файле /etc/security/limits.conf дописываем в самый конец строки:

/etc/security/limits.conf
*               -       nofile          16384
root            -       nofile          16384
Перезагружаем систему для применения изменений.

Настройка Active Directory (Windows)

В DNS зону JAKONDA.LOCAL, добавляем A-запись файлового сервера:

Создаем служебного пользователя (прим. datastore1), с бесконечным срок действия пароля.

Создание keytab-файла

Создаем keytab-файл (необходим для аутентификации пользователей в Active Directory). В командной строке с правами администраторы выполняем команду (соблюдая регистр):

ktpass -princ HTTP/datastore1.jakonda.local@JAKONDA.LOCAL -mapuser datastore1@JAKONDA.LOCAL -pass Aa1234567 -crypto ALL -ptype KRB5_NT_PRINCIPAL -out C:\datastore1.keytab

Полученный keytab-файл, передаем любым удобным способом на файловый сервер. Как передать файл посредством утилиты PuTTY можно прочитать в этой статье

Настройка Kerberos

Установка пакетов для поддержки аутентификации Kerberos:

apt-get install krb5-user -y
В ходе установки может появится запрос указать область по-умолчанию для Kerberos, область необходимо его указать в заглавном виде (прим. JAKONDA.LOCAL)

Файл конфигурации Kerberos /etc/krb5.conf, приводим к виду:

/etc/krb5.conf
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = JAKONDA.LOCAL
 default_keytab_name = /root/datastore1.keytab
 dns_lookup_kdc = false
 dns_lookup_realm = false
 forwardable = true
 ticket_lifetime = 24h

[realms]
 JAKONDA.LOCAL = {
 kdc = dc1.jakonda.local
 default_domain = JAKONDA.LOCAL
 admin_server = dc1.jakonda.local
 }

[domain_realm]
 .jakonda.local = JAKONDA.LOCAL
 jakonda.local = JAKONDA.LOCAL
Соответственно подставляем название своего домена вместо jakonda.local/JAKONDA.LOCAL

Проверка работы Kerberos, выполним авторизацию в Active Directory:

kinit -kV -p HTTP/datastore1.jakonda.local

Using default cache: /tmp/krb5cc_0
Using principal: HTTP/datastore1.jakonda.local@JAKONDA.LOCAL
Authenticated to Kerberos v5

Удаляем полученный билет:

kdestroy

Установка Samba

Устанавливаем необходимые пакеты:

apt-get install samba cifs-utils winbind libnss-winbind -y

Конфигурационный файл Samba /etc/samba/smb.conf приводим к виду:

/etc/samba/smb.conf
[global]
#   ОБЩИЕ ПАРАМЕТРЫ СЕТЕВОЙ ШАРЫ
    realm = JAKONDA.LOCAL
    workgroup = JAKONDA

    security = ads

    netbios name = DATASTORE1
    server string = %h server

    domain master = no
    local master = no
    preferred master = no
    os level = 0

    dns proxy = no

    socket options = TCP_NODELAY

    unix charset = UTF-8
    dos charset = 866

#   Конфигурация по-умолчанию для локальных пользователей и групп
    idmap config * : backend = tdb
    idmap config * : range = 3000-7999

#   Конфигурация для домена JAKONDA и его пользователей и групп
    idmap config JAKONDA : backend = rid
    idmap config JAKONDA : range = 10000-999999

#   ПАРАМЕТРЫ WINBIND
    winbind enum users = yes
    winbind enum groups = yes
    winbind refresh tickets = yes
    winbind use default domain = yes

#   ПОДКЛЮЧЕНИЕ МОДУЛЕЙ VFS (Virtual File System)
    vfs objects = acl_xattr

#   Поддержка Windows ACLs
    map acl inherit = yes
    store dos attributes = yes

#   ОТКЛЮЧЕНИЕ ПОДДЕРЖКИ СЕТЕВЫХ ПРИНТЕРОВ
    load printers = no
    show add printer wizard = no
    printcap name = /dev/null
    disable spoolss = yes

#   ПАРАМЕНТЫ ЛОГИРОВАНИЯ
    log level = 0 vfs:1
Обращаю внимание что в параметрах realm, workgroup указываем название своего домена. Подробное описание используемых параметров можно по этой ссылке.

Выполним проверку конфигурации на ошибки, командой:

testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

Ввод в домен

Проверка заданной конфигурации Samba правильная, ошибок и предупреждений нет, а поэтому можно вводить систему в домен, выполняем команду:

net ads join -U jakonda@jakonda.local

Вывод об успешном присоединении к домену:

Enter jakonda@jakonda.local's password:
Using short domain name -- JAKONDA
Joined 'DATASTORE1' to dns domain 'jakonda.local'

Настройка Winbind

Чтобы система использовала winbind для поиска пользователей и групп в файле /etc/nsswitch.conf к параметрам passwd, group добавляем параметр winbind:

/etc/nsswitch.conf
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat winbind
group:          compat winbind
shadow:         compat
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

 Перезапускаем службы samba и winbind для применения изменений:

/etc/init.d/smbd restart
/etc/init.d/winbind restart

Проверим, что winbind установил доверительные отношения с Active Directory, выполним команду:

wbinfo -t

checking the trust secret for domain JAKONDA via RPC calls succeeded

Для проверки видит ли winbind пользователей и группы из Active Directory, выполним команды:

wbinfo -u
wbinfo -g

Если в ходе выполнения данных команд в консоль были выведены пользователи и группы из Active Directory, то это значит что winbind работает правильно.

Так же удостоверится в корректной работе winbind можно запросив данные по доменному пользователю (прим. ранее созданного пользователя datastore1):

id datastore1
uid=14389(datastore1) gid=10513(пользователи домена) группы=10513(пользователи домена),14389(datastore1),10001(BUILTIN\users)

Общие папки (Shared Folders)

Так как мы интегрируем samba с Active Directory, то и управление правами доступа на общие папки будет гораздо удобней назначать из ОС Windows.

Настройка разрешений

Учетные записи которые могут настраивать права на общие папки, нуждаются в привилегиях SeDiskOperatorPrivilege. Чтобы посмотреть текущий список привилегий на хосте, выполним команду:

net rpc rights list accounts -U'JAKONDA\jakonda'

Результат выполнения:

BUILTIN\Print Operators
No privileges assigned

BUILTIN\Account Operators
No privileges assigned

BUILTIN\Backup Operators
No privileges assigned

BUILTIN\Server Operators
No privileges assigned

BUILTIN\Administrators
SeMachineAccountPrivilege
SeTakeOwnershipPrivilege
SeBackupPrivilege
SeRestorePrivilege
SeRemoteShutdownPrivilege
SePrintOperatorPrivilege
SeAddUsersPrivilege
SeDiskOperatorPrivilege
SeSecurityPrivilege
SeSystemtimePrivilege
SeShutdownPrivilege
SeDebugPrivilege
SeSystemEnvironmentPrivilege
SeSystemProfilePrivilege
SeProfileSingleProcessPrivilege
SeIncreaseBasePriorityPrivilege
SeLoadDriverPrivilege
SeCreatePagefilePrivilege
SeIncreaseQuotaPrivilege
SeChangeNotifyPrivilege
SeUndockPrivilege
SeManageVolumePrivilege
SeImpersonatePrivilege
SeCreateGlobalPrivilege
SeEnableDelegationPrivilege

Everyone
No privileges assigned

Выдадим разрешение SeDiskOperatorPrivilege группе "Администраторы домена" (Domain Admins), командой:

net rpc rights grant 'JAKONDA\Domain Admins' SeDiskOperatorPrivilege -U'JAKONDA\jakonda'

ENTER JAKONDA\JAKONDA'S PASSWORD:
SUCCESSFULLY GRANTED RIGHTS.

Создание общей папки

Теперь можно приступать к созданию общих папок в samba. Для примера рассмотрим создание общей папки PUBLIC. Создаем папку и выставляем права доступа на нее:

mkdir -p /samba/public

chown 'domain admins':'domain users' /samba/public
chmod 770 /samba/public
Так же вместо имен пользователей и групп, можно указывать их UID, GID. К примеру вместо ‘domain admins’ указать GID этой группы — 10512. Узнать GID можно так
wbinfo --group-info='domain admins'

В файле конфигурации /etc/samba/smb.conf описываем параметры общей папки:

/etc/samba/smb.conf
[PUBLIC]
    path = /samba/public
    read only = no

# Аналог технологии Access-based Enumeration(ABE  Перечисление на основании доступа)
    hide unreadable = yes
#   hide unwriteable files = yes
Если необходимо сделать общую папку невидимой, то нужно использовать $ в название общей папки - [PUBLIC$]. В этом случае общая папка не будет видна при обзоре сети и войти в нее можно будет указав полный путь к ней.

Для применения изменений перечитываем конфигурацию Samba, командой:

/etc/init.d/smbd reload

Далее все настройки прав доступа выполняем из оснастки Управление компьютером (Computer Manager) в ОС Windows.

Запускаем от администратора Управление компьютером (Computer Manager). Нажимаем правой кнопкой мыши на Управление компьютером (локальным) и выбираем Подключится к другому компьютеру... и указываем компьютер на котором вы создали общую папку в samba.

После подключения к системе, переходим в Общие папки > Общие ресурсы и видим нашу общую папку PUBLIC, далее привычным методом выставляем все необходимые права доступа на нее.

Так же через оснастку Управление компьютером (Computer Manager) удобно смотреть активные пользовательские сеансы и какие файлы открыты в общих папках. При необходимости можно завершить пользовательский сеанс или закрыть открытый файл.
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

1 комментариев
  • Добрый вечер.
    Скажите, от чего отталкиваться при расчёте выделения количества оперативной памяти и процессорных мощностей для VM, на которой хотел бы тестово поднять самбу на Debian и реализовать написанное в статье? Пользователей будет, доменных, в районе 50. Шар, около 20. Объём сложно предположить, ориентировочно 4 Тб.