Samba + FreeIPA аутентификация пользователей Samba в Kerberos
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2)
- Astra Linux Special Edition РУСБ.10015-10 (очередное обновление 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 (оперативное обновление 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Создать каталог для разделяемого файлового ресурса (например, каталог /srv/share/) и назначить ему владельца "никто:не_группа" (служебный пользователь nobody и служебная группа пользователей nogroup):
sudo mkdir -p /srv/share
sudo chown nobody:nogroup /srv/shareСоздать в любом текстовом редакторе файл 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:
- В актуальных обновлениях Astra Linux Special Edition использовать опцию --use-kerberos:kinit adminПри этом будет запрошен пароль, который будет игнорироваться. Для исключения запроса пароля использовать опцию -N.
smbclient --use-kerberos=required //ipa0.ipadomain.ru/admin - В более ранних обновлениях использование билета Kerberos задается опцией -k:kinit adminВ зависимости от используемой версии samba может быть запрошен пароль. Для исключения запроса пароля в дополнение к опции -k использовать опцию -N.
smbclient -k //ipa0.ipadomain.ru/admin
- С использованием подписания пакетов (параметр krb5i):
Для использования опции монтирования sec=krb5i на сервере может понадобиться установить параметр:
CODEsudo kinit admin
sudo mount -t cifs //ipa0.ipadomain.ru/share /media/share -o cruid=admin,user=admin,sec=krb5i - или без подписания пакетов (менее безопасный, но более быстрый вариант):sudo kinit admin
sudo mount -t cifs //ipa0.ipadomain.ru/share /media/share -o cruid=admin,user=admin,sec=krb5
Отдельный сервер samba
В примере выше сервер samba запускается непосредственно на контроллере домена. Далее рассматриваются действия по запуску файлового сервера samba с аутентификацией через доменную службу Kerberos на отдельном компьютере, введенном в домен FreeIPA с использованием службы sssd.
- Действия на контроллере домена:
Если при установке контроллера домена не была выполнена установка и настройка службы samba, то установить необходимые компоненты, выполнив на контроллере домена следующие команды:
sudo kinit admin
sudo ipa-adtrust-install --add-sids --add-agentsПолучить на контроллере домена идентификатор безопасности (SID) домена (SID for domain):
sudo net getdomainsidпример вывода команды:CODEИдентификатор SID for domain понадобится на сервере samba, чтобы указать службе samba в каком домене работать;
Получить диапазон идентификаторов домена:
sudo ipa idrange-find --rawпример вывода команды:
CODEдля настройки понадобятся значения полей ipabaseid и ipaidrangesize, точнее понадобится значение первого поля ipabaseid (начало диапазона идентификаторов) и значение последнего идентификатора, которое вычисляется как:
ipabaseid + ipaidrangesize -1
- Настройка файлового сервера. Выполняется на файловом сервере.
- Рекомендуется назначить файловому серверу статический IP-адрес (см. Настройка сетевых подключений в Astra Linux).
Ввести компьютер в домен. См. Ввод Astra Linux в домен FreeIPA.
Установить на файловом сервере необходимые пакеты:
Особенности установки пакета libwbclient-sssd:
- в Astra Linux Special Edition x.8 пакет libwbclient-sssd не используется и его установка не требуется;
- в Astra Linux Special Edition x.7 и более поздних обновлениях достаточно использовать основной репозиторий;
- в Astra Linux Special Edition 1.6 для установки пакетов необходимо подключить репозиторий диска со средствами разработки.
sudo apt install libwbclient-sssd samba winbindДля того, чтобы операции по регистрации службы samba могли быть выполнены на клиенте, в старых обновлениях Astra Linux необходимо установить пакет freeipa-admintools. В актуальных обновлениях необходимые для регистрации служб инструменты устанавливаются при вводе компьютера в домен.
Регистрация и настройка доменной службы. Выполняется либо на контроллере домена, либо на файловом сервере с установленным пакетом 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.keytabipa0.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;
секции [homes] и [shared] определяют разделяемые ресурсы и приведены для примере (при этом секция [homes] имеет специальное назначение, см. Автоматическое монтирование разделяемых ресурсов Samba);
Настроить идентификатор безопасности домена:
sudo net setdomainsid <SID>где <SID> — сохраненный ранее идентификатор безопасности;Перезапустить службы samba:
sudo systemctl restart smbd winbind
Разграничение доступа к разделяемым ресурсам в домене
См. Настройка доступа к файловым объектам разделяемого ресурса.
Простые проверки
Независимо от места размещения сервера samba (на контроллере домена или на клиенте) на любом клиентском компьютере, входящем в домен, должна успешно выполняться последовательность команд:
Получить билет любого доменного пользователя:
kinit <имя_доменного_пользователя>Получить список разделяемых ресурсов сервера samba предъявив полученный билет Kerberos:
- В Astra Linux Special Edition 1.8:smbclient -N --use-kerberos=required -L <имя_сервера>
В более ранних обновлениях:
smbclient -kL <имя_сервера>
- В Astra Linux Special Edition 1.8:
После удаления билетов Kerberos в доступе к серверу samba должно быть отказано. Для проверки:
Удалить билеты Kerberos выполнив команду:
kdestroy -AПопытаться получить доступ:
- В актуальных обновлениях Astra Limux Special Edition:smbclient --use-kerberos=required -L <имя_сервера>
В более ранних обновлениях:
smbclient -kL <имя_сервера>
- В актуальных обновлениях Astra Limux Special Edition:
Ошибки и предупреждения
- Ошибка соединения 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 не влияет.
- Установка samba при инициализации сервера FreeIPA
- Установка samba после инициализации сервера FreeIPA
- Особенности работы связки FreeIPA - samba
- Подключение/монтирование ресурса с клиентской доменной машины
- Отдельный сервер samba
- Разграничение доступа к разделяемым ресурсам в домене
- Простые проверки
- Ошибки и предупреждения