|
"В случае необходимости использования мандатного управления доступом на сетевых дисках, их монтирование в файловую систему ОС должно осуществляться только с использованием файловой системы CIFS, поддерживающей расширенные (в т.ч. мандатные) атрибуты пользователей;" "Руководство по КСЗ. Часть 1 РУСБ.10015-01 97 01-1" п. 17.3. "Условия применения" |
При настройках по умолчанию аутентификация через Kerberos в файловой системе NFS осуществляется:
Таким образом, монтирование сетевого ресурса NFS может быть выполнено любым пользователем или процессом. С одной стороны, это позволяет автоматически монтировать общие разделяемые ресурсы до входа первого пользователя, но, с другой стороны, может стать причиной утечки или повреждения данных при некорректно настроенных правах доступа.
При некорректно настроенных параметрах подключения NFS может выполнять монтирование с произвольным понижением уровня протокола (NFSv3 вместо NFSv4) и/или изменением типа аутентификации (аутентификация SYS вместо Kerberos), что также является источником потенциальных уязвимостей. |
| См. также статью Сетевая файловая система NFS |
Установить пакет nfs-kernel-server:
| sudo apt install nfs-kernel-server |
Включить запуск всех служб, необходимых для аутентификации Kerberos:
sudo sed -i 's/^[[:space:]]*NEED_SVCGSSD[[:space:]]*=.*/NEED_SVCGSSD="yes"/' /etc/default/nfs-kernel-server sudo sed -i 's/^[[:space:]]*NEED_GSSD[[:space:]]*=.*/NEED_GSSD=yes/' /etc/default/nfs-commonsudo sed -i 's/^[[:space:]]*NEED_IDMAPD[[:space:]]*=.*/NEED_IDMAPD=yes/' /etc/default/nfs-common |
Зарегистрировать службу nfs/<имя_сервера> в домене и получить соответствующую запись в таблицу ключей, для чего:
Получить билет Kerberos администратора домена:
| kinit admin |
Зарегистрировать службу:
| ipa service-add nfs/`hostname` |
Получить билет Kerberos администратора домена для суперпользователя:
| sudo kinit admin |
| Если билет Kerberos был получен до регистрации службы, то после регистрации службы он должен быть обновлен (получен повторно). |
Действуя от имени суперпользователя получить и сохранить таблицу ключей службы:
| sudo ipa-getkeytab -s ipa0.ipadomain0.ru -p nfs/`hostname` -k /etc/krb5.keytab |
Добавить защитные алгоритмы в каталог домена (будет запрошен пароль администратора каталога):
| ldapmodify -x -D "cn=directory manager" -W -H ldap://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 -H ldap://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 -H ldap://ipa0.ipadomain0.ru << EOT dn: cn=IPADOMAIN0.RU,cn=kerberos,dc=ipadomain0,dc=ru add: krbDefaultEncSaltTypes krbDefaultEncSaltTypes: des-cbc-crc:special EOT |
Перезапустить службы:
| sudo systemctl daemon-reload sudo systemctl restart nfs-kernel-server |
Создать разделяемый ресурс (каталог) и разрешить запись в него. Для примера используем специально созданный каталог /export:
sudo mkdir /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). Об этом ограничении следует помнить планируя настройку прав доступа в разделяемых ресурсах.
Для того, чтобы в "подчиненные" ресурсы была разрешена запись, запись должна быть разрешена в корневой ресурс. |
Экспортировать ресурс:
| sudo exportfs -ra |
Проверить, что ресурсы экспортированы успешно:
| Export list for ipa0.ipadomain0.ru: /home gss/krb5i /export * / * |
См. также Настройка карт автомонтирования в домене FreeIPA
Создать на клиенте каталог для монтирования, например:
| sudo mkdir /mnt/nfs_mount |
Установить пакет nfs-common:
| sudo apt install nfs-common |
Проверить доступность сетевых ресурсов:
| sudo showmount -e ipa0.ipadomain0.ru |
Включить запуск всех служб, необходимых для аутентификации Kerberos:
| sudo sed -i 's/^[[:space:]]*NEED_GSSD[[:space:]]*=.*/NEED_SVCGSSD="yes"/' /etc/default/nfs-common sudo sed -i 's/^[[:space:]]*NEED_IDMAPD[[:space:]]*=.*/NEED_IDMAPD="yes"/' /etc/default/nfs-common |
Выполнить на СЕРВЕРЕ команды для регистрации NFS-службы КЛИЕНТА:
| kinit admin ipa service-add nfs/`hostname` |
Выполнить на КЛИЕНТЕ команды для получения ключей NFS-службы КЛИЕНТА:
| sudo kinit admin sudo ipa-getkeytab -s ipa0.ipadomain0.ru -p nfs/`hostname` -k /etc/krb5.keytab |
Выполнить тестовое монтирование с аутентификацией Kerberos:
| Для монтирования использовать только протокол NFSv4 |
Пример команды:
| sudo mount.nfs4 ipa0.ipadomain0.ru:/home/ /mnt/nfs_mount -o sec=krb5i |
Дополнительно при монтировании можно использовать опцию -v для включения отладочной печати.
После того, как команда монтирования выполнилась без ошибок:
|
Это не аутентификация Kerberos в полном смысле, это замена идентификатора суперпользователя идентификатором принципала суперпользователя (как правило, при администрировании доменных компьютеров, это принципал администратора домена). |
В файл /etc/default/nfs-common на компьютере-клиенте добавить строчку:
GSSDARGS="-n" |
В файл /usr/lib/systemd/scripts/nfs-utils_env.sh на компьютере-клиенте добавить строчку:
echo GSSDARGS=\"$GSSDARGS\" |
Перезапустить сервис:
| sudo systemctl restart nfs-utils |
Для проверки работы замены идентификатора создать на примонтированном разделяемом ресурсе файл действуя от имени суперпользователя (sudo), и убедиться, что владелец и группа созданного файла - nobody:nogroup.