Данная статья применима к:

Установка samba при инициализации сервера FreeIPA

Установка и настройка службы samba может быть выполнена при инициализации контроллера домена FreeIPA. Для этого:

  • при инициализации первого в домене контроллера домена FreeIPA командой astra-freeipa-server — использовать опцию -s;
  • при установке реплик (команда astra-freeipa-replica) — использовать опцию --setup-adtrust .

При установке и настройке службы Samba также выполняется установка и настройка компонент для работы с Windows AD, но настраивать при этом доверительные отношения с доменом Windows AD не обязательно.

Установка samba после инициализации сервера FreeIPA

Если при инициализации контроллер домена (реплики) FreeIPA не была применена опция установки и настройки samba, то это можно сделать после инициализации:

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

    sudo kinit admin

  2. Действуя с правами суперпользователя выполнить установку:

    sudo ipa-adtrust-install --add-sids --add-agents

Особенности работы связки FreeIPA - samba

После установки samba:

  • samba получит роль ROLE_DOMAIN_PDC;
  • служба samba будет переведена под управление контроллера домена FreeIPA;
  • будет создана и зарегистрирована доменная служба CIFS;

Отдельно выполнять команду добавления службы "ipa service-add ...", как рекомендуется во многих Интернет-инструкциях, не нужно: служба добавится автоматически.

После установки ipa-adtrust-install чтение конфигурации samba на сервере будет доступно только суперпользователю.
Монтирование и авторизация через samba на сервере для простых пользователей работать не будут.
Монтировать разделяемые ресурсы следует только с компьютеров-клиентов.

Службы samba и winbind теперь будут управляться командой ipactl, в списке служб, выводимом этой командой,  появится службы smb и winbind:

sudo ipactl status

...
smb Service: RUNNING
winbind Service: RUNNING
...
В конфигурационном файле сервиса samba /etc/samba/smb.conf останется только отсылка в БД "registry", куда будут перенесены все конфигурационные параметры:

### Added by IPA Installer ###
[global]
debug pid = yes
config backend = registry

Опция "config backend = registry" указывает, что все конфигурационные параметры хранятся в БД registry. Параметры, указанные в файле /etc/samba/smb.conf после этой опции игнорируются.
Можно создать комбинированную конфигурацию, заменив "config backend = registry" на "include = registry", что позволит задавать параметры в файле /etc/samba/smb.conf.

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

sudo testparm

Перед редактированием БД registry рекомендуется сохранить текущую конфигурацию (вывод команды sudo testparm), чтобы иметь возможность восстановить конфигурацию в случае ошибок.

Редактировать БД registry можно с помощью специальной утилиты samba-regedit (устанавливается автоматически при установке пакета samba):

sudo samba-regedit
При этом параметры samba хранятся в ветке /HKEY_LOCAL_MACHINE/SOFTWARE/Samba/smbconf:

Все секции конфигурации samba (в том числе разделяемые ресурсы, включая специальный ресурс homes) могут быть указаны в этой ветке. Все параметры имеют одинаковый тип REG_SZ.

При этом конфигурационные данные можно импортировать в registry из файлов с синтаксисом конфигурационного файла samba с помощью команды net. Например, для создания разделяемых ресурсов homes и share:

  1. Создать в любом текстовом редакторе файл 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

  2. Создать каталог для разделяемого файлового ресурса (например, каталог /srv/share/) и назначить ему владельца "никто:не_группа" (служебный пользователь nobody и служебная группа пользователей nogroup):

    sudo mkdir -p /srv/share
    sudo chown nobody:nogroup /srv/share

  3. Создать в любом текстовом редакторе файл 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

  4. Импортировать созданные описания ресурсов в конфигурацию samba:

    sudo net conf import homes.txt homes
    sudo net conf import share.txt share

Эти же действия можно выполнить командами без использования файлов для сохранения данных, например, для создания разделяемого ресурса homes:

sudo net conf addshare "homes" "/home/%U" "writeable=y" "guest_ok=N" "Home Directories"
sudo net conf setparm "homes" "browseable" "No"
sudo net conf setparm "homes" "valid users" "%S"
и т.д.

После внесения изменений в registry изменения применяются автоматически, и, в отличие от работы с конфигурационным файлом, службу samba перезапускать не нужно.

Создание домашних каталогов

Для тестирования можно создать на сервере условный домашний каталог пользователя admin (т.е. администратора FreeIPA, создаваемого "по умолчанию"):

sudo mkhomedir_helper admin

Подключение/монтирование ресурса с клиентской доменной машины

После выполнения указанных выше действий ресурс (в данном примере - автоматически монтируемый домашний каталог пользователя см. специальный ресурс homes) будет доступен на клиентской машине после получения билета Kerberos:

  • В актуальных обновлениях Astra Linux Special Edition использовать опцию --use-kerberos:
    kinit admin
    smbclient --use-kerberos=required //ipa0.ipadomain.ru/admin
    При этом будет запрошен пароль, который будет игнорироваться. Для исключения запроса пароля использовать опцию -N.
  • В более ранних обновлениях использование билета Kerberos задается опцией -k:
    kinit admin
    smbclient -k //ipa0.ipadomain.ru/admin
    В зависимости от используемой версии samba может быть запрошен пароль. Для исключения запроса пароля в дополнение к опции -k использовать опцию -N.
Монтирование разделяемых ресурсов c аутентификацией Kerberos также будет доступно при наличии билета Kerberos (опции монтирования cruid, user, sec). Если монтирование выполнятся от имени суперпользователя (с использованием sudo), то билет также должен быть получен с использованием sudo. Примеры команд получения билета и монтирования:
  • С использованием подписания пакетов (параметр krb5i):

    Для использования опции монтирования sec=krb5i на сервере может понадобиться установить параметр:

    server signing = required
    CODE


    sudo 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.

  1. Действия на контроллере домена:
    1. Если при установке контроллера домена не была выполнена установка и настройка службы samba, то установить необходимые компоненты, выполнив на контроллере домена следующие команды:

      sudo kinit admin
      sudo ipa-adtrust-install --add-sids --add-agents

    2. Получить на контроллере домена идентификатор безопасности (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
      CODE

      Идентификатор SID for domain понадобится на сервере samba, чтобы указать службе samba в каком домене работать;

    3. Получить диапазон идентификаторов домена:

      sudo ipa idrange-find --raw

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

      ---------------
      1 range matched
      ---------------
        cn: IPADOMAIN.RU_id_range
        ipabaseid: 72000
        ipaidrangesize: 1000000
        ipabaserid: 1000
        ipasecondarybaserid: 100000000
        iparangetype: ipa-local
      ---------------------------------
      Количество возвращённых записей 1
      ---------------------------------
      CODE

      для настройки понадобятся значения полей  ipabaseid и ipaidrangesize, точнее понадобится значение первого поля ipabaseid (начало диапазона идентификаторов) и значение последнего идентификатора, которое вычисляется как:

      ipabaseid + ipaidrangesize -1

  2. Настройка файлового сервера. Выполняется на файловом сервере.
    1. Рекомендуется назначить файловому серверу статический IP-адрес (см. Настройка сетевых подключений в Astra Linux).
    2. Ввести компьютер в домен. См. Ввод Astra Linux в домен FreeIPA.

    3. Установить на файловом сервере необходимые пакеты:

      Особенности установки пакета 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. В актуальных обновлениях необходимые для регистрации служб инструменты устанавливаются при вводе компьютера в домен.
  3. Регистрация и настройка доменной службы. Выполняется либо на контроллере домена, либо на файловом сервере с установленным пакетом freeipa-admintools. Зарегистрировать службу и предоставить этой службе права на чтение паролей:

    1. Получить билет Kerberos администратора домена:

      kinit admin

    2. Зарегистрировать службу (здесь и далее: cifs - фиксированное доменное имя службы для службы samba, samba.ipadomain.ru - имя компьютера в домене, на котором расположена служба):

      ipa service-add cifs/samba.ipadomain.ru

    3. Создать структуру ролей и привилегий для службы (требуется только при настройке первого сервер, следующие серверы добавляются в созданную структуру):

      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"

    4. Добавить сервер в созданную структуру ролей и привилегий:

      ipa role-add-member "CIFS server" --services=cifs/samba.ipadomain.ru

  4. Создание каталога для разделяемого файлового ресурса. Выполняется на файловом сервере. Например:
    1. Создать каталог для разделяемого файлового ресурса (например, каталог /srv/share/) и назначить ему владельца "никто:не_группа" (служебный пользователь nobody и служебная группа пользователей nogroup):

      sudo mkdir -p /srv/share
      sudo chown nobody:nogroup /srv/share

    2. Получить и сохранить таблицу ключей для службы (требуются права суперпользователя):

      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 — имя файла, в котором будут сохранены полученные ключи;

    3. Настроить конфигурацию службы 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);

    4. Настроить идентификатор безопасности домена:

      sudo net setdomainsid <SID>
      где <SID> — сохраненный ранее идентификатор безопасности;

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

      sudo systemctl restart smbd winbind

Разграничение доступа к разделяемым ресурсам в домене

См. Настройка доступа к файловым объектам разделяемого ресурса.

Простые проверки

Неприменимо на компьютерах, являющихся контроллерами домена с доверительными отношениями, использующими samba. См.  Особенности работы связки FreeIPA - samba.

Независимо от места размещения сервера samba (на контроллере домена или на клиенте) на любом клиентском компьютере, входящем в домен, должна успешно выполняться последовательность команд:

  1. Получить билет любого доменного пользователя:

    kinit <имя_доменного_пользователя>

  2. Получить список разделяемых ресурсов сервера samba предъявив полученный билет Kerberos:

    1. В Astra Linux Special Edition 1.8:
      smbclient -N --use-kerberos=required -L <имя_сервера>
    2. В более ранних обновлениях:

      smbclient -kL <имя_сервера>

  3. После удаления билетов Kerberos в доступе к серверу samba должно быть отказано. Для проверки:

    1. Удалить билеты Kerberos выполнив команду:

      kdestroy -A

    2. Попытаться получить доступ:

      1. В актуальных обновлениях Astra Limux Special Edition:
        smbclient --use-kerberos=required -L <имя_сервера>
      2. В более ранних обновлениях:

        smbclient -kL <имя_сервера>

Ошибки и предупреждения

  • Ошибка соединения 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  не влияет.