Samba — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(fix typo)
 
(не показано 13 промежуточных версий 3 участников)
Строка 12: Строка 12:
  
 
Все приведенные консольные команды выполняются от root, если не указано иное. Вход в root-коноль выполняется командой
 
Все приведенные консольные команды выполняются от root, если не указано иное. Вход в root-коноль выполняется командой
  su -
+
su -
 
или
 
или
  sudo -i
+
sudo -i
  
 
В качестве образа ОС для развертывания контроллера домена Samba AD можно взять:
 
В качестве образа ОС для развертывания контроллера домена Samba AD можно взять:
Строка 30: Строка 30:
  
 
Установите полноквалифицированное (FQDN) доменное имя, состоящее из: имя_хоста.домен.зона, например:
 
Установите полноквалифицированное (FQDN) доменное имя, состоящее из: имя_хоста.домен.зона, например:
  server1.samba.loc
+
server1.samba.loc
 
Тогда именем хоста будет server1, доменом — samba, доменной зоной — loc, realm — samba.loc.
 
Тогда именем хоста будет server1, доменом — samba, доменной зоной — loc, realm — samba.loc.
  
Строка 36: Строка 36:
  
 
Установим имя хоста на контроллере домена:
 
Установим имя хоста на контроллере домена:
  hostnamectl set-hostname server1.samba.loc
+
hostnamectl set-hostname server1.samba.loc
  
 
Посмотрите IP-адрес командой
 
Посмотрите IP-адрес командой
  /sbin/ip a
+
ip a
  
 
Пример вывода:
 
Пример вывода:
Строка 62: Строка 62:
  
 
В файл /etc/hosts необходимо добавить строку вида:
 
В файл /etc/hosts необходимо добавить строку вида:
  192.168.122.12 server1.samba.loc server1
+
192.168.122.12 server1.samba.loc server1
 
Как видите, необходимо, чтобы и FQDN, и краткое имя резолвились в IP-адрес контроллера домена.
 
Как видите, необходимо, чтобы и FQDN, и краткое имя резолвились в IP-адрес контроллера домена.
 
Для этого откройте файл к консольном редакторе:
 
Для этого откройте файл к консольном редакторе:
Строка 69: Строка 69:
  
 
Командами
 
Командами
  ping -c3 server1.samba.loc
+
ping -c3 server1.samba.loc
  ping -c3 server1
+
ping -c3 server1
 
проверьте корректность записей в /etc/hosts.
 
проверьте корректность записей в /etc/hosts.
  
Строка 77: Строка 77:
 
=== Запуск контроллера домена ===
 
=== Запуск контроллера домена ===
  
Установите необходимые для работы пакеты. На ROSA 2021.1 (>= R12) и rosa2019.05:
+
Установите необходимые для работы пакеты:
  dnf install samba-server /bin/ps /usr/bin/xargs /usr/bin/nslookup
+
dnf install samba-server /usr/bin/xargs /usr/bin/nslookup
На ROSA 2016.1 (R11):
+
 
  urpmi samba-server procps-ng findutils bind-utils
+
Если вы планируете использовать BIND в качестве DNS сервера, установите его:
 +
dnf install bind
 +
 
 +
По умолчанию BIND настроен на прослушивание только на интерфейсе loopback (127.0.0.1)
 +
 
 +
Для настройки прослушивания на всех интерфейсах выполните следующую команду:
 +
sed -i '/listen-on\|allow-query/ s|{.\+}|{ any; }|' /etc/named.conf
 +
 
 +
Также для BIND требуется включить использование модуля DLZ:
 +
echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/named.conf
  
 
Отключите лишние службы из состава набора программ samba:
 
Отключите лишние службы из состава набора программ samba:
  systemctl disable --now smb nmb winbind
+
systemctl mask --now smb nmb winbind
 
Их обособленная работа не требуется и будет мешать контроллеру домена.
 
Их обособленная работа не требуется и будет мешать контроллеру домена.
  
 
Убедитесь, что они действительно выключены, команда
 
Убедитесь, что они действительно выключены, команда
  ps ax | grep -E "samba|smbd|nmbd|winbindd" | grep -v grep
+
ps ax | grep -E "samba|smbd|nmbd|winbind" | grep -v grep
 
должна ничего не выдать.
 
должна ничего не выдать.
  
 
Сотрите старые файлы настроек, оставив их резервные копии:
 
Сотрите старые файлы настроек, оставив их резервные копии:
  mv -v /etc/samba/smb.conf /etc/samba/smb.conf.old
+
mv -v /etc/samba/smb.conf /etc/samba/smb.conf.old
  mv -v /etc/krb5.conf /etc/krb5.conf.old
+
mv -v /etc/krb5.conf /etc/krb5.conf.old
  
 
Очистите старые базы данных, путь к которым можно узнать командой
 
Очистите старые базы данных, путь к которым можно узнать командой
  smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
+
smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
 
Команда для очистки:
 
Команда для очистки:
  smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" | awk '{print $NF}' | xargs -I'{}' rm -fv '{}'/*.{tdb,ldb}
+
smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" | awk '{print $NF}' | xargs -I'{}' rm -fv '{}'/*.{tdb,ldb}
 
Если эта команда ничего не выдала, то это нормально: у вас не было баз данных от прошлых запусков контроллера домена.
 
Если эта команда ничего не выдала, то это нормально: у вас не было баз данных от прошлых запусков контроллера домена.
 +
 +
По умолчанию systemd-resolved занимает порт 53, чем будет мешать DNS-серверу контроллера домена. Отключим это:
 +
<pre>
 +
mkdir -p /etc/systemd/resolved.conf.d
 +
echo -e '[Resolve]\nDNSStubListener=no' > /etc/systemd/resolved.conf.d/no53port.conf
 +
systemctl try-restart systemd-resolved
 +
</pre>
  
 
Запустите интерактивную настройку домена:
 
Запустите интерактивную настройку домена:
  samba-tool domain provision --use-rfc2307 --interactive
+
samba-tool domain provision --use-rfc2307 --interactive
 +
 
 +
Ниже приведем ее типовой вывод. В квадратных скобках ([]) указывается значение по умолчанию, нажимайте Enter, чтобы с ним согласиться, или введите иное значение. Если сеть и имя хоста были настроены верно, то значения по умолчанию не должно потребоваться изменить.
  
Ниже приведем ее типовой вывод. В квадратных вкобках ([]) указывается значение по умолчанию, нажимайте Enter, чтобы с ним согласиться, или введите иное значение. Если сеть и имя хоста были настроены верны, то значения по умолчанию не должно потребоваться изменить.
+
Для использования BIND в качестве DNS сервера выбирайте BIND9_DLZ. BIND9_FLATFILE не поддерживается и будет удален в будущих версиях samba.
  
 
<pre>
 
<pre>
Строка 119: Строка 137:
  
 
Сделайте
 
Сделайте
  mv -v /var/lib/samba/private/krb5.conf /etc/krb5.conf
+
mv -v /var/lib/samba/private/krb5.conf /etc/krb5.conf
 +
 
 +
Если вы выбрали DNS сервер BIND, добавьте службу named в автозагрузку и запустите ее:
 +
systemctl enable --now named
 +
Проверьте всё ли в порядке:
 +
systemctl status named
  
 
Теперь добавьте службу контроллера домена в автозапуск:
 
Теперь добавьте службу контроллера домена в автозапуск:
  systemctl enable samba
+
systemctl enable samba
 
Запустите контроллер домена:
 
Запустите контроллер домена:
  systemctl restart samba
+
systemctl restart samba
 
И посмотрите его лог, убедитесь, что он запустился без ошибок:
 
И посмотрите его лог, убедитесь, что он запустился без ошибок:
  systemctl status samba
+
systemctl status samba
  
 
Статус службы должен быть "active" ("запущена"), но в конце лога может быть "ошибка":
 
Статус службы должен быть "active" ("запущена"), но в конце лога может быть "ошибка":
  dnsupdate_nameupdate_done: Failed DNS update with exit code 29
+
dnsupdate_nameupdate_done: Failed DNS update with exit code 29
  
 
Это нормально. Убедимся в этом, запустив:
 
Это нормально. Убедимся в этом, запустив:
  samba_dnsupdate --verbose
+
samba_dnsupdate --verbose
 
В подробном логе будет сказано про ошибки "WERR_DNS_ERROR_RECORD_ALREADY_EXISTS", которые означают, что добавляемая запись DNS уже существует. Она была создана при создании домена. Запись "Failed update of 29 entries" означает, что такая ситуация возникла 29 раз, а это количество раз и стало кодом возврата samba_dnsupdate.
 
В подробном логе будет сказано про ошибки "WERR_DNS_ERROR_RECORD_ALREADY_EXISTS", которые означают, что добавляемая запись DNS уже существует. Она была создана при создании домена. Запись "Failed update of 29 entries" означает, что такая ситуация возникла 29 раз, а это количество раз и стало кодом возврата samba_dnsupdate.
  
 
Проверьте работу DNS-сервера, на другом компьютере, например, будущем клиенте домена, выполнив:
 
Проверьте работу DNS-сервера, на другом компьютере, например, будущем клиенте домена, выполнив:
  nslookup server1.samba.loc 192.168.122.12
+
nslookup server1.samba.loc 192.168.122.12
 
(подставьте свои адреса). Пример успешного ответа:
 
(подставьте свои адреса). Пример успешного ответа:
 
<pre>
 
<pre>
Строка 154: Строка 177:
  
 
Убедитесь, что этот сервер способен выдать DNS требуемого домена, выполнив на будущем '''клиенте''' домена (не на контроллере):
 
Убедитесь, что этот сервер способен выдать DNS требуемого домена, выполнив на будущем '''клиенте''' домена (не на контроллере):
  nslookup yandex.ru 192.168.122.1
+
nslookup yandex.ru 192.168.122.1
 
Возможно, стоит указать 8.8.8.8 или иной сервер. После первоначальной настройки контроллера его можно заменить в файле
 
Возможно, стоит указать 8.8.8.8 или иной сервер. После первоначальной настройки контроллера его можно заменить в файле
  /etc/samba/smb.conf
+
/etc/samba/smb.conf
 
перезапустив контроллер после изменения настроек командой
 
перезапустив контроллер после изменения настроек командой
  systemctl restart samba
+
systemctl restart samba
 +
 
 +
=== Добавление доменного пользователя ===
 +
 
 +
Пример создания учетной записи на контроллере домена:
 +
samba-tool user create IvanonVP
  
 
== Ввод ROSA-клиента в домен ==
 
== Ввод ROSA-клиента в домен ==
Строка 179: Строка 207:
  
 
Командой
 
Командой
  ping server1
+
ping server1
 
проверьте сетевую доступность контроллера домена.
 
проверьте сетевую доступность контроллера домена.
  
=== Подключение компьютера с ОС ROSA к домену ===
+
=== Подключение компьютера с ОС ROSA к домену через SSSD ===
 +
 
 +
Установите необходимые пакеты:
 +
sudo dnf install task-realmd-ad-sssd
 +
 
 +
Введите в домен:
 +
sudo realm join -U Administrator
 +
 
 +
=== Подключение компьютера с ОС ROSA к домену через Winbind ===
  
Установите необходимые пакеты. Для rosa2021.1 и rosa2019.05:
+
'''Рекомендуется использовать способ ввода через SSSD, а не через Winbind.
  dnf install drakxtools samba-server samba-client samba-winbind nss_ldap libnss-role pam_krb5 lib64sasl2-plug-gssapi urpmi perl-URPM
+
'''
Для rosa2016.1:
+
Установите необходимые пакеты:
  urpmi drakxtools samba-server samba-client samba-winbind nss_ldap libnss-role pam_krb5 lib64sasl2-plug-gssapi
+
sudo dnf install drakxtools samba-server samba-client samba-winbind nss_ldap libnss-role pam_krb5 lib64sasl2-plug-gssapi urpmi perl-URPM
  
 
Запустите утилиту drakauth:
 
Запустите утилиту drakauth:
  drakauth
+
drakauth
 
Если установлена переменная окружения $DISPLAY, запустится графическая утилита, иначе псевдографическая.
 
Если установлена переменная окружения $DISPLAY, запустится графическая утилита, иначе псевдографическая.
  
Строка 211: Строка 247:
 
Нажмите "Далее". В случае успешного ввода в домен будет предложено перезагрузить систему.
 
Нажмите "Далее". В случае успешного ввода в домен будет предложено перезагрузить систему.
  
[[Категория:ROSA Enterprise Linux Server]]
+
[[Категория:ROSA Server]]
[[Категория:ROSA Server|ROSA Server]]
+

Текущая версия на 12:02, 22 октября 2024

Введение и терминология

В этой статье описано создание домена — централизированного хранилища пользователей и их аттрибутов.

Контроллер домена — программное оебспечение, обеспечивающее создание и функционирование сервера домена. В данном случае в качестве контроллера домена используется samba.

AD — Active Directory — домен разработки Microsoft. Samba реализует Samba AD — совместимый с Microsoft Active Directory домен, в который можно вводить и Linux, и Windows-клиенты.

Клиент — конечный член домена или ПО, позволяющее обспечить членство в домене.

В статье описывается создание лабораторной установки, состоящей из 1 сервера и 1 клиента, находящихся в одной подсети 192.168.122.0/24.

Все приведенные консольные команды выполняются от root, если не указано иное. Вход в root-коноль выполняется командой

su -

или

sudo -i

В качестве образа ОС для развертывания контроллера домена Samba AD можно взять:

По адресу https://abf.io/platforms/rosa2021.1/products имеются иные сборки, в т.ч. для ARMv8 (aarch64).

Настройка контроллера домена

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

Важно правильно настроить сеть на клиенте и сервере. В простых случаях, в т.ч. при поднятии тестовых стендов, делайте так, чтобы клиент и сервер находились в одной подсети. Например, чтобы у виртуальной машины с сервером был IP-адрес 192.168.10.2, а у виртуальной машины с клиентом — 192.168.10.3.

Рассмотрим настройку сети на сервере.

Установите полноквалифицированное (FQDN) доменное имя, состоящее из: имя_хоста.домен.зона, например:

server1.samba.loc

Тогда именем хоста будет server1, доменом — samba, доменной зоной — loc, realm — samba.loc.

Избегайте использования зоны .local или выключите или перенастройте Avahi, чтобы использовать ее.

Установим имя хоста на контроллере домена:

hostnamectl set-hostname server1.samba.loc

Посмотрите IP-адрес командой

ip a

Пример вывода:

[root@server1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: host0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 32:e2:0b:ba:17:c5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 169.254.212.10/16 brd 169.254.255.255 scope link host0
       valid_lft forever preferred_lft forever
    inet 192.168.122.12/24 brd 192.168.122.255 scope global dynamic host0
       valid_lft 2577sec preferred_lft 2577sec
    inet6 fe80::30e2:bff:feba:17c5/64 scope link 
       valid_lft forever preferred_lft forever

В данном примере IPv4-адрес — 192.168.122.12.

В файл /etc/hosts необходимо добавить строку вида:

192.168.122.12 server1.samba.loc server1

Как видите, необходимо, чтобы и FQDN, и краткое имя резолвились в IP-адрес контроллера домена. Для этого откройте файл к консольном редакторе:

 nano /etc/hosts

добавьте указанную строку, сохраните сочетанием клавиш Ctrl+O, Enter, затем закройте консольный редактор сочетанием клавиш Ctrl+X.

Командами

ping -c3 server1.samba.loc
ping -c3 server1

проверьте корректность записей в /etc/hosts.

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

Запуск контроллера домена

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

dnf install samba-server /usr/bin/xargs /usr/bin/nslookup

Если вы планируете использовать BIND в качестве DNS сервера, установите его:

dnf install bind

По умолчанию BIND настроен на прослушивание только на интерфейсе loopback (127.0.0.1)

Для настройки прослушивания на всех интерфейсах выполните следующую команду:

sed -i '/listen-on\|allow-query/ s|{.\+}|{ any; }|' /etc/named.conf

Также для BIND требуется включить использование модуля DLZ:

echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/named.conf

Отключите лишние службы из состава набора программ samba:

systemctl mask --now smb nmb winbind

Их обособленная работа не требуется и будет мешать контроллеру домена.

Убедитесь, что они действительно выключены, команда

ps ax | grep -E "samba|smbd|nmbd|winbind" | grep -v grep

должна ничего не выдать.

Сотрите старые файлы настроек, оставив их резервные копии:

mv -v /etc/samba/smb.conf /etc/samba/smb.conf.old
mv -v /etc/krb5.conf /etc/krb5.conf.old

Очистите старые базы данных, путь к которым можно узнать командой

smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"

Команда для очистки:

smbd -b | grep -E "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" | awk '{print $NF}' | xargs -I'{}' rm -fv '{}'/*.{tdb,ldb}

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

По умолчанию systemd-resolved занимает порт 53, чем будет мешать DNS-серверу контроллера домена. Отключим это:

mkdir -p /etc/systemd/resolved.conf.d
echo -e '[Resolve]\nDNSStubListener=no' > /etc/systemd/resolved.conf.d/no53port.conf
systemctl try-restart systemd-resolved

Запустите интерактивную настройку домена:

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

Ниже приведем ее типовой вывод. В квадратных скобках ([]) указывается значение по умолчанию, нажимайте Enter, чтобы с ним согласиться, или введите иное значение. Если сеть и имя хоста были настроены верно, то значения по умолчанию не должно потребоваться изменить.

Для использования BIND в качестве DNS сервера выбирайте BIND9_DLZ. BIND9_FLATFILE не поддерживается и будет удален в будущих версиях samba.

[root@server1 ~]# samba-tool domain provision --use-rfc2307 --interactive
Realm [SAMBA.LOC]:  
Domain [SAMBA]:  
Server Role (dc, member, standalone) [dc]:  
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:  
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.122.1]:  
Administrator password: 
Retype password:

На последнем шаге вводится пароль доменного пользователя Administrator, при вводе пароль не отображается, пароль должен быть сложным. DNS Forwarder — это адрес сервера, к которому перенаправляются DNS-запросу, на которые сам контроллер домена не может ответить, например, запрос DNS yandex.ru будет направлен в него.

Сделайте

mv -v /var/lib/samba/private/krb5.conf /etc/krb5.conf

Если вы выбрали DNS сервер BIND, добавьте службу named в автозагрузку и запустите ее:

systemctl enable --now named

Проверьте всё ли в порядке:

systemctl status named 

Теперь добавьте службу контроллера домена в автозапуск:

systemctl enable samba

Запустите контроллер домена:

systemctl restart samba

И посмотрите его лог, убедитесь, что он запустился без ошибок:

systemctl status samba

Статус службы должен быть "active" ("запущена"), но в конце лога может быть "ошибка":

dnsupdate_nameupdate_done: Failed DNS update with exit code 29

Это нормально. Убедимся в этом, запустив:

samba_dnsupdate --verbose

В подробном логе будет сказано про ошибки "WERR_DNS_ERROR_RECORD_ALREADY_EXISTS", которые означают, что добавляемая запись DNS уже существует. Она была создана при создании домена. Запись "Failed update of 29 entries" означает, что такая ситуация возникла 29 раз, а это количество раз и стало кодом возврата samba_dnsupdate.

Проверьте работу DNS-сервера, на другом компьютере, например, будущем клиенте домена, выполнив:

nslookup server1.samba.loc 192.168.122.12

(подставьте свои адреса). Пример успешного ответа:

$ nslookup server1.samba.loc 192.168.122.12
Server:         192.168.122.12
Address:        192.168.122.12#53

Name:   server1.samba.loc
Address: 192.168.122.12

Для настройки клиентов будет полезно знать рабочую группу NT, ее можно узнать так:

[root@server1 ~]# cat /etc/samba/smb.conf | grep workgroup
	workgroup = SAMBA

Убедитесь, что этот сервер способен выдать DNS требуемого домена, выполнив на будущем клиенте домена (не на контроллере):

nslookup yandex.ru 192.168.122.1

Возможно, стоит указать 8.8.8.8 или иной сервер. После первоначальной настройки контроллера его можно заменить в файле

/etc/samba/smb.conf

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

systemctl restart samba

Добавление доменного пользователя

Пример создания учетной записи на контроллере домена:

samba-tool user create IvanonVP

Ввод ROSA-клиента в домен

Настройка сети на Linux-клиенте

На клиенте необходимо:

  • добавить адрес контроллера домена в DNS-серверы
  • добавить REALM (samba.loc в примере выше) в список доменов поиска

Для настройки через GUI NetworkManager откройте настройки сетевого соединения, вкладку "IPv4". К DNS-серверам добавьте адрес контролера домена, в примере выше это 192.168.122.12. В "Домены поиска" добавьте realm — samba.loc. Ниже приведен скриншот с образцом заполнения настроек.
Ipa-client1.png

В rosa2019.05, rosa2021.1 и новее имеется интерактивный консольный интерфейс nmtui для редактирования настроек NetworkManager. Также имеется утилита nmcli.

Утилиты NetworkManager редактируют файл /etc/resolv.conf. Если у вас не используется NetworkManager, то можно отредактировать этот файл напрямую, написав в нем:

nameserver 192.168.122.12
search samba.loc

Командой

ping server1

проверьте сетевую доступность контроллера домена.

Подключение компьютера с ОС ROSA к домену через SSSD

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

sudo dnf install task-realmd-ad-sssd

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

sudo realm join -U Administrator

Подключение компьютера с ОС ROSA к домену через Winbind

Рекомендуется использовать способ ввода через SSSD, а не через Winbind. Установите необходимые пакеты:

sudo dnf install drakxtools samba-server samba-client samba-winbind nss_ldap libnss-role pam_krb5 lib64sasl2-plug-gssapi urpmi perl-URPM

Запустите утилиту drakauth:

drakauth

Если установлена переменная окружения $DISPLAY, запустится графическая утилита, иначе псевдографическая.

Выберите способ аутентификации «Домен Windows»
Smb-ad1.png

Выберите тип домена Active Directory
Smb-ad2.png

В предлагаемой лабораторной установке и большинстве типовых конфигураций все необходимые параметры должны оказаться автоматически заполнены правильно на следующем шаге. Проверьте значения.
Smb-ad3.png

Укажите желаемое имя Netbios. Поле "Описание компьютера" заполнять не обязательно.
Smb-ad4.png

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

Smb-ad5.png

Нажмите "Далее". В случае успешного ввода в домен будет предложено перезагрузить систему.