Исходные данные
Предполагается, что уже установлен сервер FreeIPA (контроллер домена). При стандартной установке на таком сервере уже установлены службы samba и winbind.
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7) с установленным обновлением 4.7.2
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20220829SE16 (оперативное обновление 1.6.11)
Astra Linux Common Edition 2.12.45
Установка samba при инициализации сервера FreeIPA
Установка и настройка службы samba может быть выполнена при инициализации сервера FreeIPA. Для этого используется:
- при инициализации первого сервера FreeIPA в домене командой astra-freeipa-server — опция -s;
- при установке реплик командой astra-freeipa-replica — опция --setup-adtrust .
При установке и настройке службы Samba также выполняется установка и настройка компонент для работы с Windows AD, но настраивать при этом доверительные отношения с доменом Windows AD не обязательно.
Доустановка samba после инициализации сервера FreeIPA
Если при инициализации сервера (реплики) FreeIPA не была применена опция установки и настройки samba, то это можно сделать после инициализации:
Получить для суперпользователя билет Kerberos администратора домена:
sudo kinit adminДействуя с правами суперпользователя выполнить установку:
sudo ipa-adtrust-install --add-sids --add-agents
Особенности работы связки FreeIPA - samba
После установки samba:
- samba получит роль ROLE_DOMAIN_PDC;
- Сервис samba будет переведён под управление FreeIPA;
- Будет создана и зарегистрирована доменная служба CIFS.
Отдельно выполнять команду добавления службы "ipa service-add ...", как рекомендуется во многих Интернет-инструкциях, не нужно: служба добавится автоматически.
Монтирование и авторизация через samba на сервере для простых пользователей работать не будут.
Монтировать разделяемые ресурсы следует только с компьютеров-клиентов.
Службы samba и winbind теперь будут управляться командой ipactl, в списке служб, выводимом этой командой, появится службы smb и winbind:
...
smb Service: RUNNING
winbind Service: RUNNING
...
### Added by IPA Installer ###
[global]
debug pid = yes
config backend = registry
Можно создать комбинированную конфигурацию, заменив "config backend = registry" на "include = registry", что позволит задавать параметры в файле /etc/samba/smb.conf.
Проверить правильность конфигурации можно стандартной командой testparm, однако теперь только от имени суперпользователя:
Редактировать БД "registry" можно с помощью специальной утилиты samba-regedit (устанавливается автоматически при установке пакета samba):
Все секции конфигурации samba (в том числе разделяемые ресурсы, включая специальный ресурс homes) могут быть указаны в этой ветке. Все параметры имеют одинаковый тип REG_SZ.
При этом конфигурационные данные можно импортировать в registry из файлов с синтаксисом конфигурационного файла samba с помощью команды net. Например, для создания разделяемых ресурсов homes и share:
Создать в любом текстовом редакторе файл homes.txt с описанием ресурса homes:
[homes]
browseable = no
comment = Home Directories
create mask = 0600
directory mask = 0700
valid users = %S
# По умолчанию ресурс [homes] предоставляется как ресурс только для чтения (read only = yes).
# Если требуется разрешить запись нужно явно указать read only = no
read only = No
guest ok = noСоздать в любом текстовом редакторе файл share.txt с описанием ресурса share:
[share]
comment = anonymous share
create mask = 0666
directory mask = 0777
guest ok = yes
guest only = yes
path = /srv/share
read only = noИмпортировать созданные описания ресурсов в конфигурацию samba:
sudo net conf import homes.txt homes
sudo net conf import share.txt share
Эти же действия можно выполнить командами без использования файлов для сохранения данных, например, для создания разделяемого ресурса homes:
sudo net conf setparm "homes" "browseable" "No"
sudo net conf setparm "homes" "valid users" "%S"
Создание домашних каталогов
Для тестирования можно создать на сервере условный домашний каталог пользователя admin (т.е. администратора FreeIPA, создаваемого "по умолчанию"):
sudo mkhomedir_helper admin
Подключение/монтирование ресурса с клиентской доменной машины
После выполнения указанных выше действий ресурс (в данном примере - автоматически монтируемый домашний каталог пользователя см. специальный ресурс homes) будет доступен на клиентской машине после получения билета Kerberos:
smbclient -k //ipa0.ipadomain.ru/admin
Для использования опции монтирования sec=krb5i на сервере должен быть задан параметр:
server signing = required
или (устаревший вариант):
Отдельный сервер samba
В примере выше сервер samba запускается непосредственно на контроллере домена. Далее рассматриваются действия по запуску файлового сервера samba с аутентификацией через доменную службу Kerberos на отдельном компьютере, введенном в домен FreeIPA.
- Действия на контроллере домена:
Если при установке контроллера домена не была выполнена установка и настройка службы samba, то установить необходимые компоненты, выполнив на контроллере домена следующие команды:
sudo kinit admin
sudo ipa-adtrust-install --add-sids --add-agentsПолучить на контроллере домена идентификатор безопасности (SID) домена (SID for domain):
sudo net getdomainsidпример вывода команды:SID for local machine IPA0 is: S-1-5-21-2933183829-3187441131-1463459236 SID for domain IPADOMAIN is: S-1-5-21-2933183829-3187441131-1463459236
Идентификатор SID for domain понадобится на сервере samba, чтобы указать службе samba в каком домене работать;
Получить диапазон идентификаторов домена:
ipa idrange-find --rawпример вывода команды:
--------------- 1 range matched --------------- cn: IPADOMAIN.RU_id_range ipabaseid: 72000 ipaidrangesize: 1000000 ipabaserid: 1000 ipasecondarybaserid: 100000000 iparangetype: ipa-local --------------------------------- Количество возвращённых записей 1 ---------------------------------
для настройки понадобятся значения полей ipabaseid и ipaidrangesize, точнее понадобится значение первого поля ipabaseid (начало диапазона идентификаторов) и значение последнего идентификатора, которое вычисляется как:
ipabaseid + ipaidrangesize -1
- Настройка файлового сервера:
- Рекомендуется назначить файловому серверу статический IP-адрес (см. Настройка сетевых подключений в ОС Astra Linux);
Ввести компьютер в домен. См. Ввод клиентского компьютера в домен FreeIPA;
Установить на файловом сервере необходимые пакеты:
Для установки пакета libwbclient-sssd:
- в Astra Linux Special Edition x.7 достаточно использовать основной репозиторий;
- в Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) необходимо подключить репозиторий диска со средствами разработки.
sudo apt install libwbclient-sssd samba winbind freeipa-admintoolsУстановка пакета freeipa-admintools не является обязательной, но, если пакет установлен установлен на клиентской машине, то операции по регистрации службы samba могут быть выполнены на клиенте (может использоваться для клиента - администратора домена);
После ввода файлового сервера в домен зарегистрировать службу и предоставить этой службе права на чтение паролей, для чего на контроллере домена (или на клиенте с установленным пакетом freeipa-admintools) выполнить команды:
Получить билет Kerberos администратора домена:
kinit adminЗарегистрировать службу (здесь и далее: cifs - фиксированное доменное имя службы для службы samba, samba.ipadomain.ru - имя компьютера в домене, на котором расположена служба):
ipa service-add cifs/samba.ipadomain.ruСоздать структуру ролей и привилегий для службы (требуется только при настройке первого сервер, следующие серверы добавляются в созданную структуру):
ipa permission-add "CIFS server can read user passwords" --attrs={ipaNTHash,ipaNTSecurityIdentifier} --type=user --right={read,search,compare} --bindtype=permission
ipa privilege-add "CIFS server privilege"
ipa privilege-add-permission "CIFS server privilege" --permission="CIFS server can read user passwords"
ipa role-add "CIFS server"
ipa role-add-privilege "CIFS server" --privilege="CIFS server privilege"Добавить сервер в созданную структуру ролей и привилегий:
ipa role-add-member "CIFS server" --services=cifs/samba.ipadomain.ru
- После регистрации службы на файловом сервере:
Создать каталог для разделяемого файлового ресурса (например, каталог /srv/share/) и назначить ему владельца "никто:не_группа" (служебный пользователь nobody и служебная группа пользователей nogroup):
sudo mkdir -p /srv/share
sudo chown nobody:nogroup /srv/shareПолучить и сохранить таблицу ключей для службы (требуются права суперпользователя):
sudo kinit adminгде:
sudo ipa-getkeytab -s ipa0.ipadomain.ru -p cifs/samba.ipadomain.ru -k /etc/samba/samba.keytab
- ipa0.ipadomain.ru — имя контроллера домена, у которого запрашиваются ключи;
- cifs/samba.ipadomain.ru — имя службы, для которой запрашиваются ключи;
- /etc/samba/samba.keytab — имя файла, в котором будут сохранены полученные ключи;Настроить конфигурацию службы samba, для чего привести файл /etc/samba/smb.conf к виду:
[global]
dedicated keytab file = /etc/samba/samba.keytab
kerberos method = dedicated keytab
log file = /var/log/samba/log.%m
realm = IPADOMAIN.RU
security = ads
workgroup = IPADOMAIN
idmap config IPADOMAIN : range = <первое_значение_диапазона>-<последнее_значение_диапазона>
idmap config IPADOMAIN : backend = sss
idmap config * : range = 0 - 0[homes]
browsable = no
writable = yes[shared]
path = /srv/share
writable = yes
browseable = yesгде:
- realm = IPADOMAIN.RU — название области Kerberos, имя домена заглавными буквами;
- workgroup = IPADOMAIN — имя рабочей группы, первая часть (до точки) имени области Kerberos;
- в параметре idmap config IPADOMAIN : range чрез тире указываются ранее вычисленные первое и последнее значения диапазона идентификаторов FreeIPA;Настроить идентификатор безопасности домена:
sudo net setdomainsid <SID>где:
- <SID> — полученный ранее идентификатор безопасности;Перезапустить службы samba:
sudo systemctl restart smbd winbind
Ошибки и предупреждения
- Ошибка соединения NT_STATUS_BAD_NETWORK_NAME при попытке доступа к ресурсу говорит о том, что забыли создать на сервере каталог (при доступе к ресурсу homes - домашний каталог пользователя);
- Ошибка соединения NT_STATUS_INVALID_PARAMETER при попытке доступа к ресурсу при авторизации Kerberos говорит о том, что неправильно получен билет Kerberos (чаще всего билет получен из-под sudo, а аутентификацию пытаются выполнить без sudo);
Сообщение "mkdir failed on directory /var/run/samba/msg.lock: Отказано в доступе" на работоспособность клиента samba не влияет, можно это сообщение убрать на время до следующей перезагрузки системы просто создав на клиентской машине этот каталог командой:
sudo mkdir /run/samba/msg.lockили сделать так, чтобы этот каталог создавался автоматически при загрузке, для чего в файле /usr/lib/tmpfiles.d/samba.conf строчку "d /run/samba 0755 root root -" заменить на строчку "d /run/samba/msg.lock 0755 root root -":
sudo sed -i "s~^\s*d\s*/run/samba\s*0755\s*root\s*root\s*-~d /run/samba/msg.lock 0755 root root -~" /usr/lib/tmpfiles.d/samba.conf
- Сообщение "open_internal_pipe: Could not connect to dssetup pipe: NT_STATUS_RPC_INTERFACE_NOT_FOUND" является некритичным предупреждением и на работоспособность службы winbind не влияет;
- Сообщение "Unable to initialize messaging context" на работоспособность клиента samba не влияет;