Linux samba windows active directory

Время на прочтение9 мин

Количество просмотров96K

В нашей предыдущей работе было рассмотрено, что такое Active Directory и Samba и в чем состоят преимущества их совместной работы. Также был рассмотрен процесс сборки Samba из исходников и включение ее в домен, и все это — из командной строки. Следует признать, что сборка чего-либо из исходников не является распространенной практикой в современных дистрибутивах Линукс. Гораздо чаще для установки программного обеспечения используются репозитории. Это позволяет сделать процесс установки более дружелюбным и простым для пользователя. Также могут автоматически вовлекаться дополнительные пакеты, необходимые для работы устанавливаемого ПО, что опять же серьезно облегчает жизнь и избавляет от необходимости изучать списки необходимых предустановленных пакетов. В настоящее время наблюдается тенденция к повсеместному использованию графических интерфейсов. Можно долго обсуждать доводы «за» и «против», но факт остается фактом: все большее количество пользователей и даже системных администраторов предпочитает для значительного числа задач использовать GUI. В рамках этой статьи мы постараемся рассмотреть процесс установки и включения в домен Samba при помощи командной строки и репозиториев, а также включение Samba в домен при помощи графического интерфейса утилиты SADMS.
По статистике, Openstat Ubuntu является 4-й в списке самых популярных ОС для веб-серверов, и её популярность быстро растёт. В нашем случае это дистрибутив Ubuntu Server 12.04 LTS. Найти дистрибутив можно на официальном сайте Ubuntu.

1.Включение Samba-сервера на базе Ubuntu в домен AD при помощи командной строки

Для начала рассмотрим включение сервера на базе Ubuntu в домен AD средствами командной строки. Процесс подробно описан в документации на сайте Ubuntu.

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

Нам понадобятся Kerberos, Samba и Winbind. Прежде чем их устанавливать, рекомендуется обновить систему:

sudo apt-get update
sudo apt-get upgrade

После успешной установки обновлений ставим Kerberos, Samba и Winbind:

sudo apt-get install install krb5-user samba winbind

В этой команде,
krb5-user— пакет для протокола Kerberos, который используется для аутентификации в Windows;
samba— позволяет стать членом домена;
winbind— позволяет использовать учетную запись пользователя из ActiveDirectory.
При использовании графического интерфейса можно использовать менеджер пакетов Synaptic. Стоит заметить, что по умолчанию в Ubuntu Server 12.04 LTS графического интерфейса нет, его при необходимости можно установить отдельно:

sudo apt-get install ubuntu-desktop

После этого необходимо сконфигурировать все компоненты для работы с доменом. Тестовый домен называется LAB.LOCAL, контроллер домена — lab-dc1.lab.local, c IP 192.168.7.2, имя сервера — testubuntu.

3.Настройка DNS

В первую очередь необходимо настроить DNS на хосте под управлением Ubuntu (сервером DNS будет контролер домена), а также прописать правильный домен поиска. Для этого необходимо отредактировать файл /etc/resolv.conf, чтобы он содержал следующую информацию:

domain lab.local
search lab.local
nameserver 192.168.7.2

Для их применения изменений необходимо перезапустить сетевую службу:

/etc/init.d/networking restart

Также следует убедиться, что имя сервера в файле /etc/hostname задано верно:

testubuntu

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

# Имена этого компьютера
127.0.0.1	localhost
127.0.1.1	testubuntu.lab.local	testubuntu
4.Настройка синхронизации времени.

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

ntpdate ntp.mobatime.ru

Автоматическая же синхронизация настраивается с помощью ntpd, этот демон будет периодически выполнять синхронизацию. Для начала его необходимо установить:

sudo ap<i>t-get</i> install ntp

Теперь необходимо внести правки в файл /etc/ntp.conf, добавив в него информацию о сервере времени:

# You do need to talk to an NTP server or two (or three).
server lab-dc1.lab.local

После чего нужно перезапустить демон ntpd:

sudo /etc/init.d/ntp restart
5.Настройка Kerberos.

Следующий этап — настройка авторизации через протокол Kerberos. Нужно будет отредактировать файл /etc/krb5.conf. Ниже приведен результат правок:

[libdefaults]
	default_realm = LAB.LOCAL
	kdc_timesync = 1
	ccache_type = 4
	forwardable = true
	proxiable = true
	v4_instance_resolve = false
	v4_name_convert = {
		host = {
			rcmd = host
			ftp = ftp
		}
		plain = {
			something = something-else		}
	}
	fcc-mit-ticketflags = true
[realms]
	LAB.LOCAL = {
		kdc = lab-dc1
		admin_server = lab-dc1
		default_domain = LAB.LOCAL
	}
[domain_realm]
	.lab.local = LAB.LOCAL
	lab.local = LAB.LOCAL
[login]
	krb4_convert = false
	krb4_get_tickets = false

На данном этапе можно проверить, что мы можем авторизоваться в домене. Для этого используем следующую команду:

kinit user@LAB.LOCAL

Вместо user, естественно, стоит вписать имя существующего пользователя домена. Имя домена необходимо писать заглавными буквами!
Если выполнение команды не привело к возникновению ошибок — значит, всё верно, и домен отдаёт вам тикет Kerberos. Убедиться в том, что тикет получен, можно, выполнив команду:

klist

Удалить все тикеты можно командой

kdestroy

Итак, будем считать, что авторизация прошла успешно; пора настроить непосредственно вход в домен.
Еще один файл, который нас интересует — /etc/samba/smb.conf. В нем нам нужна секция [global]. Ниже — пример части файла конфигурации Samba с комментариями по поводу значения важных параметров:

[global] 
# Эти две опции нужно писать именно в заглавном регистре, причём <code>workgroup</code> без
   # последней секции после точки, а <code>realm</code> - полное имя домена 
   workgroup = LAB
   realm = LAB.LOCAL
 # Эти две опции отвечают как раз за авторизацию через AD
   security = ADS
   encrypt passwords = true
   # Просто важные 
   dns proxy = no 
   socket options = TCP_NODELAY
 # Если вы не хотите, чтобы самба пыталась при случае вылезти в лидеры в домене или рабочей группе,
   # или даже стать доменконтроллером, то всегда прописывайте эти пять опций именно в таком виде
   domain master = no
   local master = no
   preferred master = no
   os level = 0
   domain logons = no
# Отключить поддержку принтеров
   load printers = no
   show add printer wizard = no
   printcap name = /dev/null
   disable spoolss = yes

Отредактировав smb.conf, выполните команду

testparm

Она проверит конфигурацию на ошибки и выдаст суммарную сводку о нём:

# 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

Как видно, были заданы правильные параметры для того, чтобы компьютер стал членом домена. Теперь пора попытаться непосредственно войти в домен. Для этого используется следующая команда:

net ads join -U admin -D LAB 

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

# net ads join -U <i>admin</i> -D LAB
Enter admin's password:
Using short domain name — LAB 
Joined 'testubuntu' to realm 'lab.local'
6.Параметры, используемые командой net

  1. U username%password — обязательный параметр, вместо admin необходимо подставить имя пользователя с правами администратора домена и указать пароль.
  2. D DOMAIN: DOMAIN — собственно сам домен; его можно и не указывать, но лучше всё же это делать всегда — так спокойнее.
  3. S win_domain_controller: win_domain_controller можно не указывать, но бывают случаи, когда автоматически сервер не находит контроллер домена.
  4. createcomputer=«OU/OU/…»: в AD часто используется OU (Organizational Unit), есть в корне домена OU = Office, в нем OU = Cabinet; чтобы сразу добавить в нужный, можно указать так:
    	sudo net ads join -U username createcomputer=«Office/Cabinet».
    	

Если больше никаких сообщений нет, значит, всё прошло успешно.
Попробуйте использовать ping по имени с другого члена домена, чтобы убедиться, что в домене всё отработало как следует.
Можно также использовать команду

net ads testjoin

Если проблем не возникло, то вывод команды будет следующим:

#net ads testjoin
Join is OK

Но иногда после сообщения о присоединении к домену выдаётся такая ошибка:

DNS update failed!

Прежде чем выяснять, почему же не обновляется DNS, перезагрузите компьютер после введения в домен! Вполне возможно, что это решит проблему.
Если это не помогло, рекомендуется ещё раз проверить настройки DNS: с большой долей вероятности причина будет в них. После этого нужно удалить компьютер из домена и попытаться повторить процесс заново.
Если всё прошло без ошибок, то компьютер успешно включен в домен. Можно зайти на домен-контроллер и убедиться в этом.
Если вам необходимо как-либо работать с пользователями домена, например, настраивать SMB-шары с разграничением доступа, то кроме самой Samba вам понадобится ещё и Winbind — специальный демон, служащий для связи локальной системы управления пользователями и группами Linux с сервером Active Directory.
Проще говоря, Winbind нужен, если вы хотите видеть пользователей домена на своём компьютере с Ubuntu.
Winbind позволяет спроецировать всех пользователей и все группы AD в вашу Linux-систему, присвоив им ID из заданного диапазона. Таким образом, вы сможете назначать пользователей домена владельцами папок и файлов на вашем компьютере и выполнять любые другие операции, завязанные на пользователей и группы.
Для настройки Winbind используется всё тот же файл /etc/samba/smb.conf. Добавьте в секцию [global] следующие строки:

# Опции сопоставления доменных пользователей и виртуальных пользователей в системе через Winbind.
   # Диапазоны идентификаторов для виртуальных пользователей и групп.
   idmap uid = 10000 - 40000
   idmap gid = 10000 - 40000
   # Эти опции не стоит выключать.
   winbind enum groups = yes
   winbind enum users = yes
   # Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп
   # будут использоваться с доменом, т.е. вместо user - DOMAIN\user.
   # Возможно именно это вам и нужно, однако обычно проще этот параметр включить. 
   winbind use default domain = yes
   # Если вы хотите разрещить использовать командную строку для пользователей домена, то
   # добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false
   template shell = /bin/bash
   # Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку
   winbind refresh tickets = yes

Теперь перезапустите демон Winbind и Samba в следующем порядке:

sudo /etc/init.d/winbind stop
sudo smbd restart
sudo /etc/init.d/winbind start 

После перезапуска проверьте, что Winbind установил доверительные отношения с AD командой

# wbinfo -t

а также, что Winbind увидел пользователей и группы из AD, командами

wbinfo -u
wbinfo -g

Эти две команды должны выдать список пользователей и групп из домена соответственно.
Итак, Winbind работает, однако в систему он ещё не интегрирован.
Чтобы ваша Ubuntu прозрачно работала с пользователями домена (в частности, чтобы вы могли назначать пользователей домена владельцами папок и файлов), необходимо указать Ubuntu использовать Winbind как дополнительный источник информации о пользователях и группах.
Для этого измените две строчки в файле /etc/nsswitch.conf:

passwd:         compat
group:          compat

добавив к ним в конец winbind:

passwd:         compat winbind
group:          compat winbind

Теперь проверьте, что Ubuntu запрашивает у Winbind информацию о пользователях и группах, выполнив

getent passwd
getent group

Первая команда должна вам вернуть всё содержимое вашего файла /etc/passwd, то есть ваших локальных пользователей плюс пользователей домена с ID из заданного вами в smb.conf диапазона. Вторая должна сделать тоже самое для групп.

Включение Samba-сервера на базе Ubuntu в домен AD при помощи графического интерфейса и SADMS.

Возможно, скажем в домашних условиях или в спешке, вам захочется произвести все эти манипуляции в графическом режиме. Для этих целей существует пакет SADMS, о котором есть информация на сайте Ubuntu. А на сайте можно узнать все об этом пакете и скачать его. Посмотрим на интерфайс пакета:

Рис. 1. Общий вид главной вкладки.

Здесь отображаются статусы winbind, smb и nmb, и присутствует индикация подключения компьютера к домену.

Рис. 2. Запуск smb и nmb.

Рис. 3. Вкладка «Данные».

Здесь мы должны указать данные, которые будут использоваться для подключения к домену. По умолчанию поля заполнены разработчиками, для примера. Разработчики пакета — французы, так что пусть вас не смущают примеры вроде «administrateur» вместо привычного «Administrator».

Рис. 4. Автоматический захват части параметров.

Щелкаем по «Определить» — и часть параметров подхватывается автоматически. Остальные придется заполнять вручную. Все эти параметры использовались при настройке из командной строки.

Рис. 5. Заполнение остальных полей.

Заполняем поля. Здесь обратите особое внимание: Netbios имя домена должно быть прописано БОЛЬШИМИ буквами, иначе получим ошибку Kerberos, как вышло в данном случае. Если все заполнено правильно, щелкаем по «Установить» — и SADMS включает машину в домен.

Рис. 6. Машина включена в домен успешно.

Рис. 7. Меню «Проверки».

Из меню «Проверки» мы можем выполнить тесты на выполнение различных операций. Также можно провести все тесты из командной строки, как это описывалось ранее.

Рис. 8. Пример вывода теста на членство в домене.

Рис. 9. Результаты теста сети.

Рис. 10. Проверка наличия машины на контролере домена.

Сервер находится в списке доменных машин вместе с другими нашими серверами.
Итак, мы рассмотрели установку Samba и включение ее в домен — с использованием как командной строки, так и графического интерфейса. Использование графического интерфейса позволяет серьезно ускорить и упростить настройку, но вместе с тем не позволяет понять всю механику процесса, а также может серьезно затруднить процесс поиска ошибки. С другой стороны, CLI (Command Line Interface), хоть и предоставляет абсолютный контроль над всем, гораздо менее дружелюбен к пользователю и подразумевает у него наличие некоторых навыков работы. Какой способ использовать — решать вам.

В англоязычной документации для обозначения процесса настройки Samba на выполнение роли AD DC используется термин «provisioning», в данном тексте в качестве перевода будет использоваться термин «Назначение».

Выполнение Назначения требует наличия привилегий суперпользователя (в Astra Linux Special Edition — суперпользователя с высоким уровнем целостности) для создания конфигурационных файлов и установки прав доступа. После выполнения Назначения служба smbd перестанет работать,  а службы winbind,nmbd, krb5-kdc перейдут под управление доменной службы samba-ad-dc. Однако, после установки всех необходимых пакетов все эти службы будут автоматически запущены, и перед выполнением Назначения их нужно будет остановить и заблокировать их автоматический запуск. Приведённые далее сценарии Назначения содержат соответствующие команды.

Введение

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

Samba, начиная с версии 4.0, может работать как контроллер домена (domain controller, DC) Active Directory (AD).

При применении Samba в качестве DC AD в условиях реальной эксплуатации
рекомендуется использовать два или более DC для обеспечения отказоустойчивости.

Эта статья рассказывает, как настроить Samba как первый DC в домене, чтобы построить новый лес AD. Также статью можно использовать для миграции из домена Samba NT4 в домен Samba AD.

Samba при использовании в роли AD DC поддерживает:

  • Интегрированный сервер LDAP как база данных AD. Подробности см. Поддерживают ли Samba AD DC работу с OpenLDAP или другими службами LDAP;
  • Авторизацию через службу Kerberos Key Distribution Center (KDC). Поддерживаются варианты MIT KDC и Heimdal KDC;
    Поставляемая в составе Astra Linux Samba использует MIT KDC, также поставляемый в составе этих ОС;
  • Работу с встроенным сервером DNS;
  • Работу с внешним сервером DNS (в примерах ниже рассматривается работа с сервером DNS BIND9).

Установка и настройка контроллера и клиента домена

Подготовка к инсталляции

  • Выберите имя хоста для вашего AD DC. Не рекомендуется использовать в качестве имен хостов такие идентификаторы, как PDC или BDC, унаследованные от NT4 . Эти сущности отсутствуют в AD, и такие названия вызывают путаницу;
  • Выберите DNS-имя для доменного леса AD. Это имя также будет использовано как имя области (realm) Kerberos AD ;

    Для создания домена AD используйте DNS-имя, которое не понадобится изменять. Samba не поддерживает переименование зон DNS AD и областей Kerberos.

    Назначьте хосту полное доменное имя (FQDN), например dc2.samdom.example.com:

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

  • Используйте для контроллера домена статический адрес.  Дополнительную информацию см. Часто задаваемые вопросы по именованию доменов AD;
  • Отключите инструменты (например, resolvconf), которые автоматически обновляют файл настроек DNS /etc/resolv.conf.
    AD DC и члены домена обязаны использовать сервер DNS, способный разрешать зоны DNS AD . Если в сети нет других серверов DNS, то файл /etc/resolv.conf должен указывать адрес самого сервера:

    search samdom.example.com
    nameserver 10.0.2.254

  • Убедитесь, что файл /etc/hosts на DC корректно разрешает полное доменное имя (fully-qualified domain name, FQDN) и короткое имя хоста DC во внешний сетевой IP-адрес DC. Например: 

    127.0.0.1 localhost.localdomain localhost
    10.0.2.254 DC.samdom.example.com DC

    Имя хоста не должно разрешаться в IP-адрес 127.0.0.1 или в любой другой IP-адрес, кроме используемого на внешнем сетевом интерфейсе DC. Для проверки правильности настроек можно использовать команду:

    host `hostname`

Если Samba уже была установлена (настроена):

  • Проверьте, что все процессы Samba остановлены:

ps ax | egrep «samba|smbd|nmbd|winbindd|rkb5-kdc»

    • Если вывод команды показывает наличие любого из процессов samba, smbd, nmbd, или winbindd, то остановите эти процессы и запретите их автоматический запуск:

sudo systemctl stop smbd nmbd winbind krb5-kdc
sudo systemctl mask smbd nmbd winbind krb5-kdc

Обратите внимание:

  • Пакет (apt install winbind) называется winbind с одним ‘d’;
  • Процесс (ps fax | grep winbindd) называется winbindd с двумя ‘dd’;
  • Сервис (sytemsctl status winbind) называется winbind с одним ‘d’;

  • Удалите все существующие файлы конфигурации Samba smb.conf file. Чтобы получить список путей к этим файлам:

sudo smbd -b | grep «CONFIGFILE»


CONFIGFILE: /usr/local/samba/etc/samba/smb.conf

    • Удалите все файлы баз данных Samba (*.tdb и *.ldb). Чтобы получить список путей к этим файлам:

sudo smbd -b | egrep «LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR»


LOCKDIR: /usr/local/samba/var/lock/
STATEDIR: /usr/local/samba/var/locks/
CACHEDIR: /usr/local/samba/var/cache/
PRIVATE_DIR: /usr/local/samba/private/

Только полная очистка настроек поможет предотвратить ошибки, и гарантирует, что никакие файлы из предыдущей настройки Samba не попадут в новые настройки DC.

  • Если существует файл настроек Kerberos /etc/krb5.conf file, также удалите его: 

sudo rm /etc/krb5.conf

Установка Samba

Пакет samba входит в дистрибутивы Astra Linux, и может быть установлен с помощью Графический менеджер пакетов synaptic,
или из командной строки командой

sudo apt install samba

После установки пакета samba сервис smbd будет запущен автоматически с настройками «по умолчанию».

Отдельно установленный пакет samba может быть использован как файловый сервер или сервер печати. Для использования samba в качестве домена AD нужно установить пакет samba и дополнительные пакеты:

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

Обратите внимание — указанная команда устанавливает также и пакет bind9 — сервер DNS.

Назначение Samba на роль AD DC

Подготовительные команды

Перед Назначением останавливаем далее ненужные службы, запрещаем их запуск, и удаляем установленную по умолчанию конфигурацию Samba:

sudo systemctl stop winbind smbd nmbd krb5-kdc
sudo systemctl mask winbind smbd nmbd krb5-kdc
sudo rm /etc/samba/smb.conf

Назначение

Назначение выполняется с помощью команды samba-tool domain provision. Эта команда поддерживает возможность выполнения настроек в интерактивном или автоматическом режимах. Подробности см.:

samba-tool domain provision —help

При создании нового домена AD рекомендуется сразу включить так называемые расширения NIS (NIS extensions), передав инструменту samba-tool domain provision параметр  —use-rfc2307.
Это позволит хранить в AD специфические атрибуты Unix:

  • Числовые идентификаторы пользователей (UID);
  • Пути у домашним каталогам;
  • Идентификаторы групп.

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

Подробности см. в:

  • Настройка RFC2307 в AD
  • idmap config = ad

Описание возможных параметров Назначения

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

Интерактивный режим Автоматический режим Комментарий
—use-rfc2307 —use-rfc2307 Включает расширения NIS
Realm —realm

Область Kerberos. Также, используется как домен DNS AD . Например: samdom.example.com.

Domain —domain Имя домена для NetBIOS.
Рекомендуется использовать первую часть имени домена DNS AD.
Например, для домена samdom.example.com это будет имя samdom.
Server Role —server-role Устанавливает роль контроллера DC.
DNS backend —dns-backend

Выбирает службу DNS.

Первый DC в домене AD обязательно должен быть настроен на использование какой-либо службы DNS.

Варианты служб NONE и BIND9_FLATFILE более не поддерживается.

DNS forwarder IP address недоступно Эта настройка доступна только при выборе службы DNS SAMBA_INTERNAL DNS. Подробности см. Настройка перенаправления DNS.

Administrator password

—adminpass

Устанавливает пароль администратора домена.

Если заданный пароль не будет соответствовать требованиям по сложности пароля, Назначение не будет выполнено.

Подробности см. Microsoft TechNet: Сложность паролей должна соответствовать требованиям.

Другие параметры, часто используемые в команде samba-tool domain provision:

—option=»interfaces=lo eth0″ —option=»bind interfaces only=yes»:  Если сервер имеет несколько сетевых интерфейсов, используйте эти параметры для привязки Samba к нужным интерфейсам. Это позволить команде samba-tool зарегистрировать корректный сетевой адрес  при настройке.

  • Не используйте NONE как службу DNS,  эта возможность больше не поддерживается;
  • При использовании в качестве службы DNS службы BiIND, не используйте вариант BIND9_FLATFILE,  эта возможность больше не поддерживается;
  • После назначения первого DC в домене AD не настраивайте больше таким способом никакие другие DC в этом домене, используйте процедуру присоединение (Join) для настройки остальных DC.

Назначение Samba в интерактивном режиме

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

sudo samba-tool domain provision —use-rfc2307 —interactive

# Настройка автоматического запуска доменной службы Samba
sudo systemctl unmask samba-ad-dc
sudo systemctl enable samba-ad-dc

# Перед запуском доменной службы samba настраиваем службу DNS
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
sudo systemctl restart bind9

# Запуск доменной службы Samba
sudo systemctl start samba-ad-dc

В процессе Назначения должен произойти примерно такой диалог:

# Запрашивается имя области Kerberos
Realm [SAMDOM.EXAMPLE.COM]: SAMDOM.EXAMPLE.COM

# Запрашивается имя домена
Domain [SAMDOM]: SAMDOM

# Запрашивается роль сервера
Server Role (dc, member, standalone) [dc]: dc

# Выбирается служба DNS
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ

# Выбирается IP-адрес для перенаправления запросов DNS
DNS forwarder IP address (write ‘none’ to disable forwarding) [10.0.2.254]: 77.88.8.8

# Ввод и подтверждение пароля администратора
Administrator password: Passw0rd
Retype password: Passw0rd

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
Adding DomainDN: DC=samdom,DC=example,DC=com
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=samdom,DC=example,DC=com
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: DC
NetBIOS Domain: SAMDOM
DNS Domain: samdom.example.com
DOMAIN SID: S-1-5-21-2614513918-2685075268-614796884

Интерактивный режим настройки поддерживает различные параметры  команды samba-tool domain provision, что позволяет задавать настройки, не содержащиеся в интерактивном диалоге.

Назначение Samba в автоматическом режиме

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

  • Роль сервера: dc
  • Расширения NIS: включены
  • Служба DNS: внутренний DNS BIND9_DLZ
  • Область Kerberos и зона DNS AD: samdom.example.com
  • Имя домена для NetBIOS: SAMDOM
  • Пароль администратора: Passw0rd
  • Используется сеть 10.0.2.0/24
  • Адрес хоста Samba 10.0.2.254

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

sudo samba-tool domain provision —server-role=dc —use-rfc2307 —dns-backend=BIND9_DLZ —realm=SAMDOM.EXAMPLE.COM —domain=SAMDOM —adminpass=Passw0rd

Завершающие команды

После успешного выполнения команды Назначения:

# Разрешить автоматический запуск службы контроллера домена:
sudo systemctl unmask samba-ad-dc
sudo systemctl enable samba-ad-dc

# Перед запуском доменной службы samba настраиваем службу DNS
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
sudo systemctl restart bind9

# Скопировать автоматически созданную конфигурацию службы Kerberos
sudo cp -b /var/lib/samba/private/krb5.conf /etc/krb5.conf

# Запустить доменную службу Samba
sudo systemctl start samba-ad-dc

Проверка результатов Назначения

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

Создание реверсивных зон

С помощью команды samba-tool dns zonecreate можно добавить необязательную зону реверсивного поиска:

samba-tool dns zonecreate samdom.example.com 2.0.10.in-addr.arpa -U Administrator


Password for [administrator@SAMDOM.EXAMPLE.COM]:
Zone 2.0.10.in-addr.arpa created successfully

Если требуется использовать несколько реверсивных зон, просто выполните команду несколько раз с указанием параметров соответствующих подсетей.
Изменение реверсивных зон не требует перезапуска сервисов Samba или BIND.

Настройка участников домена

Настройка синхронизации времени

DNS

Участники домена AD используют DNS для поиска сервисов, например, таких, как LDAP и Kerberos. Для этого они должны использовать сервер DNS, способный разрешать зоны DNS AD.

Если в системе используется сервер DHCP, то в его настройках можно указать имя домена, которое будет передаваться всем хостам при запросе адреса Подробнее см. DHCP: служба isc-dhcp-server и DHCP: служба kea.

Помимо использования DHCP, настройку на нужный сервер можно выполнить непосредственно на хостах — участниках домена в файле  /etc/resolv.conf. 
Для этого укажите в файле:

  • имя домена DNS AD  как имя домена для поиска (search),
  • IP-адрес вашего DC как значение параметра nameserver.

Например:

search samdom.example.com
nameserver 10.0.2.254

Разрешение имён для клиентских машин

После выполнения указанных выше настроек DNS сервер не может получать и, соответственно, выдавать информацию об именах и IP-адресах клиентских машин.

Если в домене используются клиентские машины, получающие динамические IP-адреса от сервера DHCP, сервер DNS может быть настроен на автоматическое получение информации о выданных адресах. Примерный порядок настройки см. в статье Динамическое обновление DNS клиентских машин FreeIPA;

Если в домене используются клиентские машины, которым присваиваются статические адреса, то:

  1. Можно использовать для присвоения этих статических адресов сервер DHCP с динамическим обновлением адресов;
  2. Можно вручную задавать соответствие имени и адреса для каждого такого клиента. См. Администрирование DNS.

Kerberos

При работе в домене AD, Kerberos используется для аутентификации пользователей, хостов, и сервисов.

Процедуры установки и настройки клиентов Kerberos см. Kerberos

Во время процедуры назначения Samba автоматически создает конфигурационный файл /var/lib/samba/private/krb5.conf для клиентов Kerberos, настроенный на создаваемый DC.

Это файл должен быть скопирован в рабочую конфигурацию Kerberos на всех хостах, входящих в домен.

В автоматически создаваемом файле конфигурации Kerberos для поиска доменного контроллера Kerberos (KDC) используются  сервисные записи (SRV). Для того, чтобы такая конфигурация работала корректно, в домене должна быть правильно настроена и работать служба, в том числе созданы файлы зон, в которых размещены соответствующие сервисные записи  (см. статью DNS-сервер BIND9).

Тестирование файлового сервера

Во время назначения автоматически создаются разделяемые ресурсы netlogon и sysvol, и они обязательно должны существовать в DC. Чтобы увидеть все  разделяемые файловые ресурсы, предоставляемые DC:

smbclient -L localhost -U%

Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]

Sharename Type Comment
——— —- ——-
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba x.y.z)
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]

Server Comment
——— ——-

Workgroup Master
——— ——-

Для проверки работы аутентификации, подключитесь к ресурсу netlogon с использованием учётной записи администратора домена:

smbclient //localhost/netlogon -UAdministrator -c ‘ls’


Enter Administrator’s password:
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]
. D 0 Tue Nov 1 08:40:00 2016
.. D 0 Tue Nov 1 08:40:00 2016

49386 blocks of size 524288. 42093 blocks available

Если тесты не выполняются, см. Поиск и устранение проблем

Инструменты командной строки

Для управления Samba AD DC в состав пакета Samba входит инструмент командной строки samba-tool.

Основные команды инструмента:

Команда Описание

dbcheck

Проверка локальной базы данных AD на наличие ошибок
delegation Управление делегированием
dns Управление параметрами доменной службы DNS
domain Управление параметрами домена
drs Управление службой репликации каталогов (Directory Replication Services, DRS)
dsacl Управление списками контроля доступа DS
fsmo Управление ролями (Flexible Single Master Operations, FSMO)
gpo Управление групповыми политиками
group Управление группами
ldapcmp Сравнение двух баз данных ldap
ntacl Управление списками контроля доступа ACL
processes Вывод списвка процессов (для упрощения отладки без использования setproctitle).
rodc Управление контроллером домена (Read-Only Domain Controller, RODC)
sites Управление сайтами
spn Управление службой принципалов (Service Principal Name, SPN)
testparm Проверка конфигурационного файла на корректность синтаксиса
time Получение показаний текущего времени сервера
user Управление пользователями
visualize Графическое представление состояния сети Samba

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

man samba-tool

Краткую справку по работе инструмента можно получить командой

samba-tool -h 

Инструмент wbinfo

При установке пакета samba автоматически устанавливается служба winbindd.

Для работы с этой службой используется инструмент командной строки wbinfo,
позволяющий получать информацию о пользователях и группах AD.

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

Команда Описание
wbinfo -u Вывести список пользователей
wbinfo -g Вывести список групп
wbinfo -i имя_пользователя Вывести подробную информацию о пользователе
wbinfo -?
wbinfo —help
Вывести справку по командам

Настройка хостов — участников домена для входа доменных пользователей

По умолчанию, пользователи домена AD не могут выполнять вход в Linux-системы.
Для обеспечения входа в Linux-системы с учетными записями  Active Directory необходимо внести следующие изменения в настройки Samba AD DC в настройки пользовательских компьютеров.

Настройка Samba AD DC

В конфигурационном файле Samba  /etc/samba/smb.conf необходимо добавить настройки службы winbind и разрешение авторизоваться через эту службу (добавленные строки выделены жирным шрифтом):

[global]
    netbios name = DHCP
    realm = SAMDOM.EXAMPLE.COM
    server role = active directory domain controller
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
    workgroup = SAMDOM
    idmap_ldb:use rfc2307 = yes

    template shell = /bin/bash
    winbind use default domain = true
    winbind offline logon = false
    winbind nss info = rfc2307

    winbind enum users = yes
    winbind enum groups = yes

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

testparm

И перезапустить службы samba.

Настройка пользовательских компьютеров

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

pam-auth-update

И убедиться, что включены все профили PAM.
При необходимости — включить аутентификацию winbind, используя клавишу «пробел». 
По окончании нажать клавишу «Tab», перейти на «ОК», и записать изменения.

В файле  /etc/nsswitch.conf добавить слово winbind параметры password и group:

# /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

hosts: files dns
networks: files

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

netgroup: nis

Чтобы пользователи AD после аутентификации могли менять свой пароль из командной строки в файле /etc/pam.d/common-password из строки:

password [success=1 default=ignore]   pam_winbind.so use_authtok try_first_passfile


убрать слово  use_authtok statement:

password      [success=1 default=ignore]      pam_winbind.so

use_authtok

try_first_pass

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

Несмотря на то, что Samba в режиме AD DC может предоставлять услуги разделения файлов так же, как и в любом другом режиме применения, разработчики Samba не рекомендуют использовать DC как файловый север по следующим причинам:

  • Для всех организаций, за исключением самых маленьких, наличие более, чем одного DC, является реально хорошим способом резервирования, повышающим безопасность обновлений;
  • Отсутствие сложных данных и влияния на другие cервисы позволяет обновлять DC совместно с ОС хоста каждые год или два;
  • Обновления могут выполняться путем установки новых версий, или внесения изменений, которые лучше проверены в Samba, что позволяет получить новые возможности, избежав множества рисков, связанных с повреждением данных;
  • Необходимость модернизации DC и файлового сервера наступает в разные моменты. Потребность в новых возможностях DC и файлового сервера возникает в разные моменты времени. В то время, как AD DC стремительно развивается, приобретая новые возможности, файловый сервер, после более 20 лет, гораздо более консервативен;
  • mandatory smb signing is enforced on the DC.

Если вы изучаете возможность использовать Samba DC как файловый сервер, рассмотрите вместо этого возможность использовать на DC виртуальную машину VM, содержащую отдельного участника домена.

Если вы вынуждены использовать Samba DC как файловый сервер, помните, что виртуальная файловая система (virtual file system, VFS) позволяет настраивать разделяемые ресурсы только со списками управления доступом access (control lists, ACL) Windows.
Разделяемые ресурсы с ACL POSIX на Samba DC не поддерживаются, и не работают.

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

Подробности см.:

  • Настройка Samba как участника домена
  • Файловый сервис Samba

Если у вас маленький домен (маленький офис, домашняя сеть), нет желания следовать рекомендациям разработчиков Samba, и  DC используется как файловый сервер, настройте Winbindd до начала настройки разделяемых ресурсов.
Подробности см.: Configuring Winbindd on a Samba AD DC.

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

Подробности см.: Поиск и устранение проблем в Samba AD DC

Материалы для дальнейшего изучения

См.  Пользовательская документация

In the previous tutorial we learned how to add CentOS 8 Linux client to Windows Domain Controller (AD) using Winbind. Now in this article we will learn about samba integration with active directory wherein we will create shares on Windows Domain Controller and access them using samba on the Linux client and vice versa.

Some more articles on similar topic:

  • How to join Linux client to Windows AD Domain using realmd with SSSD (CentOS/RHEL 7/8)
  • How to join Linux client to Windows AD Domain using adcli with SSSD (CentOS/RHEL 7/8)
  • How to join Linux client to Windows AD Domain using winbind (CentOS/RHEL 7/8)

1. Lab Environment

I have already configured AD on Windows Server 2012 VM which has an IP Address of 192.168.0.107 while my CentOS 8 client which I have added to this Windows AD has an IP Address of 192.168.0.117.

First of all let us create a share on our Windows Domain Controller which we will later access through our Linux client. I will be using Windows Server 2012 R2 where I have configured my AD with the File Server and File Server Resource Manager (FSRM) sub-roles installed on my server. This gives access to some of the advanced configuration options when creating a new file share.

2.1 Install File Server Resource Manager

Log on to Windows Server with a domain administrator account:

Open Server Manager using the icon available in the desktop taskbar. On the Server Manager, click on «Add roles and features«

Integrate Samba with Active Directory (Linux & Windows)

Select «Role-based or feature-based installation» and click on Next

Integrate Samba with Active Directory (Linux & Windows)

Select your server from the available pool and click on Next

Integrate Samba with Active Directory (Linux & Windows)

When you get to the Select server roles screen, scroll down to the File And Storage Services area expand File and iSCSI services and check File Server Resource Manager.

Integrate Samba with Active Directory (Linux & Windows)

When you do this, you’ll be prompted to add additional features. Click Add Features and click Next to move on.

Integrate Samba with Active Directory (Linux & Windows)

On the Features screen, you can make sure that File Server Resource Manager Tools as highlighted below is selected for installation under Remote Server Administration Tools. Click on Next to proceed to the next step.

Integrate Samba with Active Directory (Linux & Windows)

Verify the list of roles and features to be installed and click on Install to proceed.

Integrate Samba with Active Directory (Linux & Windows)

You will see a similar message on the screen once the installation of FSRM role is complete. Click on Close to end the setup.

Integrate Samba with Active Directory (Linux & Windows)

2.2 Create a File Share on Windows AD

Next to create a share select File and Storage Services from the Server Manager’s left pane.

Integrate Samba with Active Directory (Linux & Windows)

Under Shares from the left pane click on TASKS and select New Share to create a new share.

Integrate Samba with Active Directory (Linux & Windows)

We will select SMB Share — Advanced to get additional configuration option. Click on Next to continue

Integrate Samba with Active Directory (Linux & Windows)

Select the volume under which you want to create your share. We will select C drive and click on Next to continue

Integrate Samba with Active Directory (Linux & Windows)

Provide the name of the share. By default this new folder will be created under C:\Shares as shown the highlighted section. If this folder doesn’t exist then it will be created automatically. We will name our share as data_share and click on Next to continue.

Integrate Samba with Active Directory (Linux & Windows)

On the Configure share settings screen, check or deselect any of the additional options for the share as required, such as Enable access-based enumeration and Encrypt data access. Click Next to continue

Integrate Samba with Active Directory (Linux & Windows)

To change the default NTFS folder or share permissions, click Customize permissions on the Specify permissions to control access screen, set the permissions as required in the dialog box and click OK when you’re done. Now click Next to continue.

Integrate Samba with Active Directory (Linux & Windows)

On the Management Properties screen, you can optionally select a folder usage value for the share if you plan to use classification rules. Click Next to continue.

Integrate Samba with Active Directory (Linux & Windows)

Finally, on the Apply a quota to a folder or volume screen, you can chose to apply a quota template to the share. Click Next when you’re done.

Integrate Samba with Active Directory (Linux & Windows)

Verify the configuration for the new share and click on Create to create the share with the defined configuration.

Integrate Samba with Active Directory (Linux & Windows)

Click Close when the share has been successfully created.

Integrate Samba with Active Directory (Linux & Windows)

Under Shares now you should be able to see the newly created share.

Integrate Samba with Active Directory (Linux & Windows)

2.3 Access Windows Share on Linux client using Samba

Now we will access this share which we created on the Windows Domain Controller using Linux client. We have already joined our CentOS 8 Linux client to Windows AD using winbind.

To make sure that Linux client is able to connect to Windows AD, you can use following command:

[root@centos8 ~]# wbinfo -t
checking the trust secret for domain GOLINUXCLOUD via RPC calls succeeded

So, the RPC call has succeeded. Next list the available Samba shares using smbclient tool which is provided as part of samba-client rpm:

[root@centos8 ~]# smbclient -U Administrator -L 192.168.0.107
Enter GOLINUXCLOUD\Administrator's password:

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        data_share      Disk
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share
        SYSVOL          Disk      Logon server share
SMB1 disabled -- no workgroup available

Here 192.168.0.107 is the IP of my Windows Domain Controller. As you can see data_share is available and shared via our AD.

To access this share we can use again use smbclient with the following syntax:

smbclient //<REALM>/<SHARENAME> -U Administrator

So to access data_share on GOLINUXCLOUD.COM we will use:

[root@centos8 ~]# smbclient //www.golinuxcloud.com/data_share -U Administrator
Enter GOLINUXCLOUD\Administrator's password:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Mar  4 13:08:07 2021
  ..                                  D        0  Thu Mar  4 13:08:07 2021

                7774207 blocks of size 4096. 4135298 blocks available

smb: \> mkdir file  <--- Create a new directory
smb: \> ls  <--- Verify the new directory
  .                                   D        0  Thu Mar  4 13:41:07 2021
  ..                                  D        0  Thu Mar  4 13:41:07 2021
  file                                D        0  Thu Mar  4 13:41:07 2021

                7774207 blocks of size 4096. 4135298 blocks available

Now verify the directory on the Windows AD under C:\Shares\data_share

Integrate Samba with Active Directory (Linux & Windows)

Now let us try to share a folder from our Linux client to Windows AD Domain Controller (or any other Windows Server which is part of the GOLINUXCLOUD REALM).

3.1 Configure Samba Winbind

Add the following content in your /etc/samba/smb.conf. Here we are configuring Samba for /linux_share PATH with some pre-defined conditions. As you can see, an active directory group is defined with an @, and a user without. Also, when there are spaces in the groupname, you escape that with quotes: "@EXAMPLE\Domain Users".

[linux_share]
        comment = My Samba Share
        path = /linux_share
        read only = no
        public = yes
        guest ok = no
        writable = yes
        valid users = "@GOLINUXCLOUD\Users", "GOLINUXCLOUD.COM\Administrator"
        write list = "GOLINUXCLOUD\Administrator"

A group name can be added as a value by using two characters before the name:

 @ (at symbol)  NIS groups searched
 + (plus sign)  will not search NIS

Examples:

valid users = @groupname
invalid users = +groupname

So in our smb.conf, GOLINUXCLOUD\Users group and GOLINUXCLOUD.COM\Administrator are considered as valid wherein GOLINUXCLOUD\Administrator will have read/write access.

3.2 Create Samba Share and Assign Permission

Next let us create the share which we have used in /etc/samba/smb.conf i.e /linux_share and assign required permission so it is accessible in the network.

[root@centos8 ~]# mkdir /linux_share

Change group owner to GOLINUXCLOUD\Administrator. We are using double backslash because a backslash is considered an escape character.

[root@centos8 ~]# chgrp -R "GOLINUXCLOUD.COM\\Administrator" /linux_share

We will give full permission to user and group owner while only read and execute privilege for others.

[root@centos8 ~]# chmod 0775 /linux_share/

Verify the permission

[root@centos8 ~]# ls -ld /linux_share/
drwxrwxr-x. 2 root GOLINUXCLOUD\administrator 4096 Mar  4 01:20 /linux_share/

Enable firewall for samba service:

[root@centos8 ~]# firewall-cmd --add-service=samba --permanent

Reload firewalld service to activate the changes

[root@centos8 ~]# systemctl reload firewalld

Verify the changes:

[root@centos8 ~]# firewall-cmd --list-service
cockpit dhcpv6-client samba ssh

We have kept our SELinux in Permissive mode:

[root@centos8 ~]# getenforce
Permissive

Finally start/restart the smb service to activate the changes:

[root@centos8 ~]# systemctl restart smb

3.3 Access Linux Samba share on Windows AD

Since I only have a single Wndows VM with me so I will use my Active Directory which is installed with Windows Server 2012 for verification. Open the run prompt and provide the IP Address of the Linux client to access it’s available shares:

Integrate Samba with Active Directory (Linux & Windows)

So as you can see our linux_share is accessible using the Linux Client IP Address from the Windows AD.

Integrate Samba with Active Directory (Linux & Windows)

We also have write permission as we were able to create a new folder inside linux_share

Integrate Samba with Active Directory (Linux & Windows)

The same can be verified on the Linux client

[root@centos8 ~]# ls -l /linux_share/
total 8
drwxr-xr-x. 2 GOLINUXCLOUD\administrator GOLINUXCLOUD\domain users 4096 Mar  4 01:38 'New folder'

Summary

In this tutorial we learned how to create samba share and share it across Windows and Linux client which are part of the Windows Active Directory Doman Controller. These steps are verified when the Linux client is integrated using Winbind service as the steps would vary if you are using a different service such as SSSD or REALM etc.

Assigning permissions to these shares can be tricky when you are working with big organization with multiple groups and users. In such case you can check /etc/samba/smb.conf.example for some sample configurations or the man page of smb.conf for a clear understanding.

Lastly I hope the steps from the article on samba integration with Active Directory was helpful. So, let me know your suggestions and feedback using the comment section.

Further Reading

You may also read these articles to get more understanding on Samba shares and permissions:
man page of smb.conf
How do I set permissions to Samba shares?

В этой статье я покажу как ввести файловый сервер Samba в домен Active Directory. Всё будет проделано на Debian 12.

Введение

Для ввода сервера Samba в домен Active Directory мы будем использовать дистрибутив Debian 12.

А вот и начальные данные:

  • samba-test-ad / 192.168.0.8 — имя и ip-адрес samba сервера;
  • srv-dc.test-domain.com / 192.168.0.18 — имя и ip-адрес контроллера домена;
  • test-domain.com — имя домена.

Настройка сети

Для того чтобы настроить сеть, отредактируем файлы /etc/network/interfaces и /etc/resolv.conf.

$ sudo nano /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug ens18
iface ens18 inet static
        address 192.168.0.8/24
        gateway 192.168.0.1

$ sudo nano /etc/resolv.conf
domain test-domain.com
search test-domain.com
nameserver 192.168.0.18

В файле /etc/network/interfaces мы настроили ip-адрес для сетевого интерфейса ens18.

А в /etc/resolv.conf указали ip-адрес dns-сервера (он же и контроллер домена). А также, здесь мы указали имя домена и имя поискового домена. Поисковый домен указывает возможный суффикс для DNS адресов, то есть pc1 станет pc1.test-domain.com.

Проверка настройки DNS

Во-первых, проверим резолв домена и контроллера домена:

$ nslookup test-domain.com
Server:         192.168.0.18
Address:        192.168.0.18#53

Name:   test-domain.com
Address: 192.168.0.18

$ nslookup srv-dc.test-domain.com
Server:         192.168.0.18
Address:        192.168.0.18#53

Name:   srv-dc.test-domain.com
Address: 192.168.0.18

Во-вторых, пропингуем сам домен:

$ ping test-domain.com -c 1
PING test-domain.com (192.168.0.18) 56(84) bytes of data.
64 bytes from srv-dc.test-domain.com (192.168.0.18): icmp_seq=1 ttl=64 time=0.425 ms
--- test-domain.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.365/0.365/0.365/0.000 ms

Проверим, что по ip-адресу контроллера домена мы определяем его имя, то есть настроена обратная запись:

$ nslookup 192.168.0.18
18.0.168.192.in-addr.arpa       name = srv-dc.test-domain.com.

Проверим SRV-запись. DNS использует такие записи для определения ip-адресов серверов, предоставляющих услуги определенных служб. Формат такой записи следующий: _Service._Protocol.DnsDomainName где:

  • Service — название службы, которая доступна на данном сервере (например: Idap, kerberos, gc, kpasswd).
  • Protocol — протокол для подключения к указанной службе (tcp, udp).
  • DnsDomainName — имя домена.

В нашем случае, будем проверять следующую DNS запись: _ldap._tcp.test-domain.com. Для того чтобы это сделать используем интерактивную оболочку nslookup:

$ nslookup
> set type=SRV
> _ldap._tcp.test-domain.com.
Server:         192.168.0.18
Address:        192.168.0.18#53

_ldap._tcp.test-domain.com       service = 0 100 389 srv-dc.test-domain.com.
> exit

Как видим, наш домен обслуживает ldap сервер по ip-адресу — 192.168.0.18, то есть контроллер домена.

Установка пакетов

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

$ sudo apt install -y krb5-user winbind libpam-krb5 libpam-winbind libnss-winbind acl attr

В процессе установки можем задать область Kerberos, она задается как имя домена, но большими буквами, в моем случае это будет: TEST-DOMAIN.COM:

Настройка kerberos

Настроим kerberos. Для этого отредактируем файл /etc/krb5.conf, но предварительно сделаем резервную копию:

$ sudo mv /etc/krb5.conf /etc/krb5.conf.back

$ sudo nano /etc/krb5.conf
[libdefaults]
 default_realm = TEST-DOMAIN.COM
 kdc_timesync = 1
 ccache_type = 4
 forwardable = true
 proxiable = true
[realms]
 TEST.DOMAIN.COM = {
 kdc = srv-dc.test-domain.com
 admin_server = srv-dc.test-domain.com
 default_domain = test-domain.com
 }
[domain_realm]
 .test-domain.com = TEST-DOMAIN.COM
 test-domain.com = TEST-DOMAIN.COM
[login]
 krb4_convert = false
 krb4_get_tickets = false

Разберем конфиг:

  • Секция libdefaults:
    • default_realm — область Kerberos по умолчанию.
    • kdc_timesync — 1 или 0. Если 1, то клиентские машины будут вычислять разницу между своим временем и временем, возвращаемым KDC в метках времени в билетах, и использовать это значение для исправления неточных системных часов при запросе. Но это не используется для изменения системных часов.
    • ccache_type — формат кэша учетных данных. 4 это самый последний формат.
    • forwardable и proxiable  — будут пересылаться начальные билеты и они будут проксибельные (так по умолчанию).
  • В секции realms мы указываем настройки для нашего realm, а именно:
    • kdc — сервер на котором работает служба kdc.
    • admin_server — сервер администрирования.
    • default_domain — домен по умолчанию.
  • В секции domain_realm мы указываем сопоставления доменов и realm.
  • Секция login:
    • krb4_convert — не следует использовать демон преобразования Kerberos для получения билетов.
    • krb4_get_tickets — не нужно использовать пароль пользователя для получения билетов.

Проверяем настройку kerberos:

$ kinit administrator@TEST-DOMAIN.COM
Password for administrator@TEST-DOMAIN.COM:

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@TEST-DOMAIN.COM

Valid starting       Expires              Service principal
08.07.2024 16:34:05  09.07.2024 02:34:05  krbtgt/TEST-DOMAIN.COM@TEST-DOMAIN.COM
        renew until 09.07.2024 16:34:01

После ввода пароля получим билет в AD для пользователя.

Настройка синхронизации времени

В системах базирующихся на SystemD клиентом синхронизации времени, по умолчанию, выступает служба systemd-timesyncd. Эта служба использует конфиг /etc/systemd/timesyncd.conf, именно в нём прописаны NTP сервера с которыми сервер синхронизирует своё время.

$ sudo nano /etc/systemd/timesyncd.conf
NTP=192.168.0.18

$ sudo systemctl restart systemd-timesyncd.service

$ systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-07-08 16:42:22 MSK; 28s ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 1442 (systemd-timesyn)
     Status: "Contacted time server 192.168.0.18:123 (192.168.0.18)."
      Tasks: 2 (limit: 2306)
     Memory: 1.3M
        CPU: 65ms
     CGroup: /system.slice/systemd-timesyncd.service
             └─1442 /lib/systemd/systemd-timesyncd

Установим samba:

$ sudo apt install -y samba

Настроим samba редактируя файл /etc/samba/smb.conf, предварительно сделав резервную копию:

$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.back

$ sudo nano /etc/samba/smb.conf
[global]
       security = ADS
       workgroup = test-domain
       realm = TEST-DOMAIN.COM

       idmap config * : backend = tdb
       idmap config * : range = 3000-7999

       idmap config TEST-DOMAIN : backend = rid
       idmap config TEST-DOMAIN : range = 10000-999999

       template shell = /bin/bash
       template homedir = /home/%D/%U

       winbind enum groups = yes
       winbind enum users = yes
       winbind nested groups = yes
       winbind use default domain = yes
       winbind refresh tickets = yes

       unix charset = utf-8
       dos charset = cp866
       nt acl support = yes
       acl group control = yes
       map acl inherit = yes
       unix password sync = yes

       preferred master = No
       local master = No
       domain master = No

[data]
        comment = Файлы пользователей домена
        path = /share
        hide special files = Yes
        hide unreadable = Yes
        store dos attributes = Yes
        ea support = Yes
        create mask = 0664
        directory mask = 0775
        force create mode = 0664
        force directory mode = 0775
        hosts allow = 192.168.0.0/24
        inherit acls = Yes
        inherit permissions = Yes
        read only = No
        vfs objects = acl_xattr
        vfs objects = recycle
        recycle:maxsize = 0
        recycle:subdir_mode = 0700
        recycle:directory_mode = 0777
        recycle:touch = yes
        recycle:versions = yes
        recycle:keeptree = yes
        recycle:repository = .recycle/%U

Сразу уточню, что параметры в секции [global] отвечают за присоединение к домену, а секция [data] это настройка общего каталога data.

Разбор параметров в секции [global]

  • security = ADS — укажем, что Samba работает в режиме участника домена.
  • workgroup = test-domain — укажем рабочую группа (первая часть домена).
  • realm = TEST-DOMAIN.COM — укажем realm.
  • idmap config * : backend = tdb — для сопоставление локальных id пользователей и доменных, для домена по умолчанию (*) выберем режим tdb (который позволяет и писать и читать id в свою базу данных).
  • idmap config * : range = 3000-7999 — диапазон id пользователей для домена по умолчанию.
  • idmap config TEST-DOMAIN : backend = rid — выберем для нашего домена режим RID, который работает в режиме «только чтение». Этот режим извлекает информацию об учетных записях и группах из контроллера домена.
  • idmap config TEST-DOMAIN : range = 10000-999999 — диапазон id пользователей для нашего домена.
  • template shell = /bin/bash — оболочка по умолчанию для доменных пользователей.
  • template homedir = /home/%D/%U — домашний каталог для доменных пользователей.
  • winbind enum groups = yes — поддержка определенных системных вызовов, позволяющих приложениям видеть доменных пользователей.
  • winbind enum users = yes — тоже самое но для групп.
  • winbind nested groups = yes — включим поддержку вложенных групп.
  • winbind use default domain = yes — разрешим управлять пользователями без доменной части в имени пользователя.
  • winbind refresh tickets = yes — укажем, что winbind должен обновлять билеты Kerberos.
  • unix charset = utf-8 — кодировка компьютера на котором работает samba.
  • dos charset = cp866 — укажем, что нужно переопределять кодировку для dos клиентов.
  • nt acl support = yes — укажем, что нужно преобразовать права доступа unix в списки доступа Windows NT.
  • acl group control = yes — в posix файловых системах, только владелец файла и суперпользователь может изменить разрешения и acl для файла. Этим параметром отменим это ограничение.
  • map acl inherit = yes — укажем, что нужно использовать расширенные атрибуты файлов.
  • unix password sync = yes — заставим синхронизировать пароли unix с паролями smb.
  • preferred master = No — служба nmbd не будет предпочитаемым мастер браузером.
  • local master = No — и не будет локальным мастером браузером.
  • domain master = No — и не будет доменным мастером браузером.

Разбор параметров в секции [data]

Название секции [data] — это наш сетевой ресурс (общая папка). То есть так будет называться общая папка.

  • comment = Файлы пользователей домена — комментарий для общего ресурса.
  • path = /share — путь к папке на сервере.
  • hide special files = Yes — скроем специальные файлы, такие как сокеты, устройства и именованные каналы.
  • hide unreadable = Yes — скроем файлы, к которым нет доступа.
  • store dos attributes = Yes — укажем что нужно считывать DOS атрибуты (системный, скрытый, архивный, только для чтения).
  • ea support = Yes — разрешим клиентам OS/2 сохранять расширенные атрибуты.
  • create mask = 0664 — когда создается файл, необходимые права доступа рассчитываются в соответствии с преобразованием из DOS прав в права UNIX . Полученный результат не может превзойти эту маску.
  • directory mask = 0775 — тоже самое, но для каталогов.
  • force create mode = 0664 — этот параметр переопределит права на создаваемые файлы.
  • force directory mode = 0775 — тоже самое, но для каталога.
  • hosts allow = 192.168.0.0/24 — разрешим подключаться только из этой сети.
  • inherit acls = Yes — включим наследование прав acl.
  • inherit permissions = Yes — включим наследование прав.
  • read only = No — сетевой ресурс будет доступен и на чтение, и на запись.
  • vfs objects = acl_xattr — модуль позволит использовать acl Windows, то есть будет возможно редактировать права из Windows.
  • vfs objects = recycle — модуль позволит использовать корзину.
  • recycle:maxsize = 0 — файлы, размер которых превышает указанное число байт не будут перемещаться в корзину, если 0 то все файлы будут перемещаться в корзину.
  • recycle:subdir_mode = 0700 — к подкаталогам в корзине доступ будет иметь только владелец. То есть, кто удалил файл, тот и сможет его восстановить.
  • recycle:directory_mode = 0777 — сама корзина будет с такими правами.
  • recycle:touch = yes — при перемещении файла в корзину, будем обновлять дату доступа к файлу.
  • recycle:versions = yes — файлы с одинаковыми именами будут все храниться в корзине.
  • recycle:keeptree = yes — при удалении каталога, будем сохранять его структуру.
  • recycle:repository = .recycle/%U — у каждого пользователя будет свой подкаталог в корзине.

Создание каталога и корзины

Далее создаем каталог /share, именно туда будет ссылаться общий ресурс data:

$ sudo mkdir /share

Создадим корзину, так как сама она не создаётся:

$ sudo mkdir /share/.recycle
$ sudo chmod 777 /share/.recycle/

Применение настроек

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

$ testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

$ sudo systemctl restart smbd

Ввод samba в домен

Вводим сервер samba в домен и проверяем:

$ sudo net ads join -U administrator

$ sudo net ads testjoin
Join is OK

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

$ sudo systemctl restart winbind
$ sudo systemctl restart smbd
$ sudo systemctl restart nmbd

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

$ sudo wbinfo -t
$ sudo wbinfo -u
$ sudo wbinfo -g

Настроим права на каталог:

$ sudo chown -R administrator /share/

Теперь администратор домена является владельцем каталога share, а это и есть сетевой ресурс date.

На этом можно считать что мы ввели сервер samba в домен.

Проверка работы с клиента windows

Мы зашли под доменным администратором (administrator) на Windows сервер. Пробуем открыть подготовленный сетевой каталог:

Samba как участник домена, изображение

Нас должно пустить в каталог не спрашивая логин и пароль! А если спрашивает, значит что-то сделали не так.

В свойствах каталога можем настраивать:

Samba как участник домена, изображение

Таким образом, уже с Windows, мы можем вести дальнейшую настройку прав. На Linux, при этом, будут использоваться acl права.


Если понравилась статья, подпишись на мой канал в VK или Telegram.

Introduction

Are you struggling to integrate your Linux-based servers with your Active Directory environment? Joining Linux to AD can be a daunting task, but it’s essential for ensuring smooth file sharing and access control. In this guide, we’ll show you how to join Linux to AD and share folders using Samba. Follow our step-by-step instructions to configure Samba, join the domain, and optimize for seamless file sharing and access control.

Prerequisites

Before proceeding with this tutorial, you will need:

  • A Linux machine running a supported version of Samba (Samba 4.x or later is recommended)
  • An Active Directory domain and administrator account credentials with the permissions to join machines to the domain
  • Basic knowledge of Linux terminal commands

Recommended Specs

For optimal performance, we recommend using a Linux machine with at least 2 CPU cores, 4GB of RAM, and 50GB of available storage.

Step 1: Install Samba and Join Linux to AD Domain

The first step is to install the Samba and Winbind packages on your Linux machine. To do this, open the terminal on your Linux machine and run the following commands:

Ubuntu / Debian

sudo apt-get update
sudo apt-get install samba winbind

CentOS / Fedora / Rocky

sudo yum update
sudo yum install samba-winbind samba-client

Next, join the Linux machine to the AD domain by running the following command:

sudo net ads join -U administrator

Replace “administrator” with a user account that has permission to join the Linux machine to the AD domain. You will be prompted for the password for this user account. Once the Linux machine has successfully joined the AD domain, you can verify the status by running the following command:

sudo net ads info

This command will display information about the domain that the Linux machine has joined.

Step 2: Create a Shared Folder and Set Permissions

The next step is to create a shared folder that can be accessed by members of the AD domain. To create a shared folder, run the following commands:

sudo mkdir /shared-folder
sudo chmod 777 /shared-folder

Replace “/shared-folder” with the name of the folder that you want to create. The “chmod” command sets the permissions on the folder to allow anyone to read, write, and execute files in the folder.

Step 3: Configure Samba

To configure Samba, you need to edit the Samba configuration file /etc/samba/smb.conf. Open the file using your favorite text editor and add the following lines at the end of the file:

[shared-folder]
path = /shared-folder
browsable = yes
create mask = 0664
directory mask = 0775
force group = sambausers

Replace “shared-folder” with the name of the folder you created in step 2.

  • The “browsable” parameter specifies whether the shared folder will be visible to clients browsing the network.
  • The “create mask” parameter sets the default file permissions for files created in the shared folder. The value 0664 allows the owner and group to read and write the files, and others to read the files.
  • The “directory mask” parameter sets the default file permissions for directories created in the shared folder. The value 0775 allows the owner and group to read, write, and execute the directories, and others to read and execute the directories.
  • The “force group” parameter ensures that any files or directories created in the shared folder are owned by the specified group. Replace “sambausers” with the name of the group that you want to grant access to the shared folder.

Now, add the following lines to the [shared-folder] section to create separate permissions for different AD groups:

valid users = @"DOMAIN\AD-GROUP1", @"DOMAIN\AD-GROUP2"
write list = @"DOMAIN\AD-GROUP1"
read list = @"DOMAIN\AD-GROUP2"

Replace “DOMAIN” with your Active Directory domain name, “AD-GROUP1” with the name of the AD group that you want to grant write access to the shared folder, and “AD-GROUP2” with the name of the AD group that you want to grant read-only access to the shared folder.

  • The “valid users” parameter restricts access to the shared folder to members of the specified AD groups. The “@” symbol before the group name indicates that it is an AD group. Separate multiple groups with a comma.
  • The “write list” parameter specifies the AD group that has write access to the shared folder. Members of this group can read, write, and execute files in the shared folder. If you want to allow multiple AD groups to have write access, separate the group names with a comma.
  • The “read list” parameter specifies the AD group that has read-only access to the shared folder. Members of this group can read and execute files in the shared folder, but cannot modify them. If you want to allow multiple AD groups to have read-only access, separate the group names with a comma.

Save the changes and close the file.

Step 4: Restart Samba

Join Linux To AD

Join Linux To AD

Restart the Samba service to apply the changes you made to the configuration file by running the following command:

Ubuntu / Debian / Rocky

sudo systemctl restart smbd

CentOS / Fedora

sudo systemctl restart smb

Step 5: Mounting the Samba Share

From Windows

To mount the Samba share on a Windows machine, follow these steps:

  1. Open File Explorer and click on “This PC”
  2. Click on “Map network drive”
  3. In the “Folder” field, enter the path to the Samba share in the following format: \\<server-ip-or-name>\<share-name>
  4. Check the box next to “Connect using different credentials”
  5. Click on “Finish”
  6. Enter your Linux machine username and password when prompted
  7. Click on “OK”

From Linux

To mount the Samba share on a Linux machine, follow these steps:

  1. Create a mount point by running the following command:
sudo mkdir /mnt/shared-folder
  1. Mount the Samba share by running the following command:
sudo mount -t cifs //<server-ip-or-name>/<share-name> /mnt/shared-folder -o username=<linux-username>,password=<linux-password>,domain=<domain-name>

Replace <server-ip-or-name> with the IP address or hostname of your Linux machine, <share-name> with the name of the shared folder, <linux-username> with your Linux machine username, <linux-password> with your Linux machine password, and <domain-name> with your Active Directory domain name.

Step 6: Optimizing Samba for Faster Performance

Here are some tips for optimizing Samba for faster performance:

  1. Use the latest version of Samba.
  2. Use the “async” I/O mode to improve performance when writing large files.
  3. Use the “wide links” parameter to enable symbolic links to directories outside the Samba share.
  4. Enable oplocks to allow clients to cache files locally for
  5. faster access. 5. Use the “socket options” parameter to optimize the network socket parameters.
  6. Use the “read raw” and “write raw” parameters to disable the Samba internal read and write caching.

To implement these optimizations, add the following lines to the [global] section of the Samba configuration file:

async io = yes
wide links = yes
oplocks = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=65536 SO_SNDBUF=65536
read raw = yes
write raw = yes

Save the changes and restart the Samba service to apply the optimizations.

Conclusion

In this tutorial, we have shown you how to join a Linux machine to AD and share folders using AD permissions in Samba. By following these steps, you can easily integrate your Linux-based servers with your Active Directory environment and ensure that your users have access to the files they need, while also maintaining strict access control. We also provided instructions for mounting the Samba share from a Windows or Linux machine and optimizing Samba for faster performance. Remember to take security into consideration when configuring your Samba shares, and always test your configurations before deploying them to a production environment.

Helpful Links

  1. Check out our DevOps and SRE section
  2. Check out our post on How to Join Linux to AD Domain using Ansible
  3. Samba official documentation: https://www.samba.org/samba/docs/
  4. Samba Wiki: https://wiki.samba.org/index.php/Main_Page
  5. Red Hat documentation on Samba integration with Active Directory: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/windows_integration_guide/samba-ad-integration
  6. Microsoft documentation on Active Directory: https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview
  7. TechRepublic article on Samba and Active Directory integration: https://www.techrepublic.com/article/how-to-integrate-samba-file-shares-with-active-directory-for-perfect-network-chemistry/

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Vmware tool windows server 2003
  • Почему не отображается папка users в windows
  • 0xc000000e при загрузке windows 10 после клонирования
  • Не печатает принтер по локальной сети windows 10
  • Эмулятор kali linux для windows 10