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

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

ПредупреждениеПо итогам написания данной статьи файловая система NFS категорически не рекомендуется к использованию.
  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6
    • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
    • Astra Linux Special Edition РУСБ.10015-17
    • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
    • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
    • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
    • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
    • Astra Linux Special Edition РУСБ.10015-16 исп. 1
    • Astra Linux Special Edition РУСБ.10015-16 исп. 2
    • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
    • Astra Linux Common Edition 2.12



    Предупреждение

    "В случае необходимости использования мандатного управления доступом на сетевых дисках, их монтирование в файловую систему ОС должно осуществляться только с использованием файловой системы CIFS, поддерживающей расширенные (в т.ч. мандатные) атрибуты пользователей;"

    "Руководство по КСЗ. Часть 1 РУСБ.10015-01 97 01-1" п. 17.3. "Условия применения"

    ОС СН Ленинград 1.6



    Предупреждение

    При настройках по умолчанию авторизация аутентификация через Kerberos в файловой системе NFS осуществляется:

    • для монтирования - от имени компьютера;
    • для доступа к данным - от имени клиента;

    . Таким образом, монтирование сетевого ресурса NFS может быть выполнено любым пользователем , авторизованным на этом компьютереили процессом. С одной стороны, это позволяет автоматически монтировать общие разделяемые ресурсы до входа первого пользователя, но, с другой стороны, может стать причиной утечки или повреждения данных при некорректно настроенных правах доступа.

    Предупреждение
    В статье рассматривается использование NFSv4. Более старые версии использовать не рекомендуется, так как они подвержены известным уязвимостям и и некорректно работают при использовании аутентификации Kerberos-авторизации.

    При некорректно настроенных параметрах авторизации подключения NFS может выполнять монтирование с произвольным понижением уровня протокола (NFSv3 вместо NFSv4) и/или изменением типа авторизации аутентификации (авторизация аутентификация SYS вместо Kerberos), что также является источником потенциальных уязвимостей.


    Описание стенда

    • контроллер домена FreeIPA:
      • имя сервера ipa0.ipadomain0.ru;
      • имя администратора admin;
      • IP-адрес контролера контроллера домена не используется, так как подразумевается наличие настроенной службы DNS;
    • клиент домена
      • имя клиента host0.ipadomain0.ru;

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

    Информация
    См. также статью Сетевая файловая система NFS
    1. Установить пакет nfs-kernel-server:

      Command
      sudo apt install nfs-kernel-server

      Исправить порядок запуска служб после перезагрузки, добавив в файл /etc/systemd/system/multi-user.target.wants/nfs-server.service в секцию [Unit] строки:

      Command
      [Unit]
      After=rpcbind.service
      Requires=rpcbind.service

      Команды:

      Command
      sudo sed -i "s/\[Unit\]/[Unit]\nAfter=rpcbind.service/" /etc/systemd/system/multi-user.target.wants/nfs-server.service
      sudo sed -i "s/\[Unit\]/[Unit]\nRequires=rpcbind.service/" /etc/systemd/system/multi-user.target.wants/nfs-server.service

      Устранить ошибки создания БД nfs/nfsdcltrack. Команды (первый запуск команды sudo nfsdcltrack -d init при этом завершится ошибкой):

      Command
      sudo mkdir -p /var/lib/nfs/nfsdcltrack
      sudo chmod 755 /var/lib/nfs/nfsdcltrack
      sudo nfsdcltrack -d init
      sudo chmod 660 /var/lib/nfs/nfsdcltrack/main.sqlite
      sudo chown statd /var/lib/nfs/nfsdcltrack/main.sqlitesudo nfsdcltrack -d init


    2. Включить запуск всех служб, необходимых для авторизации аутентификации Kerberos:

      Command

      sudo sed -i 's/^[[:space:]]*NEED_

      GSSD

      SVCGSSD[[:space:]]*=.*/NEED_

      GSSD

      SVCGSSD="yes"/' /etc/default/nfs-kernel-

      common

      server

      sudo sed -i 's/^[[:space:]]*NEED_IDMAPDGSSD[[:space:]]*=.*/NEED_IDMAPDGSSD=yes/' /etc/default/nfs-common
      sudo sed -i 's/^[[:space:]]*NEED_SVCGSSDIDMAPD[[:space:]]*=.*/NEED_SVCGSSDIDMAPD="yes"/' /etc/default/nfs-kernel-server
      sudo sed -i 's/^[[:space:]]*RPCSVCGSSDOPTS[[:space:]]*=.*/RPCCSVSGSSDOPTS="-vvvv"/' /etc/default/nfs-kernel-servercommon


    3. Зарегистрировать службу nfs/<имя_сервера> Зарегистрировать службу nfs/ipa0.ipadomain0.ru@IPADOMAIN0.RU в домене и получить соответствующую запись в таблицу ключей, для чего:

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

        Command
        kinit admin

      ipa service-add nfs/ipa0.ipadomain0.ru@IPADOMAIN0.RU
      sudo kinit admin

      1. Зарегистрировать службу:

        Command
        ipa service-add nfs/`hostname`


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

        Command
        sudo kinit admin


        Информация
        Если билет Kerberos был получен до регистрации службы, то после регистрации службы он должен быть обновлен (получен повторно).


      3. Действуя от имени суперпользователя получить и сохранить таблицу ключей службы:

        Command
        sudo ipa-getkeytab -
      s ipa0
      1. s ipa0.ipadomain0.ru -
      p nfs/ipa0.ipadomain0.ru@IPADOMAIN0.RU
      1. p nfs/`hostname` -k /etc/krb5.keytab


    4. Опционально:
      1. Разрешить слабые защитные алгоритмы для старых клиентов, добавив запись allow_weak_crypto = true в секцию [libdefaults] файла /etc/krb5.conf;

      2. Добавить защитные алгоритмы в каталог домена (12345678 - будет запрошен пароль администратора каталога):

        Command
        ldapmodify -x -D "cn=directory manager" -w 12345678 W -h ipa0.ipadomain0.ru << EOT
        dn: cn=IPADOMAIN0.RU,cn=kerberos,dc=ipadomain0,dc=ru
        changetype: modify
        add: krbSupportedEncSaltTypes
        krbSupportedEncSaltTypes: des-cbc-crc:normal
        EOT
        ldapmodify -x -D "cn=directory manager" -w 12345678 W -h ipa0.ipadomain0.ru << EOT
        dn: cn=IPADOMAIN0.RU,cn=kerberos,dc=ipadomain0,dc=ru
        add: krbSupportedEncSaltTypes
        krbSupportedEncSaltTypes: des-cbc-crc:special
        EOT
        ldapmodify -x -D "cn=directory manager" -w 12345678 W -h ipa0.ipadomain0.ru << EOT
        dn: cn=IPADOMAIN0.RU,cn=kerberos,dc=ipadomain0,dc=ru
        add: krbDefaultEncSaltTypes
        krbDefaultEncSaltTypes: des-cbc-crc:special
        EOT


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

      Command
      sudo systemctl daemon-reload
      sudo systemctl restart nfs-kernel-server


    6. Создать разделяемый ресурс (каталог) и разрешить запись в него. Для примера используем специально созданный каталог /export:

      Command

      sudo mkdir /export
      sudo chmod 777 /export


      Разделяемые ресурсы определяются в конфигурационном файле /etc/exports. Подробно про возможные параметры разделяемых ресурсов см. man exports.

      Предупреждение
      В NFSv4 все сетевые ресурсы предоставлены единым деревом каталогов. Соответственно, в списке разделяемых ресурсов один из них должен быть обозначен как корневой. Для этого используется параметр fsid=0. Отсутсвие Отсутствие или некорректное определение корневого ресурса ведёт к неработоспособности смонтированных примонтированных ресурсов, и, в случае монтирования домашних каталогов, к невозможности входа пользователей.

      Пример файла с ресурсами (экспортируется домашний каталог пользователей /home и созданный каталог /export):

      Блок кода
      / *(rw,fsid=0,no_subtree_check,sec=krb5:krb5i:krb5p)
      /home gss/krb5i(rw,sync,no_subtree_check)
      /export *(rw,sync,no_subtree_check,no_root_squash,sec=krb5:krb5i:krb5p)

      В приведённом приведенном примере первый ресурс - корневой, и использованы два альтернативных синтаксиса для "подчинённых" ресурсов NFSv4 с авторизацией аутентификацией Kerberos.
      В целях обеспечения безопасности в разделяемых ресурсах используется технология подмены идентификатора суперпользователя (root_squash). При этом операции, инициированные суперпользователем, выполняются от имени nobody:nogroup или от имени Kerberos-пользователя (См. ниже Настройка клиентской аутентификации Kerberos-авторизации). Об этом ограничении следует помнить планируя настройку прав доступа в разделяемых ресурсах.

      Предупреждение

      Для того, чтобы в "подчинённыеподчиненные" ресурсы были открыты на была разрешена запись, запись должна быть разрешена в корневой ресурс также должен быть открыт на запись.
      Для того, чтобы корректно работала Kerberos-авторизация при доступе к "подчинннымподчиненным" ресурсам корректно работала аутентификация Kerberos, корневой ресурс должен использовать такой же тип авторизацииаутентификации.
      Пареметр Параметр no_root_squash неработоспособен, то есть подмена идентификатора суперпользователя выполняется всегда. См. ниже Настройка клиентской аутентификации Kerberos-авторизации.


    7. Экспортировать ресурс:

      Command
      sudo exportfs -ra


    8. Проверить, что ресурсы экспортированы успешно:

      Command
      Titlesudo showmount -e `hostname`
      Export list for ipa0.ipadomain0.ru:
      /home gss/krb5i
      /export *
      / *


    Якорь
    krb-client

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

    krb-client
    Настройка клиентской аутентификации Kerberos

    См. также Настройка карт автомонтирования в домене FreeIPA

    1. Создать на клиенте каталог для монтирования, например:

      Command
      sudo mkdir /mnt/nfs_mount


    2. Установить пакет nfs-common:

      Command
      sudo apt install nfs-common


    3. Проверить доступность сетевых ресурсов:

      Command
      sudo showmount -e ipa0.idadomain0ipadomain0.ru


    4. Включить запуск всех служб, необходимых для авторизации аутентификации Kerberos:

      Command
      sudo sed -i 's/^[[:space:]]*NEED_SVCGSSDGSSD[[:space:]]*=.*/NEED_SVCGSSD="yes"/' /etc/default/nfs-kernel-servercommon
      sudo sed -i 's/^[[:space:]]*NEED_IDMAPD[[:space:]]*=.*/NEED_IDMAPD="-vvvvyes"/' /etc/default/nfs-kernel-servercommon


    5. Перезагрузить компьютер;
    6. Зарегистрировать NFS-службу клиента и получить ключ этой службы:
      1. Выполнить на СЕРВЕРЕ команды для регистрации NFS-службы КЛИЕНТА:

        Command
        kinit admin
        ipa service-add nfs/host0.ipadomain0.ru@IPADOMAIN0.RU`hostname`


      2. Выполнить на КЛИЕНТЕ команды для получения ключей NFS-службы КЛИЕНТА:

        Command
        sudo kinit admin
        sudo ipa-getkeytab -s ipa0s ipa0.ipadomain0.ru -p nfs/host0.ipadomain0.ru@IPADOMAIN0.RU p nfs/`hostname` -k /etc/krb5.keytab


    7. Выполнить тестовое монтирование с аутентификацией Kerberos-авторизацией:

      Предупреждение
      Для монтирования использовать только протокол NFSv4

      Пример команды:

      Command
      sudo mount.nfs4 ipa0.ipadomain0.ru:/home/ /mnt/export nfs_mount -o sec=krb5i

      Дополнительно при монтировании можно использовать опцию -v для включения отладочной печати.

      Предупреждение

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

      1. Убедиться, что

      :
      1. Ресурсы ресурсы примонтированы именно по запрошенному протоколу (vers=4.2), а не по какому-то другому, и с запрошенной авторизацией запрошенным типом аутентификации (sec=krb5i). Сделать это можно командой:

        Command
        Titlemount -t nfs4
        ipa0.ipadomain0.ru:/export on /export mnt/nfs_mount type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=10.0.2.5,local_lock=none,addr=10.0.2.100,user=admin)

        Если вывод команды пустой - то, скорее всего, монтирование , монтирование либо не было выполнено, либо, что вероятнее, было выполнено с понижением версии протокола (команда mount без параметров покажет все примонтированные ресурсы).

      2. Примонтированные ресурсы отображаются корректно, и в них корректно выполняются операции чтения записи. При монтировании по протоколу NFSv4 для успешного доступа к примонтированному ресурсу требуется наличие действующего пользовательского билета Kerberos. Следует помнить также, что таблицы ключей компьютера (используются для монтирования) обновляются автоматически, а клиентские билеты (используются для доступа к примонтированным ресурсам) автоматически не обновляются.

        Информация

        Если при попытке доступа к ресурсу от имени простого пользователя возникает ошибка вида

        Блок кода
        невозможно открыть каталог '/mnt': Устаревший дескриптор файла

        это, вероятно, говорит о том, что клиентский билет отсутствует. При этом по умолчанию доступ от имени суперпользователя предоставляется без билета Kerberos, но от имени пользователя nobody:nogroup (или с билетом Kerberos от другого имени - см. ниже "Настройка аутентификации Kerberos при подмене идентификатора суперпользователя").


        Пример отображения некорректно примонтированного ресурса при неправильно заданном корневом ресурсе NFSv4:

        Command
        Titlels -l /
        ls: невозможно получить доступ к '/
      export
      1. mnt/nfs_mount': Отказано в доступе
        итого 96
        drwxr-xr-x 2 root root 4096 авг 11 11:54 bin
        drwxr-xr-x 3 root root 4096 авг 4 15:42 boot
        drwxr-xr-x 18 root root 3940 сен 1 14:35 dev
        drwxr-xr-x 127 root root 12288 сен 1 14:35 etc
        d????????? ? ? ? ? ? export
        ...




       

    8. Порядок включения автомонтирования см. в статье Настройка карт автомонтирования в домене FreeIPA.

    Настройка аутентификации Kerberos

    -авторизации

    при

    подмене

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

    Предупреждение

    Это не аутентификация Kerberos -авторизация пользователей в полном смысле, это подмена замена идентификатора суперпользователя идентификатором принципала суперпользователя (как правило, при администрировании доменных компьютеров, это принципал администратора домена).

    1. В файл /etc/default/nfs-common на компьютере-клиенте добавить строчку:

      Блок кода
      GSSDARGS="-n"


    2. В файл /usr/lib/systemd/scripts/nfs-utils_env.sh на компьютере-клиенте добавить строчку:

      Блок кода
      echo GSSDARGS=\"$GSSDARGS\"


    3. Перезапустить сервис:

      Command
      sudo systemctl restart nfs-utils


    Для проверки работы замены идентификатора создать на примонтированном разделяемом ресурсе файл действуя от имени суперпользователя (sudo), и убедиться, что владелец и группа созданного файла - nobody:nogroup.