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

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

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

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

По итогам написания данной статьи файловая система NFS категорически не рекомендуется к использованию.

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

  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 1.6

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

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

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

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

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

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

См. также статью NFS
  1. Установить пакет nfs-kernel-server:

    sudo apt install nfs-kernel-server

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

    [Unit]
    After=rpcbind.service
    Requires=rpcbind.service
    Команды:
    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

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

    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.sqlite
    sudo nfsdcltrack -d init

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

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

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

    kinit admin
    ipa service-add nfs/ipa0.ipadomain0.ru@IPADOMAIN0.RU
    sudo kinit admin
    sudo ipa-getkeytab -s ipa0.ipadomain0.ru -p nfs/ipa0.ipadomain0.ru@IPADOMAIN0.RU -k /etc/krb5.keytab

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

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

      ldapmodify -x -D "cn=directory manager" -w 12345678 -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 -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 -h ipa0.ipadomain0.ru << EOT
      dn: cn=IPADOMAIN0.RU,cn=kerberos,dc=ipadomain0,dc=ru
      add: krbDefaultEncSaltTypes
      krbDefaultEncSaltTypes: des-cbc-crc:special
      EOT

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

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

  8. Создать разделяемый ресурс.
    Подробно про возможные параметры разделяемых ресурсов см. man exports.

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

    Пример файла с ресурсами:

    / *(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-авторизация при доступе к "подчиннным" ресурсам корневой ресурс должен использовать такой же тип авторизации.

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

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

    sudo exportfs -ra

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

    sudo showmount -e `hostname`

    Export list for ipa0.ipadomain0.ru:
    /home gss/krb5i
    /export *
    / *

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

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

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

    sudo apt install nfs-common

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

    sudo showmount -e ipa0.idadomain0.ru

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

    Для монтирования использовать только протокол NFSv4

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

    sudo mount.nfs4 ipa0.ipadomain0.ru:/home/ /export -o sec=krb5i
    Дополнительно при монтировании можно использовать опцию -v для включения отладочной печати.

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

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

      mount -t nfs4

      ipa0.ipadomain0.ru:/export on /export 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:

    ls -l /

    ls: невозможно получить доступ к '/export': Отказано в доступе
    итого 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
    ...

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

Настройка Kerberos-авторизации при подмене идентификатора суперпользователя

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

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

    GSSDARGS="-n"

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

    echo GSSDARGS=\"$GSSDARGS\"
  3. Перезапустить сервис:

    sudo systemctl restart nfs-utils



  • Нет меток