Подключаем сервер с samba к домену windows

В данной статье будет рассмотрен вариант развёртывания файлового сервера Samba на базе операционной системы UBUNTU и организация его взаимодействия с доменов Windows.

В данной статье будет рассмотрен вариант развёртывания файлового сервера Samba на базе операционной системы UBUNTU и организация его взаимодействия с доменов Windows.

Для примера использован следующие исходные данные:

дистрибутив: UBUNTU 16.04.4
имя сервера Linux: 2UBUNTU-16
домен Windows: TESTDOMAIN.LOCAL
контроллеры домена: 2SRV1.TESTDOMAIN.LOCAL, 2SRV2.TESTDOMAIN.LOCAL
администратор контроллера домена: adm

Подготовка

После установки дистрибутива выполняем обновление информации о пакетах и сами пакеты:

sudo apt-get update
sudo apt-get upgrade

Для удобства работы с сервером можно дополнительно установить Webmin (систему управления сервером LINUX через web-интерфейс).

Если есть необходимость, то меняем имя сервера:

hostnamectl set-hostname 2UBUNTU-16

Добавляем доменное имя сервера в файл hosts

sudo nano /etc/hosts

127.0.0.1 localhost
127.0.1.1 2ubuntu-16 2ubuntu-16.testdomain.local

После этого перезагружаем сервер:

sudo reboot

Установка Samba

Помимо установки Samba, так же устанавливаем пакеты Kerberos и Winbind (для возможности подключения и взаимодействия с доменом на Windows):

sudo apt install krb5-user winbind samba libnss-winbind libpam-winbind 

При установке Kerberos будет запрошена область по умолчанию — нужно указать адрес домена (в нашем случае TESTDOMAIN.LOCAL)

Kerberos5 install

Проверяем доступность контроллера домена:

ping -c 5 TESTDOMAIN.LOCAL

Для успешной работы с доменом нужно установить синхронизацию времени с контроллером домена.

Устанавливаем пакет:

sudo apt install ntp

Настраиваем файл конфигурации службы ntp 

sudo nano /etc/ntp.conf

Нужно закомментировать все текущие указанные серверы проверки время и добавить свой домен ( pool TESTDOMAIN.LOCAL)

Перезапускаем службу времени и проверяем статус синхронизации:

sudo systemctl restart ntp
ntpq -p

Запрашиваем тикет у Kerberos у контроллера домена:

kinit Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

Если не отобразилась информация об ошибке, то запрос прошёл верно и можно проверить результат:

klist

klist

Настройка Samba

Сохраним резервную копию файла конфигурации:

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

Далее редактируем файл конфигурации:

sudo nano /etc/samba/smb.conf

Пример заполнения раздела [global]

[global]
security = ADS
workgroup = TESTDOMAIN
realm = TESTDOMAIN.LOCAL
encrypt passwords = yes
# Default idmap config for local BUILTIN accounts and groups
idmap config * : backend = tdb
idmap config * : range = 3000-7999
# idmap config for the TESTDOMAIN domain
idmap config TESTDOMAIN : backend = rid
idmap config TESTDOMAIN : range = 10000-999999
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes

После сохранения изменений в файле smb.conf выполняем проверку:

testparm

testparm

Взаимодействие Samba с доменом Windows

Если ошибок не обнаружено, то подключаем сервер к домену:

sudo net ads join -U Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

ads join

В случае отсутствия ошибок проверяем наличия сервера в списке компьютеров домена на стороне контроллера.

2ubuntu 16

Перезагружаем сервис Winbind:

service winbind restart

Проверяем связь с контроллером домена, а затем список пользователей и групп домена Windows:

wbinfo --ping-dc
wbinfo -u
wbinfo -g

ping вс

Чтобы UBUNTU могла использовать не только локальные группы и пользователей, но и доменные данные, нужно отредактировать настройки диспетчера службы имен NSS (Name Services Switch)

sudo nano /etc/nsswitch.conf

Необходимо дописать следующие значения:

passwd: compat winbind
group: compat winbind

После этого можно проверить возможность просмотра пользователей и групп:

getent passwd adm
getent group "пользователи домена"

getent

Добавляем папку общего ресурса:

sudo mkdir -p /srv/samba/public

Назначаем имя владельца и группу для созданной папки:

sudo chown "adm":"пользователи домена" /srv/samba/public

Редактируем файл конфигурации Samba, чтобы добавить поддержку Windows ACLs и сетевую папку public

sudo nano /etc/samba/smb.conf

[global]
# Windows ACLs Support
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes

[Public]
path = /srv/samba/public/
read only = no

Перезапустим службу Samba (чтобы применить изменения):

service smbd restart && service nmbd restart

Для удобства удалённой настройки разрешений сетевых ресурсов добавим администраторам домена привилегию SeDiskOperatorPrivilege:

net rpc rights grant "TESTDOMAINадминистраторы домена" SeDiskOperatorPrivilege -U "TESTDOMAINadm"

Проверяем подключение привилегий:

net rpc rights list privileges SeDiskOperatorPrivilege -U "TESTDOMAINadm"

rpc rights list

Теперь управлять разрешениями для общих ресурсов можно удалённо с сервера Windows. Для этого запускаем оснастку «Управление компьютером» от имени администратора домена, выбираем «Подключиться к другому компьютеру…» и выбираем имя сервера Linux ( 2UBUNTU-16.TESTDOMAIN.LOCAL)

В разделе «Служебные программы» — «Общие папки» — «Общие ресурсы» будут отображаться сетевые ресурсы, доступные на сервере Linux.

Дополнительно:

Дополнительно можно подключать «корзину» для отдельных ресурсов (чтобы сохранять удалённые файлы и папки).

Проверяем наличие соответствующего модуля:

dpkg -l |grep samba-vfs-modules

Устанавливаем, если он отсутствует:

apt install samba-vfs-modules

Добавляем поддержку корзины для общего ресурса Public

sudo nano /etc/samba/smb.conf

[Public]
path = /srv/samba/public/
read only = no
vfs object = recycle
recycle: repository = .recycle/%U
recycle: touch = yes
recycle: keeptree = yes
recycle: versions = yes

«vfs object = recycle» – включение корзины для общего ресурса;
«recycle: repository = .recycle/%U» – папка, куда будут перемещаться удаленные файлы;
«recycle: touch = yes» – обновлять дату при перемещении файла в корзину;
«recycle: keeptree = yes» – сохранять структуру каталогов удаленного файла;
«recycle: versions = yes» – при перемещении в корзину файла с существующим именем, добавлять к началу имени файла префикс «Copy #».

Для создания статьи использовались следующие материалы:

http://www.linuxrussia.com/samba-as-domain-controller.html
https://4skill.ru/fajlovyj-server-samba-v-domene-windows/

samba в домене Active DirectoryДоброго времени, читатели и гости! Сегодня на своем блоге хочу рассмотреть сервер SAMBA, как член домена Active Directory на Windows 200x. Хочу сказать, что изначально статья планировалась с темой «дополнительный контроллер домена Active Directory Windows 200x на Linux«, но к сожалению, SAMBA может работать не более чем в режиме контроллера домена NT4 (по крайней мере, версия samba 3.х). В 4 версии SAMBA планируется режим работы в качестве полноценного контроллера домена Active Directory, но данная версия только разрабатывается и даже не вышел альфа-релиз, поэтому ставить эксперименты с сырым продуктом пока не хочется. Итак, давайте остановимся на работе SAMBA, как члена доменной структуры Active Directory. Большинство дистрибутивов Linux поддерживают интеграцию с AD «из коробки», но тру-админ должен понимать и разбираться, как все это работает. Поэтому в данной статье я рассмотрю интеграцию Linux и Windows.

Введение (теория)

SAMBA, Windows и KerberosКак мы знаем из прошлой статьи, основным протоколом SAMBA является SMB/CIFS. Основные задачи данного протокола — обеспечение доступа к файлам и каталогам на удаленной машине и сетевая печать. C годами данный протокол совершенствовался и с каждой новой версией поддерживал более защищенные методы аутентификации. Поддержку различных уровней аутентификации можно увидеть на приведенной иллюстрации слева, взятой с wiki журнала Linuxformat.

Итак, существует четыре основных метода аутентификации SMB/CIFS:

Открытым текстом. Использование данного метода крайне не рекомендуется, т.к. пароль передается не зашифрованым. Данный вид в современных системах по умолчанию — отключен. В SAMBA шифрование можно отключить глобальным параметром encrypted password = no в файле smb.conf.

LM (LAN Manager). Использовался в Windows до WinXP. В Samba включен по умолчанию.

NTLM/NTLMv2. Используется для аутентификации в рабочих группах. Samba совместима с NTLMv2. При аутентификации используются легко подбираемые хэши паролей.

Kerberos. В настоящее время, Kerberos является самой защищенной системой, используется криптография с секретным ключом. Применяется в доменах Active Directory (AD). Samba, начиная с версии 3 полноценно поддерживает данный протокол в виде клиента.

kerberos

Остановлюсь на протоколе kerberos поподробней, ибо с ним мы и будем работать в AD. В сети, использующей Kerberos существуют три основных элемента: клиент, центр выдачи ключей-квитанций (KDC – Key Distribution Center) и сервер авторизации. Два последние чаще всего являются одной машиной. По своей сути, Kerberos обеспечивает доверительное обслуживание третьей стороной — сервером Kerberos. Данный сервер является доверенным для всех объектов сети (пользователи, сервисы, машины и т.п.). Объекты сети, доверяющие другим объектам сделать какую-то операцию, в терминологии Kerberos называются — принципалами. У всех принципалов в доверенной сети имеется секретный пароль (он же ключ, он же билет, он же тикет) с сервером kerberos, который позволяет принципалам проверить, что информация от сервера kerberos и других объектов сети — действительна и тем самым принципалы и сервер Kerberos друг-друга аутентифицируют.

Коротко, работа Kerberos заключается в следующем: клиент, предоставляя свои логин/пароль обращается к KDC, если данный клиент существует и введенные данные верны, сервер ключей выдает клиенту тикет на доступ к серверу авторизации. Сервер авторизации проверяет, разрешен ли клиенту доступ клиента к сервису и если разрешен, то выдает клиенту билет на доступ к ресурсу. При этом, расхождение часов клиента и серверов не должно быть более 5 минут. На самом деле, все гораздо сложнее. О кербкрос более подробно можно почитать в приведенных ссылках в конце статьи.

До определенного времени Kerberos являлся технологией, которую разрабатывал MIT (Massachusetts Institute of Technology) для целей США и имелся запрет на экспорт данной технологии. Но вскоре в Королевском Технологическом Институте (Royal Institute of Technology — KTH) в Европе была создана свободная реализация Kerberos, известная как проект Heimdal Kerberos. В итоге, обе разработки имеют свободные реализации, как MIT Kerberos, так и Heimdal Kerberos.

Протокол Kerberos в среде Active Directory работает в купе со следующими компонентами операционной системы:

  • Служба доменных имен DNS
  • Служба каталога LDAP
  • Протокол SMB
  • Служба Kerberos

Каждая из них выполняет свою работу, но если хотя бы один из этих компонентов будет функционировать неправильно, то ввод клиента в домен будет невозможен.

Linux в домене Active Directory

Для реализации взаимодействия пользователей Windows (с их SID) и локальных пользователей UNIX (имеющих идентификаторы UID и GID) существует несколько подходов:

Каталог LDAP AD как источник проверки подлинности. Active Directory и является типичным LDAPv3-каталогом, при этом, при проверке подлинности силами LDAP имя пользователя и пароль передаются без шифрования — открытым текстом. Это, естественно, небезопасно. Для решения данной проблемы возможно использовать шифрование SSL, но добавляет определенный объем танцев с бубном при дополнительной настройке AD, а так же лишнюю нагрузку на контроллер домена. При этом Name Service Switch (NSS) работает напрямую с LDAP. Данный вид хранения информации о соответствии пользователей Windows и Linux удобен при использовании NT4 PDC организованном на SAMBA с хранением информации в базе LDAP.

Демон Winbind. При данном способе, NSS настраивается на работу с Winbind, а Winbind в свою очередь занимается «разрешением» имен пользователей (точнее идентификаторов SID) в UID и GID с помощью LDAP, RPC и/или Kerberos — вызовов и создается (кэшируется) запись о пользователе в файлах демона winbindd: winbindd_idmap.tdb и winbindd_cache.tdb. Данный способ мы и будем рассматривать.

Если для получения информации о пользователях не используется LDAP Active Directory, каждый сервер SAMBA — член Active Directory поддерживает свою уникальную базу данных присоединений пользователей. Это значит, что почти бесспорным является тот факт, что пользователь, имеющий доступ к двум серверам — членам домена не имеет того же самого UID/GID на обоих серверах, в тоже время это прозрачно для пользователя сети Windows, потому что мы разграничиваем доступ к ресурсам на основании имен пользователей и групп, а не на основании UID и GID. Данные о пользователях хранятся (кэшируются) в файлах winbindd_idmap.tdb и winbindd_cache.tdb.

Введение Linux в домен Active Directory

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

NetBIOS имя домена — AD
Полное имя домена — AD.local
Имена контроллеров домена — dc.AD.local и dc2.AD.local
IP контроллеров домена — 10.0.0.2 и 10.0.0.1 соответственно
Адресация локальной сети — 10.0.0.1/24 (он же 10.0.0.1/255.255.255.0)
IP SAMBA-сервера — 10.0.0.11
Имя SAMBA-сервера — files.AD.local

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

Пример включения в домен буду рассматривать на Debian 6. Все нижеуказанные шаги можно вполне применить к другому дистрибутиву. Samba предоставляет собой три демона: smbd, nmbd и winbindd. smbd — отвечает за общий доступ к файлам и принтерам, nmbd – за разрешение имен по протоколу SMB/CIFS, регистрацию компьютера в сети и некоторые другие задачи, которые на текущий момент нам не интересны, winbindd обеспечивает связь с контроллером домена Active Directory и аутентификацию пользователей домена. В Debian, демоны smbd и nmbd содержатся в пакете samba, а winbindd – в пакете winbind. Кроме демона winbind в последнем пакете содержится утилита net (кстати, очень похожа на одноименную утилиту от Win), позволяющую выполнять множество административных задач, в том числе присоединение машины к домену AD.

1. Установим пакеты samba и winbind (мне так же понадобилось установить пакет smbclient для использования rpcclient для управления принтерами и tdb-tools для tdbackup для управления базами tdb, в которых SAMBA хранит свои настройки при подключении к домену).

2. Настроим файл hosts, задав полное доменное имя (FQDN) для сервера и проверим сделанные настройки командой hostname:

root@files:~# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       files.AD.local files
root@files:~# hostname -f
files.AD.local

3. Настроим файл /etc/resolv.conf, задав полное имя домена для автоматической подстановки к именам хостов и адреса DNS серверов локальной сети (более подробно об этом файле в статье Настройка сети в Linux):

root@files:~# cat /etc/resolv.conf
domain AD.local
search AD.local
nameserver 10.0.0.2
nameserver 10.0.0.1

4. Настроим файл Name Service Switch — /etc/nsswitch.conf для указания в каком порядке NSS осуществляет поиск имен пользователей, паролей, хостов, сетей и т. д. (указаны только модифицированные строки):

root@files:~# cat /etc/nsswitch.conf

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind

hosts:          files dns wins
..............

Согласно приведенных настроек, при поиске имен пользователей, групп и паролей Linux будет последовательно обращаться к встроенной базе данных (файлам /etc/passwd, /etc/group, /etc/shadow), затем – к демону winbind. При разрешении имени хоста сначала будет использоваться файл /etc/hosts, затем DNS и, в последнюю очередь, служба имен NetBIOS. Это может пригодиться, если в вашей сети есть хосты, не зарегистрированные в DNS, но имеющие имена NetBIOS, к примеру, компьютеры под управлением Windows в составе рабочей группы.

Настройка SAMBA

1. Проверим, поддерживает ли установленный пакет работу с протоколом Kerberos и каталогом LDAP:

root@files:~# smbd -b | grep KRB
HAVE_KRB5_H
HAVE_KRB5_LOCATE_PLUGIN_H
HAVE_ADDRTYPE_IN_KRB5_ADDRESS
HAVE_DECL_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE
HAVE_DECL_KRB5_GET_CREDENTIALS_FOR_USER
HAVE_INITIALIZE_KRB5_ERROR_TABLE
HAVE_KRB5
HAVE_KRB5_AUTH_CON_SETUSERUSERKEY
HAVE_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE
HAVE_KRB5_C_ENCTYPE_COMPARE
HAVE_KRB5_C_VERIFY_CHECKSUM
HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER
HAVE_KRB5_ENCRYPT_BLOCK
HAVE_KRB5_ENCRYPT_DATA
HAVE_KRB5_ENCTYPE_TO_STRING
HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG
HAVE_KRB5_FREE_DATA_CONTENTS
HAVE_KRB5_FREE_HOST_REALM
HAVE_KRB5_FREE_KEYTAB_ENTRY_CONTENTS
HAVE_KRB5_FREE_UNPARSED_NAME
HAVE_KRB5_FWD_TGT_CREDS
HAVE_KRB5_GET_CREDENTIALS_FOR_USER
HAVE_KRB5_GET_HOST_REALM
HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC
HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
HAVE_KRB5_GET_PERMITTED_ENCTYPES
HAVE_KRB5_GET_RENEWED_CREDS
HAVE_KRB5_KEYBLOCK_IN_CREDS
HAVE_KRB5_KEYTAB_ENTRY_KEY
HAVE_KRB5_KEYUADE_APP_DATA_CKSUM
HAVE_KRB5_KT_FREE_ENTRY
HAVE_KRB5_LOCATE_KDC
HAVE_KRB5_MK_REQ_EXTENDED
HAVE_KRB5_PRINCIPAL2SALT
HAVE_KRB5_PRINCIPAL_COMPARE_ANY_REALM
HAVE_KRB5_PRINC_COMPONENT
HAVE_KRB5_PRINC_REALM
HAVE_KRB5_SET_DEFAULT_TGS_ENCTYPES
HAVE_KRB5_SET_DEFAULT_TGS_KTYPES
HAVE_KRB5_SET_REAL_TIME
HAVE_KRB5_STRING_TO_KEY
HAVE_KRB5_TKT_ENC_PART2
HAVE_KRB5_USE_ENCTYPE
HAVE_KRB5_VERIFY_CHECKSUM
HAVE_LIBGSSAPI_KRB5
HAVE_LIBKRB5
HAVE_MAGIC_IN_KRB5_ADDRESS
HAVE_SHORT_KRB5_MK_ERROR_INTERFACE
HAVE_TICKET_POINTER_IN_KRB5_AP_REQ
KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT
KRB5_TICKET_HAS_KEYINFO
KRB5_VERIFY_CHECKSUM_ARGS
root@files:~# smbd -b | grep LDAP
HAVE_LDAP_H
HAVE_LDAP
HAVE_LDAP_ADD_RESULT_ENTRY
HAVE_LDAP_INIT
HAVE_LDAP_INITIALIZE
HAVE_LDAP_SASL_WRAPPING
HAVE_LDAP_SET_REBIND_PROC
HAVE_LIBLDAP
LDAP_SET_REBIND_PROC_ARGS

Если у вас вывод похож на указанный значит все ок. Если вывод не содержит строчек с надписями KRB5 и LDAP, значит нужно скачать исходники и собрать демон с поддержкой Kerberos. Как собирать ПО из исходников — я писал в статье Управление программным обеспечением в Linux.

2. Настроим САМБА для ввода в домен

root@files:~# # переместим оригинальный файл для ознакомления в будущем
root@files:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
root@files:~#
root@files:~# # создадим файл, следующего содержания,
root@files:~# # в котором будут содержаться комментарии:
root@files:~#
root@files:~# cat /etc/samba/smb.conf.comment
[global]
        # NetBIOS-имя хоста (должно совпадать с значением в hosts)
        netbios name = FILES
        # уровень безопасности (ads - член домена AD)
        security = ads
        # NetBIOS имя домена
        workgroup = AD
        # область работы kerberos 
        #      (совпадает с именем домена и записывается прописными буквами)
        realm = AD.LOCAL
        # метод аутентификации smbd (с помощью winbind)
        auth methods = winbind
        # имена сервера паролей - КД
        password server = dc.ad.local dc2.ad.local
        # настройки демона winbind:
                # мапить пользователей на следующий диапазон ЮИД
                idmap uid = 10000-20000
                # мапить группы на следующий диапазон ГИД
                idmap gid = 10000-20000
                # разделитель домена и объекта
                winbind separator = ^
                # разрешить приложениям (например passwd) перечислять пользователей
                #    и группы из домена AD (необязательно)
                winbind enum users = Yes
                winbind enum groups = Yes
                # разрешить сторонним приложениям ссылаться на пользователей AD
                #    как на локальных, не указывая имя домена и символ-разделитель
                winbind use default domain = yes
                # разрешить кэширование авторизованных пользователей
                #    (на случай, если КД станет недоступен) - на время настройки лучше отключить
                #winbind offline logon = yes
        # НЕ заставлять nmbd-сервер быть мастер-сервером Wins
        preferred master = No
        # оприеделить лог-файл (по умолчанию - сислог)
        log file = /var/log/samba/log.new
        # уровень логирования (можно менять от 0-минимальный до 9 - максимальный)
        log level = 3
        # действие при крушении демона
        panic action = /usr/share/samba/panic-action %d
        # принтеры нам не нужны
        #load printers = no
        #show add printer wizard = no
        #disable spoolss = yes
        # принтеры нам нужны
        printing = CUPS
        cups options = raw
        show add printer wizard = yes
        # использовать только порт 139
        #     (немного ускоряет обращения и избавляет от некоторых ошибок в логе)
        smb ports = 139
        # файл ручного мапинга пользователей
        username map = /etc/samba/smbusers
        # ускорим работу самба
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
 root@files:~# # проверим корректность файла и сформируем итоговый конфигурационный файл
root@files:~# testparm -s /etc/samba/smb.conf.comment > /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf.comment
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER

В документации Samba указывается, что параметр password server не обязателен, поскольку Samba умеет находить сервер паролей, используя SRV-записи DNS. Однако автоопределение сервера паролей срабатывает не всегда, особенно в старых версиях Samba. В Windows 200x для отделения имени домена от имени пользователя используется обратная косая черта. В Linux это может привести к проблемам, поскольку данный символ трактуется как служебный, для решения данной проблемы введен параметр winbind separator, заменяющий на указанный символ.

После проведенных тестов, можно однозначно утвердить, что указанный параметр socket options однозначно в разы ускоряет работу samba.

3. Удаляем если есть (или переносим в резервные копии) файлы из /var/lib/samba/*.tdb. Данное действие актуально, если самба ранее была подключена к домену, т.к. в данных файлах хранятся кэш настроек SAMBA. Описание каждого файла можно почитать по ссылкам в конце статьи.

4. Синхронизируем время

Для корректной работы SAMBA, как клиента домена Active Directory, расхождение часов не должно превышать 5 минут. Точнее сказать — этого требует протокол Kerberos. Для решения вопроса синхронизации времени я предлагаю использовать демона ntpd. Как его установить я описывал в статье Сервер точного времени на Linux, поэтому ограничусь приведением рабочего конфига для клиента сети Windows:

root@files:~# cat /etc/ntp.conf
server dc.ad.local
server dc2.ad.local
restrict default ignore
restrict dc.ad.local noquery notrap
restrict dc2.ad.local noquery notrap
restrict 127.0.0.1 nomodify notrap

Для синхронизации времени можно использовать, так же команду net time set в cron.

На данном этапе можно перегрузить машину для применения всего выше сделанного.

Ввод SAMBA в домен Active Directory

После загрузки машины — убеждаемся, что время не отстаёт от доменного и выполняем команду:

root@files:~# net ads join -U domain_admin
Enter domain_admin's password:
Using short domain name -- AD
Joined 'FILES' to realm 'ad.local'

Вместо учетной записи «domain_admin» необходимо использовать имя пользователя с правом присоединения компьютера к домену. Стоит обратить внимание, что если в конфиге «самба» не указан параметр winbind use default domain, то имя пользователя необходимо вводить в формате domain_admin@AD.LOCAL. Сообщения выводимые после выполнения команды обозначают следующее: Using short domain name — AD и Joined ‘FILES’ to realm ‘ad.local’ указывают на удачный ввод в домен. Если после выполнения команды не было ошибки Join to domain is not valid, значит скорее всего, ввод в домен произведен успешно.

У меня при первой попытке вывалилось сообщение

[2011/07/31 01:52:14.769838,  0] libads/kerberos.c:333(ads_kinit_password)
kerberos_kinit_password FILES$@AD.LOCAL failed: Preauthentication failed

но тем не менее сервер был включен в домен. В списках рассылки видел, что эта ошибка связана с некорректной работой библиотек отвечающих за Kerberos. Как избавиться от ошибки — решения не нашел. :(

Далее, для корректной работы SAMBA с доменной аутентификацией Active Directory, необходимо перезапустить демонов samba и winbind, после чего можно просмотреть список доменных учетных записей:

root@files:~# # попытка получить список пользователей до перезапуска служб
root@files:~# wbinfo -u
Error looking up domain users
root@files:~# # перезапуск служб
root@files:~# service samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
files ~ # service winbind restart
Stopping the Winbind daemon: winbind.
Starting the Winbind daemon: winbind.
root@files:~# # попытка получить список пользователей после перезапуска служб
root@files:~# wbinfo -u
FILES^nobody
guest
administrator
krbtgt
domain_user1
domain_user2
...
root@files:~# # попытка получить информацию о пользователе после перезапуска служб
root@files:~# id domain_user13
uid=10002(domain_user13) gid=10002(domain users) группы=10002(domain users),10007(it),10010(акцизный склад),10011(sql_ts),10006(it-dep),10007(it),10001(BUILTIN^users)
root@samba:~# getent passwd domain_user11
domain_user11:*:10002:10009::/home/AD/domain_user11:/bin/false

Все. После данных манипуляций наш Linux — в домене AD. И через сетевое окружение можно на него зайти без ввода пароля, только там не будет расшаренных ресурсов, их мы создадим позднее.

Диагностика SAMBA при включении в домен AD

Если включение в домен завершилось ошибкой, необходимо:

  1. Проверить настройки DNS на Linux и убедиться, что команда hostname -f  выводит корректное FQDN-имя хоста.
  2. Проверить, в состоянии ли утилиты nslookup или dig разрешить имя КД Active Directory в IP.
  3. Проверить, поддерживает ли установленный пакет samba работу с Kerberos и LDAP.
  4. Если вышеуказанные шаги не помогли, можно выполнить тестовое подключение к домену с увеличенным значением log level(параметр -d увеличивает уровень журналирования), тем самым выявив ошибку подключения:
    • net ads testjoin -d 10 -Udomain_admin

взаимодействие SAMBA и Active DirectoryДля большего понимания взаимодействия SAMBA с инфраструктурой Active Directory приведу (справа) иллюстрацию (взято с Linuxformat).

Существует распространенное заблуждение, что Linux (samba) при входе в домен не в состоянии самостоятельно получить первую квитанцию от центра ключей Kerberos. Это заблуждение возникло потому что в официальном руководстве по SAMBA в одном из подготовительных шагов при введении SAMBA в AD приводится настройка файла /etc/krb5.conf и вызовов команды kinit. Данный файл содержит параметры автономного клиента Kerberos в локальной Linux и утилита linit использует именно настройки из файла /etc/krb5.conf.

Соответственно, настройка krb5.conf и выполнение kinit необходимо исключительно для тестирования связи с сервером Kerberos и выполнять эти настройки совсем не обязательно. Samba может самостоятельно выполнять весь цикл взаимодействия KDC, включая обновление квитанций по истечению срока их действия без применения сторонних утилит. Чтобы библиотеки Kerberos, которые использует самба для взаимодействия с KDC корректно были настроены и работали, SAMBA создает на базе информации из файла smb.conf файл /var/run/samba/smb_krb5/krb5.conf.AD, который и заменяет стандартный /etc/krb5.conf.

Создание разделяемых ресурсов SAMBA в домене Active Directory

Введение

Чтобы сразу избавить от ошибок в будущем при организации разделяемых ресурсов, хочу сказать, что при описании ресурсов в SAMBA конечный доступ к файлам и папкам определяется двумя параметрами. Первое — это параметры доступа, указанные в параметрах разделяемого ресурса, второе — права доступа к файловой системе. При этом, по-умолчанию, все пользователи самба обращаются к файловой системе с правами группы «остальные», если в samba не указано иное (например подключившийся пользователь не мапится в локального пользователя UNIX). То есть, кроме того, что самба определяет права доступа к разделяемому ресурсу, она может подключающемуся пользователю назначить соответствие системному локальному пользователю Linux, так, что подключившийся пользователь будет получать доступ к файловой системе с правами какого-либо примапленного (читай — назначенного, образовано от англ. mapping  присоединение) локального пользователя Linux.

Это чем-то похоже на организацию доступа к файлам в Windows, в которой тек же есть права доступа к файловой системе (вкладка «Безопасность») и права доступа к разделяемому ресурсу (вкладка «Доступ»).

Права файловой системы я рассматривал в статье Права доступа в Linux, т.к. эта тема очень актуальна для текущей статьи, напомню в двух словах о правах… Итак, права в Linux определяются тремя возможностями (чтение, запись и исполнение) для трёх групп пользователей (владелец, группа, все остальные). При этом семантика, применения прав к файлам и каталогам несколько расходится. Приведу небольшую таблицу с описанием прав доступа по отношению к файлам/каталогам:

Право Для файла Для каталога
Чтение (r или 4) Чтение содержимого файла. Просмотр содержимого каталога.
Чтение списка файлов и подкаталогов.
Запись (w или 2) Изменение содержимого файла или удаление файла. Изменение списка файлов и подкаталогов.
В том числе удаление, переименование файлов и подкаталогов.
Исполнение (x или 1) Исполнение содержимого файла, как соответствующего набора команд. Вход в каталог и вход в подкаталоги каталога.

Файловый сервер

Общий ресурс только на чтение

Для создания ресурса на чтение, достаточно добавить в smb.conf строки:

[root@files ~]# # определим общий ресурс
[root@files ~]# grep бмен -A4 /etc/samba/smb.conf.comment
[Обменник]
        # путь к каталогу
        path = /shares/obmen
        # комментарий к ресурсу
        comment = Общий ресурс на чтение на сервере Samba
[root@files ~]# # создадим каталог с правами:
[root@files ~]# ls -ld /shares/obmen/
drwxr-xr-x 2 root root 4096 Июл 31 20:07 /shares/obmen/

из листинга видно, что владелец и группа каталога — root и права каталога — rwxr-xr-x. Соответственно, полные права имеет только владелец (rwx) — root, группа же и «остальные» имеют право только на чтение и выполнение (r-xr-x). А т.к., согласно глобальных настроек SAMBA, пользователи у нас мапяться с ID в диапазоне от 10000 до 20000, соответственно, при доступе к файловой системе — пользователь обращается как «остальные», соответственно имеет права r-x. Скажу даже больше, даже если мы зададим полные права на каталог для всех (chmod a+rwx /shares/obmen), то пользователи не смогут писать в каталог, пока мы в параметрах ресурса SAMBA не зададим данное разрешение.

Общий ресурс на чтение и запись для всех (файлопомойка)

Для организации абсолютной файлопомойки мы можем пойти следующим путем:

[root@files ~]# # зададим полные права "остальным" (rwx)
[root@files ~]# chmod o+rwx /shares/obmen
[root@files ~]# ls -ld /shares/obmen/
drwxr-xrwx 2 root root 4096 Июл 31 20:07 /shares/obmen/
[root@files ~]# # определим возможность записи в каталог в настройках ресурса
[root@files ~]# grep бмен -A6 /etc/samba/smb.conf.comment
[Обменник]
        # путь к каталогу
        path = /shares/obmen
        # комментарий
        comment = Общий ресурс на сервере Samba
        # включает возможность записи
        read only = no
[root@files ~]# testparm -s /etc/samba/smb.conf.comment > /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf.comment
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
Processing section "[Обменник]"
Loaded services file OK.
WARNING: You have some share names that are longer than 12 characters.
These may not be accessible to some older clients.
(Eg. Windows9x, WindowsMe, and smbclient prior to Samba 3.0.)
Server role: ROLE_DOMAIN_MEMBER
[root@files ~]# service samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.

Создав указанный конфиг, при создании каталогов и файлов в разделяемом ресурсе, они будут созданы с владельцем и основной группой, к которой принадлежит создавший объекты владелец, а так же  с маской по-умолчанию:

[root@files ~]# testparm -v -s  /etc/samba/smb.conf.comment | grep mask
        ......
        create mask = 0744
        .......
        directory mask = 0755
        ......

Для файлов — 0744, для каталогов — 755, то есть, при создании файлов — у группы и остальных будут отрезаны биты записи и исполнения, а при создании каталогов — биты записи:

[root@files ~]# ls -laR /shares/obmen/
/shares/obmen/:
итого 12
drwxr-xrwx 3 root       root         4096 Июл 31 20:39 .
drwxr-xr-x 4 root       root         4096 Июл 31 20:07 ..
drwxr-xr-x 3 user1 domain users 4096 Июл 31 20:39 Новая папка

/shares/obmen/Новая папка:
итого 12
drwxr-xr-x 3 user1 domain users 4096 Июл 31 20:39 .
drwxr-xrwx 3 root       root         4096 Июл 31 20:39 ..
drwxr-xr-x 2 user1 domain users 4096 Июл 31 20:39 Новая папка

/shares/obmen/Новая папка/Новая папка:
итого 12
drwxr-xr-x 2 user1 domain users 4096 Июл 31 20:39 .
drwxr-xr-x 3 user1 domain users 4096 Июл 31 20:39 ..
-rwxr--r-- 1 user1 domain users    3 Июл 31 20:39 Новый текстовый документ.txt
-rwxr--r-- 1 user1 domain users    0 Июл 31 20:39 Новый точечный рисунок.bmp

Соответственно, удалить или изменить файл смогут либо сами владельцы файлов, либо root. Чтобы избежать этой проблемы и чтобы все пользователи могли ч/liитать и писать во все файлы, необходимо добавить следующие параметры в описание ресурса:

[root@files ~]# grep бмен -A10 /etc/samba/smb.conf.comment
[Обменник]
        # путь к каталогу
        path = /shares/obmen
        # комментарий
        comment = Общий ресурс на сервере Samba
        # включает возможность записи
        read only = no
        # доступ всем на все
        create mask = 0666
        directory mask = 0777

[root@files ~]# testparm -s /etc/samba/smb.conf.comment > /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf.comment
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
Processing section "[Обменник]"
Loaded serv5 минутices file OK.
WARNING: You have some share names that are longer than 12 characters.
These may not be accessible to some older clients.
(Eg. Windows9x, WindowsMe, and smbclient prior to Samba 3.0.)
Server role: ROLE_DOMAIN_MEMBER
[root@files ~]# service samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.

В результате — все могут читать и все могут писать и удалять не зависимо от хозяина файла или каталога.

Общий ресурс только на чтение для определенной группы пользователей

Для создания ресурса на чтение для определенной группы пользователей, необходимо добавить в smb.conf строки:

[root@files ~]# # определим общий ресурс
[root@files ~]# grep Бух -A7 /etc/samba/smb.conf.comment
[Бухгалтерия]
        # путь к каталогу
        path = /shares/buh
        # комментарий
        comment = Каталог отдела Бухгалтерия
        # определим доступ для отдельной группы пользователей
        valid users = @"AD^Бухгалтерия", AD^domain_user
[root@files ~]# # создадим каталог с правами (у группы "остальные должны быть права r-x"):
[root@files ~]# ls -ld /shares/buh/
drwxr-xr-x 2 root root 4096 Июл 31 20:07 /shares/buh/

Параметр valid users определяет какой/им группе/ам пользователей или просто каким пользователям разрешен доступ к данному каталогу. Обратите внимание, что даже когда определен параметр winbind use default domain, требуется указание полного, определенного в домене имени пользователя, например valid users = @»DOMAINDomain Group». Обратите внимание так же на использование двойных кавычек. Символ ^ — возможно у вас будет другой, в зависимости от указанного в глобальном параметре winbind separator. Так же, обращаю ваше внимание, что на каталог, указанный в параметре path разделенного ресурса должны быть права не менее r-x для группы «остальные», чтобы подключенные пользователи могли читать файлы и просматривать содержимое каталога.

Общий ресурс только на чтение и запись для определенной группы пользователей

Для создания ресурса на чтение и запись для определенной группы пользователей, необходимо добавить в smb.conf строки:

[root@files ~]# # определим общий ресурс
[root@files ~]# grep Бух -A7 /etc/samba/smb.conf.comment
[Бухгалтерия]
        # путь к каталогу
        path = /shares/buh
        # комментарий
        comment = Каталог отдела Бухгалтерия
        # Определим доступ для записи
        read only = no
        # определим доступ для отдельной группы пользователей
        valid users = @"AD^Бухгалтерия", AD^domain_user
        # включить наследование прав доступа
        inherit permissions = Yes
[root@files ~]# # создадим каталог с правами (у группы "остальные должны быть права rwx"):
[root@files ~]# ls -ld /shares/buh/
drwxr-xrwx 2 root root 4096 Июл 31 20:07 /shares/buh/

Как видно, добавился неизвестный нам параметр inherit permissions = Yes, который задает наследовать права доступа к создаваемым файлам и каталогам от родительского. Это сделано опять же по причине того, что каталоги и файлы создаются с маской по-умолчанию.

Дополнительно

Указанные выше способы — это не единственное решение для ресурсов общего доступа для пользователей домена. Можно пойти другими путями, например назначить в файловой системе — группу-владельца каталога, поставить на каталог бит SGID для наследования владельца группы и в описании ресурса ограничиться двумя параметрами: path и read only =no.

Я, например, стараюсь использовать такую схему предоставления доступа к общим ресурсам: я стараюсь ставить права файловой системы на максимум и ограничивать доступ на уровне smb.conf и описания ресурса. То есть, права доступа на файлы у меня rw-rw-rw-, а на каталоги rwxrwxrwx и в описании ресурса я устанавливаю параметр inherit permissions для наследования указанных прав доступа. Либо можно указать параметры create mask = 0666 и directory mask = 0777, чтобы права задавались при создании файлов и каталогов. Ограничение на доступ к ресурсу через smb.conf устанавливаются параметрами valid users, write users и admin users. У этого способа так же есть дополнительный плюс. При необходимости переноса сервера на другую машину. достаточно будет сделать 3 вещи: 1. Перенести содержимое расшаренных ресурсов, 2. Назначить права 666 для файлов и 777 для каталогов и 3. Перенести Файл smb.conf. Без необходимости переноса всех баз SAMBA — tdb и отслеживания соответствия SID и локальных UID/GID.

Так же есть такой финт: в разделе [global] в smb.conf был указан параметр username map = /etc/samba/smbusers. Данный параметр очень удобен, т.к. позволяет присоединить пользователей Windows к локальным пользователям UNIX. Например, можно назначить root’ом Вашего пользователя в домене и управлять всеми общими ресурсами с полными правами:

root@samba:~# cat /etc/samba/smbusers
root = AD^domain_admin

При внесении доменных пользователей в данный файл необходимо указывать полное имя в независимости от параметра winbind use default domain. Так же, возможно указать несколько пользователей или доменную группу разделенные пробелами.

Для сопоставления доменных групп по-умолчанию (т.е. таких как Domain Admins, Domain Users и др, которые создаются в SAMBA автоматом, их еще можно просмотреть командой net groupmap list или getent group) и групп UNIX, необходимо выполнить:

$ net groupmap modify ntgroup="Domain_Group" unixgroup=namegroup

Для сопоставления новых доменных групп и групп UNIX, необходимо выполнить:

$ # добавление новой группы
$ net rpc group add "NewGroup"
$ # сопоставление групп
$ net groupmap modify ntgroup="NewGroup" unixgroup=newunixG

При этом, сопоставление сохраняется в одном из tdb файлов SAMBA.

Но! username map не работает, если в конфиге SAMBA на ресурс задан параметр valid users и пользователь, указанный в файле username map не входит в членов параметра valiud users. Чтобы обойти эту проблему, необходимо указать параметр admin users, который синтаксически аналогичен valid users, и определяет указанному пользователю работать с ресурсом в качестве пользователя root.

Кроме того, можно скрыть ресурс от общих глаз, если поставить параметр browseable = no, то ресурс не будет отображаться в проводнике, когда заходишь на сервер, но по полному пути доступ к нему будет.

Кроме стандартных прав (которых, кстати, вполне достаточно для решения основных задач по организации файлового сервера) функциональность можно расширить с помощью т.н. POSIX ACL, которые позволяют назначить права доступа нескольким владельцам или нескольким группам пользователей на уровне файловой системы.  POSIX ACL ограничены всё теми же правами rwx. Полноценно редактировать права доступа аналогично Windows, например, назначать пользователю право изменения прав безопасности там возможности нет. Про данную технологию я постараюсь написать отдельную статью, а так же дам ссылки в конце — почитать о POSIX ACL.

Сервер печати в домене Active Directory

Для запуска сервера печати на нашем сервере SAMBA в домене Active Directory, необходимо проделать следующие шаги:

  1. Установить пакет cups (мне так же необходимо было установить пакет hplip, т.к. используются преимущественно принтеры от HP и пакет smbclient) и настроить сервер печати по вашим нуждам. Как настраивать сервер печати, я писал в статьях Сервер печати на Linux  и Как работает SAMBA ч.2. Поэтому обойдусь только указанием настроек из smb.conf.
  2. Добавить нужные принтеры через веб-интерфейс CUPS.
  3. Раскомментировать в smb.confпараметры
            # принтеры нам нужны
            printing = CUPS
            cups options = raw
            show add printer wizard = yes
  4. Закомментировать параметры в smb.conf:
            # принтеры нам не нужны
            #load printers = no
            #show add printer wizard = no
            #disable spoolss = yes
  5. Добавить 2 дополнительных раздела:
    [root@files ~]# grep "[printers" -A15 /etc/samba/smb.conf.comment
    [printers]
            # опишем принтеры:
            comment = Очередь печати SMB
            # включаем возможность печати
            printable = yes
            # путь к спулеру
            path = /var/spool/samba
    
    [print$]
            # опишем каталог драйверов
            comment = Драйверы принтера
            # каталог драйверов
            path = /var/lib/samba/printers
            # можно писать
            read only = No
  6. Перезапустить демонов cups, samba и winbind.
  7. Добавить драйверы принтеров, как было описано в статье Как работает SAMBA ч.2 (автоматическая загрузка драйверов). Естественно, загружать драйвер нужно от доменного пользователя, указанного в /etc/samba/smbusers, как root.
  8. По вкусу настроить параметры по умолчанию для принтера через каталог «Принтеры и Факсы» на сервере самба, ибо у меня почему-то по-умолчанию устанавливался размер бумаги — Letter.
  9. Пользоваться сетевой печатью.

Добавление драйвера принтера на сервер SAMBAНа моем сервере пришлось устанавливать единый драйвер для всех принтеров сети. Это привело к некоторым проблемам при установке драйверов. При этом, 7 шаг у меня немного растянулся и пришлось пользоваться шеллом для назначения драйвера принтеру. Меня спасла команда rpcclient. Об использовании данной команды можно почитать по ссылкам, приведенным в конце статьи. Итого, 7 шаг принял следующую последовательность:

7.1. Добавить драйвер принтера через каталог «Принтеры и факсы на севере files»: ПКМ по пустому месту — Свойства сервера. Вкладка «Драйверы — Добавить»

7.2. Назначение каждому принтеру необходимого драйвера с помощью команды rpcclient, согласно инструкции: http://samba.org/samba/docs/man/Samba-HOWTO-Collection/CUPS-printing.html#id2644219. Необходимо выполнить шаги 2,3,7-15, т.к. принтеры уже у нас установлены, драйвер тоже уже добавлен на сервер. Основная команда привязки принтера к драйверу выглядела так:

rpcclient localhost -Udomain_admin%password -c /
 'setdriver printer_name "HP Universal Printing PS"'

Полезные команды управления SAMBA в домене AD

$ # отобразить (-L) список расшаренных ресурсов на хосте 10.0.0.11 анонимно (-N)
$ smbclient -N -L 10.0.0.11
$ # подключиться к ресурсу share хоста 10.0.0.11 с логином username и паролем passwd
$ smbclient //10.0.0.11/share -Uusername%passwd
$ # просмотреть содержимое tdb-базы (необходим пакет tdb-tool)
$ tdbdump /var/lib/samba/secrets.tdb
$ # список доменов в сети
$ wbinfo --all-domains
$ # информация о домене DOMAIN
$ wbinfo -D DOMAIN
$ # проверить связь с доменом
$ wbinfo -t

Что почитать

Протокол керберос:
в оригинале: http://web.mit.edu/kerberos/
дополнительно: http://www.oszone.net/4188/Kerberos
Описание файлов TDB SAMBA
http://samba.org/samba/docs/man/Samba-HOWTO-Collection/install.html#tdbdocs
Установка драйверов принтера с помощью утилиты rpcclient в 15 шагов
http://samba.org/samba/docs/man/Samba-HOWTO-Collection/CUPS-printing.html#id2644219
Отдельное спасибо http://wiki.linuxformat.ru/ за некоторую информацию
Главнейший документ о SAMBA: http://samba.org/samba/docs/man/Samba3-HOWTO/
Самба на русском: http://www.samba-doc.ru/
POSIX ACL в оригинале: http://www.suse.de/~agruen/acl/linux-acls/online/

Резюме

Хочу подвести маленький итог сегодняшней статье. Сегодня мы удачно (или неудачно :) ) интегрировали наш Linux в доменную структуру Active Directory. При этом, организовали файловое хранилище и сервер печати с автоматической загрузкой драйверов для клиентов Windows. В файловом сервере было организовано несколько типовых примеров каталогов общего доступа. Буду очень рад вашим комментариям и дополнениям.

Upd 2011.08.11: добавил параметр socket oprions

С Уважением, Mc.Sim!


Теги: Active Directory, CUPS, Debian, kerberos, Linux, Microsoft Windows, network, SAMBA

Profile picture for user Олег

Ubuntu

Samba — ПО на Linux для организации общего доступа к файлам в среде Windows. Серверная часть открывает общий доступ к папкам Ubuntu для внешних пользователей. Клиентская часть позволяет получить доступ к сетевым папкам samba.

Есть у меня аппаратный сервер с операционной системой Ubuntu Server 18.04.5 LTS. На сервере имеется большой том, который планируется использовать в качестве файлового хранилища.

Установка Ubuntu Server 18.04.5 LTS на сервер Dell PowerEdge R740xd2

IP и DNS

Серверу назначен прямой IP адрес, hostname внесён в DNS сервер. Причём DNS сервер для Linux машин отдельный от доменного, но оба они умеют резолвить адреса друг друга. Подробно на этом не будем останавливаться.

AD аутентификация

В операционной системе уже настроена доменная аутентификация, можно логиниться на сервер под учётной записью Active Directory, права доступа тоже управляются с помощью доменных групп. Аутентификацию на сервере не я настраивал, поэтому описывать процесс подробно не буду. Скажу только, что доменную аутентификацию можно сделать разными способами. Читайте про krb5-user (пакет для протокола Kerberos, который используется для аутентификации в Windows) и/или winbind (позволяет использовать учетную запись пользователя из Active Directory). Я winbind не использую.

Проверить аутентификацию:

kinit v.pupkin@ILAB.LOCAL
klist

NTP

Время должно быть синхронизировано. Если расхождение по времени больше пяти минут, то мы не получим тикет от Kerberos. В общем, аутентификация не заработает. Не буду описывать процесс настройки ntp.

Ссылки

https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html

Установка samba

apt-get install samba

Самба настраивается в файле /etc/samba/smb.conf. Старый файл можно переименовать в smb.conf.bak, чтобы подсматривать параметры по умолчанию:

samba

Указываем глобальные настройки:

[global]

# домен и настройки SID
workgroup = ILAB
realm = ILAB.LOCAL
security = ads

idmap config * : backend = tdb
idmap config * : range = 1300000-1999999
idmap config ILAB : backend = rid
idmap config ILAB : read only = yes
idmap config ILAB : range = 100000-999999

# представляемся
server string = %h server (Samba, Ubuntu)

# логирование
log file = /var/log/samba/log.%m
max log size = 1000
log level = 1

# письмо при краше
panic action = /usr/share/samba/panic-action %d

# пароли и аутентификация (многое здесь мне непонятно и в AD не используется)
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn passwordsupdatedssuccessfully* .
pam password change = yes

# убираем DNS проксирование
dns proxy = no

# не мешаем контроллерам домена
domain master = no
local master = no
preferred master = no

# отключаем принтеры
load printers = no
printing = bsd
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes

# убираем гостей и папки пользователей
usershare max shares = 0
usershare allow guests = no

Здесь:

  • workgroup — NETBIOS ИМЯ ДОМЕНА (или РАБОЧАЯ ГРУППА, если нет домена), в заглавном регистре
  • realm — ДОМЕН, в заглавном регистре
  • server string — имя сервера, которое будет отображаться в сетевом окружении
  • log file — логи
  • max log size — размер логов
  • log level — уровень логирования
  • panic action — действия при краше самбы, по умолчанию отправляет письмо админу
  • passdb backend — место хранения паролей
  • obey pam restrictions — поддержка PAM аутентификации, непонятно зачем она включена по умолчанию, потому что PAM аутентификация не может использоваться при «encrypt passwords = yes», а encrypt passwords при этом устарел и по умолчанию включен.
  • unix password sync — синхронизация паролей пользователей samba с локальными паролями, в AD не работает
  • passwd program — программа для синхронизации паролей, в AD не работает
  • passwd chat — текст для работы с паролями, в AD не работает
  • pam password change — поддержка смены пароля в PAM
  • security = ads — поддержка AD, самба ведёт себя как член домена.
  • dns proxy — обращаться ли к DNS для определения DNS имени по NETBIOS имени.
  • domain master — главный обозреватель домена
  • local master — главный обозреватель подсети
  • preferred master — предпочтительный обозреватель домена
  • load printers — загружать принтеры
  • printing — интерпретация статуса принтеров
  • show add printer wizard — отображать иконку добавления принтера
  • printcap name — определение списка принтеров
  • disable spoolss — поддержка SPOOLSS (для принтеров)
  • usershare max shares — папки пользователей
  • usershare allow guests — папки гостей
  • idmap config — настройки сопоставления SID с пользователями и группами POSIX

Давайте расшарим какую-нибудь папку, например, /u01/cron/, создаю её.

samba

Назначаю владельца и группу папки (пользователь и группа доменные!)

samba

Добавляем секцию в /etc/samba/smb.conf:

[bck-cron-u01]
path = /u01/cron
valid users = cron v.pupkin p.vupkin
read list   = cron v.pupkin p.vupkin
write list  = cron v.pupkin p.vupkin
read only = no

Здесь:

  • [NAME] — имя шары
  • path — путь к папке
  • valid users — кому можно войти
  • read list — кто имеет права на чтение
  • write list — кто имеет право на запись
  • read only — только чтение

Пример конфига:

После изменения файла smb.conf не помешает проверить его утилитой testparm:

testparm

samba

Перезагружаем службу:

service smbd restart

Добавим сервер в домен:

net ads join -U v.pupkin -D ILAB.LOCAL

В случае успеха увидим что-то типа:

Using short domain name — DOMAIN
Joined 'SERVER' to realm 'domain.local'

У меня надпись немного другая:

samba

Сервер в домен добавился, но не прописался в DNS. В моём случае это нормально, потому как сервер прописан в DNS другой зоны, отличной от доменной. В AD сразу переношу его из папки Computers в нужный мне организационный юнит.

samba

Дадим 10 минут на распространение DNS зон, проверяем:

samba

Шара доступна.

Выполнение присоединения к домену требует:

  • Наличия привилегий суперпользователя (в Astra Linux Special Edition с включенным МКЦ — суперпользователя с высоким уровнем целостности);
  • Наличия пароля администратора домена, к которому будет выполняться присоединение.

Введение

Статья основана на материалах из wiki.samba.org

Для нормальной работы доменного леса Active Directory (AD) достаточно одного контроллера домена (КД). Однако, для обеспечения отказоустойчивости и балансировки нагрузки, желательно всегда добавлять к домену дополнительные КД.
В данной статье описана процедура присоединения дополнительного КД Samba к существующему домену. Эта процедура отличается от процедуры назначения первого КД домена, для создания первого КД (создания нового доменного леса AD) см. Samba как контроллер домена AD.

Домены NT4 используют только один первичный КД (Primary Domain Controller, PDC) и, опционально, дополнительные резервные контроллеры (Backup Domain Controllers, BDC).
В доменном лесу AD не существует разницы между различными КД, за исключением ролей FSMO, поэтому, когда речь идёт о домене AD, во избежание путаницы,  используется единый термин «контроллер домена» или КД.

Подготовка установки

Предполагается, что в сети уже имеется настроенный работающий сервер — контроллер домена Windows AD DC с адресом 10.0.2.10 и полным доменным именем dc1.samdom.example.com

Для использования службы Kerberos требуется синхронизация показаний часов у всех участников домена. Подробности см. Синхронизация времени.

На сервере Astra Linux:

  • Настроить статический IP-адрес хоста (например, 10.0.2.250);
  • В качестве сервера DNS указать IP-адрес существующего сервера доменного DNS (т.е., в соответствии с указанными выше параметрами контроллера домена,  адрес 10.0.2.10). Содержимое файла /etc/resolv.conf должно выглядеть примерно так:

    search samdom.example.com
    nameserver 10.0.2.10

  • Задать полное доменное имя хоста, например dc2.samdom.example.com:

    sudo hostnamectl set-hostname dc2.samdom.example.com

  • В файле /etc/hosts указать IP-адрес хоста, не являющийся адресом локальной петли, например:

    10.0.2.253 dc2.samdom.example.com dc2

  • На КД Windows AD в настройках службы DNS задать соответствие имени хоста Astra Linux и выбранного IP-адреса хоста Astra Linux (см. инструкции по настройке используемого контроллера Windows AD). См. также Samba как контроллер домена AD;
  • Дополнительно рекомендуется установить пакет dnsutils, содержащий инструмент dig для проверки настроек DNS:

    sudo apt install dnsutils

    Этот инструмент позволяет проверять информацию, выдаваемую DNS-серверами, и позволяет выбирать, у какого именно сервера запросить информацию;

Убедиться в правильности настройки DNS можно с помощью команды host, которая должна выдать правильный IP-адрес сервера:

host -t A dc2.samdom.example.com


dc2.samdom.example.com has address 10.0.2.253

Подготовка к присоединению к домену

Установка локального сервера DNS

По умолчанию, первый контроллер домена (DC) в доменном лесу поддерживает собственный сервер DNS для зон AD. Для обеспечения отказоустойчивости рекомендуется иметь в сети несколько DC, работающих также и как серверы DNS.
Если планируется поддерживать дополнительный DNS, то:

Для установки и настройки DNS см. BIND9 как DNS-сервер для Samba AD.

Параметр ‘nameserver’ в файле настройки разрешения имён ‘/etc/resolv.conf’ должен указывать на  сервер Windows AD DC, а не на свой сервер, иначе присоединяемый DC не сможет найти доменную службу Kerberos  KDC

Присоединение к домену AD в роли DC

Поддерживается присоединение к доменам с функциональным уровнем домена не выше чем windows 2008r2 (для samba начиная с версии 4.11 — с уровнем 2012r2). См. Joining a Windows DC to a Samba domain.

Для выполнения присоединения требуются права администратора Astra Linux ( при включенном МКЦ — администратора с высоким уровнем целостности) и права администратора домена Windows AD.

Присоединение к домену может быть совмещено с установкой Samba или может быть выполнено после выполнения установки. Подробнее про установку см. Samba как контроллер домена AD. В примере далее приведен полный сценарий, включающий:

  • установку пакетов;
  • установку samba;
  • присоединение к домену Windows AD.

Перед присоединением к домену необходимо удалить автоматически создаваемые при установке пакетов системные службы и  файлы. См. комментарии к сценарию ниже.

После запуска нового контроллера домена служба синхронизации данных (knowledge consistency checker, KCC) на Samba DC создаёт соглашения о репликации с другими DC в этом доменном лесу AD. Автоматическая генерация соединений репликации может занять  более 15-ти минут.

Пример последовательности действий по установке пакетов и выполнения присоединения к домену samdom.example.com в роли контроллера домена (DC), дополнительно работающего как сервер DNS с использованием сервиса DNS BIND9_DLZ:

  1. Установить пакеты:

    sudo apt install samba winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user krb5-kdc bind9

  2. Остановить неиспользуемые службы:

    sudo systemctl stop winbind smbd nmbd krb5-kdc

  3. Запретить запуск неиспользуемых служб:

    sudo systemctl mask winbind smbd nmbd krb5-kdc

  4. Удалить конфигурационный файл samba, автоматически создаваемый при установке пакетов:

    sudo rm /etc/samba/smb.conf

  5. Выполнить присоединение к домену. Для справки часто используемые параметры команды samba-tool domain join:

    Параметр Описание

    —site=SITE

    Прямое указание хоста AD DC для присоединения.

    —option=»interfaces=lo eth0″ —option=»bind interfaces only=yes»

    Если хост имеет несколько сетевых интерфейсов, используйте эту опции для привязки Samba к нужным интерфейсам.
    Это позволит инструменту samba-tool в процессе присоединения зарегистрировать корректные IP-адреса хоста.

    —option=’idmap_ldb:use rfc2307 = yes’

    Если другие контроллеры были назначены с использованием опции —use-rfc2307, используйте эту опцию для присоединяемого контроллера.

    Подробности по команде samba-tool domain join см. в man samba-tool или с помощью команды:

    samba-tool domain join —help

    Команда для присоединения к домену:

    sudo samba-tool domain join samdom.example.com DC -U»SAMDOMadministrator» —dns-backend=BIND9_DLZ

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

     Нажмите, чтобы развернуть

    Finding a writeable DC for domain ‘samdom.example.com’
    Found DC dc1.samdom.example.com
    Password for [SAMDOMadministrator]:
    workgroup is SAMDOMsudo ap
    realm is samdom.example.com
    Adding CN=DC2,OU=Domain Controllers,DC=samdom,DC=example,DC=com
    Adding CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samdom,DC=example,DC=com
    Adding CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samdom,DC=example,DC=com
    Adding SPNs to CN=DC2,OU=Domain Controllers,DC=samdom,DC=example,DC=com
    Setting account password for DC2$
    Enabling account
    Calling bare provision
    Looking up IPv4 addresses
    Looking up IPv6 addresses
    No IPv6 address will be assigned
    Setting up share.ldb
    Setting up secrets.ldb
    Setting up the registry
    Setting up the privileges database
    Setting up idmap db
    Setting up SAM db
    Setting up sam.ldb partitions and settings
    Setting up sam.ldb rootDSE
    Pre-loading the Samba 4 and AD schema
    A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
    Provision OK for domain DN DC=samdom,DC=example,DC=com
    Starting replication
    Schema-DN[CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com] objects[402/1550] linked_values[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com] objects[804/1550] linked_values[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com] objects[1206/1550] linked_values[0/0]
    Schema-DN[CN=Schema,CN=Configuration,DC=samdom,DC=example,DC=com] objects[1550/1550] linked_values[0/0]
    Analyze and apply schema objects
    Partition[CN=Configuration,DC=samdom,DC=example,DC=com] objects[402/1618] linked_values[0/0]
    Partition[CN=Configuration,DC=samdom,DC=example,DC=com] objects[804/1618] linked_values[0/0]
    Partition[CN=Configuration,DC=samdom,DC=example,DC=com] objects[1206/1618] linked_values[0/0]
    Partition[CN=Configuration,DC=samdom,DC=example,DC=com] objects[1608/1618] linked_values[0/0]
    Partition[CN=Configuration,DC=samdom,DC=example,DC=com] objects[1618/1618] linked_values[42/0]
    Replicating critical objects from the base DN of the domain
    Partition[DC=samdom,DC=example,DC=com] objects[100/100] linked_values[23/0]
    Partition[DC=samdom,DC=example,DC=com] objects[386/286] linked_values[23/0]
    Done with always replicated NC (base, config, schema)
    Replicating DC=DomainDnsZones,DC=samdom,DC=example,DC=com
    Partition[DC=DomainDnsZones,DC=samdom,DC=example,DC=com] objects[44/44] linked_values[0/0]
    Replicating DC=ForestDnsZones,DC=samdom,DC=example,DC=com
    Partition[DC=ForestDnsZones,DC=samdom,DC=example,DC=com] objects[19/19] linked_values[0/0]
    Committing SAM database
    Sending DsReplicaUpdateRefs for all the replicated partitions
    Setting isSynchronized and dsServiceName
    Setting up secrets database
    Joined domain SAMDOM (SID S-1-5-21-469703510-2364959079-1506205053) as a DC

  6. Разрешить автоматический запуск доменных служб:

    systemctl unmask samba-ad-dc
    systemctl enable samba-ad-dc

  7. Включить в настройки службы DNS (см. DNS-сервер BIND9) конфигурационные параметры samba:

    echo ‘include «/var/lib/samba/bind-dns/named.conf»;’ | sudo tee -a /etc/bind/named.conf
    sudo chown -R root:bind /var/lib/samba/bind-dns

  8. Перезапустить службу DNS:

    sudo systemctl restart bind9

  9. Запустить доменную службу samba:

    sudo systemctl start samba-ad-dc

Проверки результатов присоединения

После присоединения к домену в домене должны появиться два контроллера домена, и должны дублироваться основные службы: DNS, LDAP, Kerberos.

Проверка работы службы разрешения имен DNS

Адрес присоединённого контроллера домена должен появиться в списке адресов домена:

host -t A somedom.example.com


samdom.example.com has address 10.0.2.250
samdom.example.com has address 10.0.2.10

При этом должны быть доступны два DNS сервера. Проверим это командой dig (предполагается, что ранее был установлен пакет dnsutils), обращаясь к серверам dc1.samdom.example.com и dc2.samdom.example.com:

dig samdom.example.com @dc1.samdom.example.com +nocookie
dig samdom.example.com @dc2.samdom.example.com

У ответов должен быть статус NOERROR и в ответах должна содержаться секция ANSWER SECTION с адресами серверов:


;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25455

;; ANSWER SECTION:
samdom.example.com 600 IN A 10.0.2.250
samdom.example.com 600 IN A 10.0.2.10

Оба DNS сервера должны выдавать информацию о двух доменных службах каталогов:

dig SRV _ldap._tcp.samdom.example.com @dc1.samdom.example.com +nocookie
dig SRV _ldap._tcp.samdom.example.com @dc2.samdom.example.com

У ответов должен быть статус NOERROR и в ответах должны содержаться секции ANSWER SECTION и ADDITIONAL SECTION с адресами служб:


;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54924

;; ANSWER SECTION:
_ldap._tcp.samdom.example.com. 900 IN SRV 0 100 389 dc2.samdom.example.com.
_ldap._tcp.samdom.example.com. 600 IN SRV 0 100 389 dc1.samdom.example.com.
;; ADDITIONAL SECTION:
dc2.samdom.example.com. 900 IN A 10.0.2.250
dc1.samdom.example.com. 3600 IN A 10.0.2.10

Аналогично, оба DNS сервера должны выдавать информацию о двух доменных службах Kerberos:

dig SRV _kerberos._tcp.samdom.example.com @dc1.samdom.example.com +nocookie
dig SRV _kerberos._tcp.samdom.example.com @dc2.samdom.example.com

У ответов должен быть статус NOERROR и в ответах должны содержаться секции ANSWER SECTION и ADDITIONAL SECTION с адресами служб:


;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54924

;; ANSWER SECTION:
_ldap._tcp.samdom.example.com. 900 IN SRV 0 100 389 dc2.samdom.example.com.
_ldap._tcp.samdom.example.com. 600 IN SRV 0 100 389 dc1.samdom.example.com.
;; ADDITIONAL SECTION:
dc1.samdom.example.com. 3600 IN A 10.0.2.10
dc2.samdom.example.com. 900 IN A 10.0.2.250

Проверка работы службы каталогов LDAP

Для проверки доступности и работоспособности службы LDAP можно запросить отчет о репликации:

sudo samba-tool drs showrepl

Примерный вывод команды:

Default-First-Site-NameDC2
DSA Options: 0x00000001
DSA object GUID: 303f45ca-3a45-4169-ad71-0903ac3e7ab9
DSA invocationId: 4750cc0a-ba23-4492-a1cd-3c66f5b3b073

==== INBOUND NEIGHBORS ====

CN=Configuration,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Fri Dec  6 10:27:20 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Fri Dec  6 10:27:20 2019 MSK

DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Fri Dec  6 10:27:20 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Fri Dec  6 10:27:20 2019 MSK

DC=DomainDnsZones,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Fri Dec  6 10:27:20 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Fri Dec  6 10:27:20 2019 MSK

CN=Schema,CN=Configuration,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Fri Dec  6 10:27:20 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Fri Dec  6 10:27:20 2019 MSK

DC=ForestDnsZones,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Fri Dec  6 10:27:20 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Fri Dec  6 10:27:20 2019 MSK

==== OUTBOUND NEIGHBORS ====

CN=Configuration,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Fri Dec  6 08:27:31 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Fri Dec  6 08:27:31 2019 MSK

DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Thu Dec  5 17:24:10 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Dec  5 17:24:10 2019 MSK

DC=DomainDnsZones,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Thu Dec  5 17:24:10 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Dec  5 17:24:10 2019 MSK

CN=Schema,CN=Configuration,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Thu Dec  5 17:24:10 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Dec  5 17:24:10 2019 MSK

DC=ForestDnsZones,DC=samdom,DC=example,dc=com
        Default-First-Site-NameDC1 via RPC
                DSA object GUID: ce07ab44-222f-4882-b4f5-ed382f6b2047
                Last attempt @ Thu Dec  5 17:24:10 2019 MSK was successful
                0 consecutive failure(s).
                Last success @ Thu Dec  5 17:24:10 2019 MSK

==== KCC CONNECTION OBJECTS ====

Connection --
        Connection name: 49744c99-ca35-4811-af8f-73119e8b31f5
        Enabled        : TRUE
        Server DNS name : DC1.windomain.le
        Server DN name  : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samdom,DC=example,dc=com
                TransportType: RPC
                options: 0x00000001
Warning: No NC replicated for Connection!

При проверке может выдаваться следующее предупреждение:

Warning: No NC replicated for Connection!

Согласно документации Samba, это предупреждение можно игнорировать.

Подробности см. Проверка статусов репликации каталогов.

Кроме этого, для проверки корректности работы репликации каталогов, добавьте нового пользователя на ранее установленном контроллере домена, и убедитесь, что этот пользователь автоматически появился на новом контроллере.

Также, можно использовать инструмент сравнения ldapcmp, чтобы сравнить два каталога. Подробности см. samba-tool ldapcmp.

Проверка работы службы аутентификации Kerberos

Проверка работы Kerberos может быть выполнена получением билета Kerberos, например билета доменного администратора Windows AD (по умолчанию это administrator):

kinit administrator

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

klist

Проверка файлового сервера

Подробности см. Samba как контроллер домена AD

Отображение встроенных пользователей и групп

Репликация ресурса Sysvol в настоящее время в Samba не поддерживается. Для использования существующих обходных решений все DC домена должны использовать одинаковое отбражение идентификаторов встроенных пользователей и  групп.

По умолчанию, Samba DC хранит идентификаторы пользователей и групп в атрибуте ‘xidNumber’ в ‘idmap.ldb’.
При этом, реализация ‘idmap.ldb’ не гарантирует, что все DC будут использовать одинаковый идентификатор для любого пользователя или группы.
Для того, чтобы обеспечить одинаковость идентификаторов, требуется:

  • Создать актуальную резервную копию файла /var/lib/samba/private/idmap.ldb на ранее установленном DC командой:

tdbbackup -s .bak /var/lib/samba/private/idmap.ldb

Эта команда создаст файл с копией /var/lib/samba/private/idmap.ldb.bak.

  • Переместить резервную копию в каталог /var/lib/samba/private/ на новом присоединяемом DC, и переименовать, удалив суффикс .bak, чтобы заменить существующий файл.
  • Обновить список контроля доступа (ACL) каталога Sysvol на новом DC:

samba-tool ntacl sysvolreset

Настройка службы Winbindd на Samba AD DC

Необязательно. Подробности см. Настройка Winbindd на Samba AD DC.

Использование контроллера домена в качестве файлового сервера

Подробности см. Samba как контроллер домена AD

Репликация Sysvol

Samba в настоящее время не поддерживает репликацию Sysvol. Неподдерживаемые обходные решения см. Репликация Sysvol.

Если на других DC в каталоге Sysvol есть что-то, кроме GPO по умолчанию,  обязательно нужно синхронизировать Sysvol на новом DC, иначе samba-tool ntacl sysvolreset будет завершаться с ошибкой.

Поиск и устранение проблем

В случае возникновения ошибок см. документацию и журналы:

  • Системный журнал;
  • Журналы Samba;
  • Журналы BIND, если используется BIND9_DLZ

Подробности см.  Поиск и устранение проблем

Содержание

  • 1 Общая информация
  • 2 Проверка требований
  • 3 Установка Samba
  • 4 Настройка Samba
  • 5 Проверка работы и отладка
  • 6 Дополнительная настройка
  • 7 Доступ к Samba из Windows 7 и 2008 r2
  • 8 Работа над ошибками
    • 8.1 Winbind не запускается
    • 8.2 Ошибка получения билета Kerberos
  • 9 Полезные комманды
  • 10 См. также
  • 11 Cсылки

Общая информация

Если вам нужно просто предоставить сетевой доступ к ресурсам Linux компьютера, то смотрите статью Samba.

В этой статье мы опишем как подключить Linux компьютер к домену под управлением Microsoft Active Directory и сделать из него файловый сервер.

После выполнения этой инструкции мы будем иметь в сети файловый сервер под управлением ОС Линукс, входящий в домен Windows 2003 и ничем не отличающийся от файлового сервера под Windows. Пользователи домена смогут обращаться к его ресурсам под своими учётными записями. Доступ регулируется группами домена AD.

По этой инструкции настраивались Debian (4, 5), Ubuntu 9.10, создавалась она на основе официальной документации и многих рекомендаций и инструкций из Интернета. Остальные Linux’ы настраиваются сходным образом.

Для Alt Linux написана хорошая инструкция http://freesource.info/wiki/AltLinux/Dokumentacija/SambaInWin2kDomain?v=omo&

Проверка требований

  • Проверяем что Samba собрана с поддержкой Kerberos:
# smbd -b | grep KRB

   HAVE_KRB5_H
   HAVE_ADDRTYPE_IN_KRB5_ADDRESS
   HAVE_DECODE_KRB5_AP_REQ
   HAVE_KRB5
   HAVE_KRB5_AUTH_CON_SETUSERUSERKEY
   HAVE_KRB5_C_ENCTYPE_COMPARE
   HAVE_KRB5_C_VERIFY_CHECKSUM
   HAVE_KRB5_ENCRYPT_BLOCK
   HAVE_KRB5_ENCRYPT_DATA
   HAVE_KRB5_FREE_AP_REQ
   HAVE_KRB5_FREE_DATA_CONTENTS
   HAVE_KRB5_FREE_KEYTAB_ENTRY_CONTENTS
   HAVE_KRB5_FREE_KTYPES
   HAVE_KRB5_FREE_UNPARSED_NAME
   HAVE_KRB5_GET_PERMITTED_ENCTYPES
   HAVE_KRB5_GET_RENEWED_CREDS
   HAVE_KRB5_KEYBLOCK_IN_CREDS
   HAVE_KRB5_KEYTAB_ENTRY_KEY
   HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM
   HAVE_KRB5_KT_FREE_ENTRY
   HAVE_KRB5_LOCATE_KDC
   HAVE_KRB5_MK_REQ_EXTENDED
   HAVE_KRB5_PRINCIPAL2SALT
   HAVE_KRB5_PRINC_COMPONENT
   HAVE_KRB5_SET_DEFAULT_TGS_KTYPES
   HAVE_KRB5_SET_REAL_TIME
   HAVE_KRB5_STRING_TO_KEY
   HAVE_KRB5_TKT_ENC_PART2
   HAVE_KRB5_USE_ENCTYPE
   HAVE_LIBGSSAPI_KRB5
   HAVE_LIBKRB5
   HAVE_MAGIC_IN_KRB5_ADDRESS
   HAVE_TICKET_POINTER_IN_KRB5_AP_REQ
   KRB5_VERIFY_CHECKSUM_ARGS
  • Также проверим что поддерживается LDAP
# smbd -b | grep LDAP

   HAVE_LDAP_H
   HAVE_LDAP
   HAVE_LDAP_ADD_RESULT_ENTRY
   HAVE_LDAP_DN2AD_CANONICAL
   HAVE_LDAP_INIT
   HAVE_LDAP_INITIALIZE
   HAVE_LDAP_SET_REBIND_PROC
   HAVE_LIBLDAP
   LDAP_SET_REBIND_PROC_ARGS
  • Для корректной работы Samba в домене Windows 2003 нужны версии MIT Kerberos version >=1.3.1. Проверим:
# dpkg -l | grep krb

ii  krb5-config    1.22                       Configuration files for Kerberos Version 5
ii  libkrb53       1.6.dfsg.4~beta1-5lenny1   MIT Kerberos runtime libraries
  • Для корректной работы с Windows 2008 серверами сама Samba должна быть достаточно свежая:
# smbd -V

Version 3.2.5

Установка Samba

  • Устанавливаем сервер и клиент samba.
# apt-get install samba samba-client krb5-config

При настройке krb5-config лучше указывать IP адреса контроллеров домена, а не их DNS имена.

Настройка Samba

  • Для подключения к домену Active Directory удобно использовать утилиту Likewise-Open.
  • Для администрирования Samba удобно использовать SWAT или webmin, которые предоставляют веб интерфейс. Попасть на него можно по адресу http://server_address:901 и https://server_address:10000 соответственно, указав для соединения пользователя root. Но будьте осторожны — он полностью переписывает smb.conf и некоторые параметры может просто игнорировать. Лучше предварительно сделать резервную копию файла. Я сначала использовал SWAT, а затем дорабатывал конфигурационный файл /etc/samba/smb.conf руками. Вот, что осталось у меня не закоментированным (принтеры к этому серверу не подключены):
[global]
        unix charset = LOCALE
        realm = WORKGROUP.DOMAIN.LOCAL
        server string = Storage samba server
        interfaces = eth0
        bind interfaces only = Yes
        security = ADS
        obey pam restrictions = Yes
        passdb backend = tdbsam
        passwd program = /usr/bin/passwd %u
        passwd chat = *EntersnewsUNIXspassword:* %nn *RetypesnewsUNIXspassword:* %nn *passwordsupdatedssuccessfully* .
        log level = 3
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 100
        name resolve order = lmhosts host wins bcast
        printcap name = CUPS
        local master = No
        domain master = No
        dns proxy = No        
        ldap ssl = no
        panic action = /usr/share/samba/panic-action %d
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        template shell = /bin/bash
        invalid users = root

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/printers

[distrib]
        path = /data/distrib
        valid users = @WORKGROUPDistribGroup
        write list = @WORKGROUPDistribGroup
        read only = No
        create mask = 0777
        directory mask = 0777

[backup]
        path = /data/backup
        valid users = @WORKGROUPBackupGroup
        write list = @WORKGROUPBackupGroup
        read only = No
        create mask = 0777
        directory mask = 0777

Мы описали два общих каталога:

  • backup — доступ имеют только пользователи входящие в группу BackupGroup в Active Directory. Они могут создавать и удалять файлы/каталоги
  • distrib — доступ имеют все пользователи входящие в группу DistribGroup в Active Directory

В приведённой конфигурации подразумевается, что eth0 — это сетевой интерфейс в локальную сеть, где домен имеет полное имя WORKGROUP.DOMAIN.LOCAL

  • редактируем /etc/nsswitch:
passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind

hosts:          files dns wins
networks:       files dns

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

netgroup:       files
  • Проверим, что в /etc/hosts есть корректная запись для нашего сервера, также можно добавить записи для контроллеров доменов:
10.0.0.15      storage.domain.local storage
10.0.0.85      dcwg1.domain.local dcwg1
10.0.0.245     dcwg2.domain.local dcwg2
  • Удаляем если есть (или переносим в резервные копии) файл /etc/samba/secrets.tdb и все файлы из /var/lib/samba/*.tdb
  • Проверяем конфигурацию (не обязательно):
  1. testparm -s

В Ubunto testparm находится в пакете samba-common-bin

  • Проверим как Samba-3 winbind общается с контроллером домена Active Directory посредством протокола Kerberos:
# net ads info

LDAP server: 10.0.0.85
LDAP server name: dcwg1.workgroup.domain.local
Realm: WORKGROUP.DOMAIN.LOCAL
Bind Path: dc=WORKGROUP,dc=DOMAIN,dc=LOCAL
LDAP port: 389
Server time: Срд, 03 Мар 2010 13:12:14 NOVT
KDC server: 10.0.0.85
Server time offset: -5

На рассхождение времени в секундах указывает строка «Server time offset: -5». Обратите внимание, что протокол Kerberos зависим от времени, и расхождение с часами контроллера домена допускается лишь незначительное, поэтому желательно настроить NTP клиент (см. статьи по настройке NTP). В Ubuntu это указывается в файле /etc/default/ntpdate:

NTPSERVERS="10.0.0.85 10.0.0.245"
  • В Debian (и его сыновьях, таких как Ubuntu и внуках вроде Linux Mint) при установке пакета krb5-cofig сразу предлагается его настройка. Лучше всего попробовать работать с этими настройками, но если ничего предложено не было или мы хотим что-то изменить, то редактируем /etc/krb5.conf (я для более стабильной работы использовал ip адреса вместо имён серверов):
[libdefaults]
        default_realm = WORKGROUP.DOMAIN.LOCAL

# The following krb5.conf variables are only for MIT Kerberos.
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
#
#...
#
# The following libdefaults parameters are only for Heimdal Kerberos.
        v4_instance_resolve = false
        v4_name_convert = {
                host = {
                        rcmd = host
                        ftp = ftp
                }
                plain = {
                        something = something-else
                }
        }
        fcc-mit-ticketflags = true

[realms]
        WORKGROUP.DOMAIN.LOCAL = {
                kdc = 10.0.0.85
                kdc = 10.0.0.245
                admin_server = 10.0.0.85
        }
#
#...
#
[login]
        krb4_convert = true
        krb4_get_tickets = false
  • Проверим работает ли Kerberos, постараемся получить билет и просмотреть его:
# kinit administrator@WORKGROUP.DOMAIN.LOCAL
Password for administrator@WORKGROUP.DOMAIN.LOCAL:

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@WORKGROUP.DOMAIN.LOCAL

Valid starting     Expires            Service principal
03/06/10 14:51:41  03/07/10 00:51:47  krbtgt/WORKGROUP.DOMAIN.LOCAL@WORKGROUP.DOMAIN.LOCAL
        renew until 03/07/10 14:51:41
  • Удалим полученный билет:
# kdestroy
  • Присоединяемся к домену:
# net ads join -UAdministrator

Administrator's password:
Using short domain name -- WORKGROUP
Joined 'STORAGE' to realm 'WORKGROUP.DOMAIN.LOCAL'

Всё, компьютер включен в домен, что можно проверить на контроллере. Даже если после приведённых строк получили следующие:

[2010/03/06 15:04:00,  0] libads/kerberos.c:332(ads_kinit_password)
  kerberos_kinit_password STORAGE$@WORKGROUP.DOMAIN.LOCAL failed: Client not found in Kerberos database DNS update failed!

Проверка работы и отладка

  • Для удобства отладки сделаем ссылку на каталог журналов:
# ln -s /var/log/samba /etc/samba/log
  • Запускаем samba и winbind:
# /etc/init.d/samba start
# /etc/init.d/winbind start
  • Для проверки правильно ли подключение к домену можно посмотреть список пользователей и групп домена (не обязательно):
# wbinfo -u
# wbinfo -g

Если нас не понимают, то подсказываем пароль для wbinfo и смотрим: список доменов в сети, информацию о домене WORKGROUP, список пользователей и групп домена:

# wbinfo --set-auth-user=root%root_password
# wbinfo --all-domains
# wbinfo -D WORKGROUP
# wbinfo -t
  • Проверяем, как работает NSS. Команда getent показывает инфо о пользователе, который может быть как в домене, так и юниксовый:
# getent passwd | grep pm
pm:x:15000:15000::/home/WORKGROUP/pm:/bin/false

# getent passwd | grep pavel
pavel:x:500:500:Pavel Malahov:/home/pavel:/bin/bash
  • Теперь можно использовать ресурсы на линукс-сервере, на которые мы дали доступ, как обычные доменные ресурсы.

Дополнительная настройка

  • Можно также сопоставить (но это не обязательно) локальные учётные данные и из домена Windows. Для сопоставления пользователей редактируем файл /etc/samba/smbusers.conf:
root = admin administrator
  • для сопоставления (мапирования от англ. Map) групп домена и групп UNIX выполняем:
# net groupmap modify ntgroup="Domain Admins" unixgroup=root
# net groupmap modify ntgroup="Domain Users" unixgroup=users
# net groupmap modify ntgroup="Domain Guests" unixgroup=nobody
  • После того как всё отлажено, можно понизить уровень записи в журнал до «1». В /etc/samba/smb.conf:
log level = 1

Доступ к Samba из Windows 7 и 2008 r2

Начиная с этих версий параметры авторизации у MS поменялись. Скорее всего Samba вскоре это учтёт, а пока подружить системы можно изменив на Win7 свойства сетевой безопасности:

Пуск — Панель управления — Администрирование — Локальная политика безопасности — Локальные политики — Параметры безопасности

  • Сетевая безопасность: минимальная сеансовая безопасность для клиентов на базе NTLM SSP — убрать галочку с «Требовать 128-битное шифрование». Таких параметра два — выполнить для обоих
  • Сетевая безопасность: уровень проверки подлинности LAN Manager — выбрать в списке пункт «Отправлять LM- и NTML-ответы»

Работа над ошибками

Winbind не запускается

При запуске Samba обнаруживаем, что winbind не запустился:

# /etc/init.d/winbind status
 * winbind is not running

В журнале log.winbindd обнаруживаем запись:

[2010/03/06 13:54:34,  2] winbindd/winbindd_util.c:235(add_trusted_domain)
  Added domain BUILTIN  S-1-5-32
[2010/03/06 13:54:34,  2] winbindd/winbindd_util.c:235(add_trusted_domain)
  Added domain STORAGE  S-1-5-21-3963871611-1338977097-196861091
[2010/03/06 13:54:34,  0] winbindd/winbindd_util.c:782(init_domain_list)
  Could not fetch our SID - did we join?
[2010/03/06 13:54:34,  0] winbindd/winbindd.c:1385(main)
  unable to initialize domain list

Видим, что добавлен «встроенный домен» (BUILTIN) и домен «название компьютера» (STORAGE), подключиться к домену AD не удалось.

Решение: Переподключить компьютер в домен. Удалять придётся с самого контроллера, т.к. комадна net ads leave скорее всего не поможет.

Ошибка получения билета Kerberos

При попытке получить билет Kerberos получили:

kinit: KDC reply did not match expectations while getting initial credentials

Решение: указать имя домена в другом регистре. Скорее всего нужны все заглавные

Полезная ссылка: http://subscribe.ru/archive/comp.soft.win.linuxsa/200510/19115643.html

Полезные комманды

$ smbclient -N -L 10.0.0.117 показывает ресурсы компьютера с адресом 10.0.0.117
$ smbclient //10.0.0.117/common Вход в расшаренную директорию. Пользователь unix от которого выполняется команда должен быть зарегистрирован в домене.
# net ads join -U pavel -d 3 Добавить в домен пользователя pavel
# winbindd -d 3 -i Режим отладки (-d), winbindd запускается не как демон (-i)
# wbinfo -a mydomain\myuser%mypasswd авторизируемся в домене (через winbindd, wbinfo входит в этот пакет)
# ldapsearch запросы к LDAP серверу, в нашем случае к MS Active Directory
# tdbdump /etc/samba/secrets.tdb просмотреть содержимое файла *.tdb

См. также

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

Cсылки

  • http://linux.yaroslavl.ru//docs/serv/samba/samba-win2000.html — Samba и доменная аутентификация Windows2000
  • http://us6.samba.org/samba/docs/man/Samba-Guide/unixclients.html#adssdm- Active Directory Domain with Samba Domain Member Server — подробная инструкция как подключить Linux сервер с помощью Samba 3 к домену под управлением AD Windows 2003.
  • http://us6.samba.org/samba/docs/man/Samba-Guide/kerberos.html#id397375 — пример настройки доступа для пользователей Active Directory
  • Samba-HOWTO-Collection.pdf, стр.54-57 (поставляется с исходниками) или
  • http://jcifs.samba.org/ntstatus.txt — описание статусов

Понравилась статья? Поделить с друзьями:
  • Подготовка нового hdd для установки windows
  • Подключаем windows mobile device к windows 10
  • Подготовка настройки windows не выключайте компьютер
  • Подкачка оперативной памяти windows 7 с жесткого диска
  • Подготовка компьютера не выключайте компьютер windows 10 долго висит