Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 52 Следующий »

Исходные данные

Предполагается, что уже установлен сервер FreeIPA (контроллер домена). При стандартной установке на таком сервере уже установлены службы samba и winbind.


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

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

  3. Импортировать созданные описания ресурсов в конфигурацию 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:

kinit admin
smbclient -k //ipa0.ipadomain.ru/admin
Монтирование разделяемых ресурсов а аутентификацией Kerberos также будет доступно при наличии билета Kerberos (опции монтирования cruid, user, sec):
sudo mount -t cifs //ipa0.ipadomain.ru/share /media/share -o cruid=admin,user=admin,sec=krb5i

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

server signing = required

или (устаревший вариант):

sudo mount -t cifs //ipa0.ipadomain.ru/share /media/share -o cruid=admin,user=admin,sec=krb5

Отдельный сервер samba

В примере выше сервер samba запускается непосредственно на контроллере домена. Далее рассматриваются действия по запуску файлового сервера samba с аутентификацией через доменную службу Kerberos на отдельном компьютере, введенном в домен FreeIPA.

  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

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

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

      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

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

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

      Для установки пакета 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 могут быть выполнены на клиенте (может использоваться для клиента - администратора домена);

  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 (на контроллере домена или на клиенте) на любом компьютере, входящем в домен, должна успешно последовательность команд:

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

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

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

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

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

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

      kdestroy -A

    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  не влияет;
  • Нет меток