NFS сервер с Kerberos авторизацией
Домен на базе Samba DC
Исходные данные стенда
- Домен test.alt (Альт Сервер 11.1, dc.test.alt)
- NFS-сервер (Альт Сервер 11.1, nfs-server.test.alt) - включен в домен
- NFS-клиент (Альт Рабочая станция 11.1, nfs-client.test.alt) - включен в домен
Внимание!
- обязательна синхронизация времени на всех хостах;
- обязательно наличие прямой (А) и обратной (PTR) записей для NFS-сервера и клиента: Samba по умолчанию не создает обратную зону.
Настройка NFS-сервера
- Установить пакет nfs-server:
# apt-get install nfs-server - Включить автозапуск сервиса:
# systemctl enable --now nfs-server - В файле /etc/idmapd.conf указать домен (realm) и методы (GSS-Methods):
[General] Domain = test.alt Local-Realms = TEST.ALT [Translation] Method = nsswitch,static GSS-Methods = nsswitch,static
- В файле /etc/nfs.conf можно запретить некоторые версии NFS:
[nfsd] vers3=n vers4=y vers4.0=y vers4.1=y vers4.2=y
- Создать каталоги, которые будут доступны на удаленном узле, а также назначить группу domain users владельцем каталога share и добавить права на запись для группы domain users:
# mkdir -p /exports/share/sharedir # chgrp -R 'domain users' /exports/share/ # chmod g+w /exports/share/
- Добавить строки в файл /etc/exports:
/exports/share *(rw,sync,no_subtree_check,sec=krb5:krb5i:krb5p)
- Для применения изменений, внесённых в файл /etc/exports, необходимо выполнить команду:
# exportfs -ra - Создать сервисную запись:
# kinit administrator@TEST.ALT # adcli update --service-name=nfs
- Перезапустить NFS-сервер:
# systemctl restart nfs-server
Настройка NFS-клиента
- Включить автозапуск NFS-клиента:
# systemctl enable --now nfs-client.target - Создать точку монтирования и примонтировать файловую систему:
# mkdir /mnt/nfs # mount.nfs4 -o sec=krb5:krb5i:krb5p,rw nfs-server.test.alt://exports/share /mnt/nfs/
где:
- mount.nfs4 — использовать протокол NFS версии 4;
- -o sec=krb5:krb5i:krb5p,rw — монтировать с опциями безопасности Kerberos и правом на чтение и запись;
- nfs-server.test.alt — DNS-имя NFS-сервера;
- exports/share — путь к общему ресурсу на сервере;
- /mnt/nfs/ — локальный каталог, куда монтируется удалённый каталог.
- Проверить доступность от доменного пользователя:
$ touch /mnt/nfs/sharedir/myfile $ ll /mnt/nfs/sharedir/myfile -rw-r--r-- 1 petrov domain users 0 мая 28 20:30 /mnt/nfs/sharedir/myfile
Примечание: Если замечено, что служба rpc-svcgssd.service зависает либо утилизирует весь CPU, есть смысл в УЗ сервера в домене в аттрибуте userAccountControl вместо значения 0x1000 (4096), вписать 0x2001000 (33558528).
Домен на базе FreeIPA
На DC FreeIPA
- Добавить сервис, где имя NFS-сервера — nfs.example.test:
# kinit admin # ipa service-add nfs/nfs.example.test
- Создать пользователя и группу для доступа к NFS:
# echo 1 | ipa user-add test01 --first test --last 01 --password # ipa group-add nfs_users --desc="NFS users" # ipa group-add-member nfs_users --users=test01
На введённом в домен NFS-сервере
- Установить пакет nfs-server:
# apt-get install nfs-server - Включить SECURE_NFS:
# echo 'SECURE_NFS=yes' >>/etc/sysconfig/nfs - Сгенерировать таблицу ключей службы и сохранить в keytab:
# kinit admin # ipa-getkeytab -s ipaserver.example.test -p nfs/nfs.example.test -k /etc/krb5.keytab # klist -ket /etc/krb5.keytab
- Создать каталог с групповыми правами на запись:
# install -g nfs_users -m 774 -d /exports/test_share/testdir - Добавить список экспорта:
# echo '/exports/test_share *(rw,no_subtree_check,sec=krb5:krb5i:krb5p)' >>/etc/exports # exportfs -ra
- Включить автозапуск сервиса и применить изменения:
# systemctl enable nfs-server # systemctl restart nfs-server
На введённом в домен NFS-клиенте
- Включить автозагрузку NFS-клиента:
# systemctl enable --now nfs-client.target - Проверить доступность ресурса:
# showmount -e nfs.example.test - Создать и смонтировать каталог NFS:
# mkdir /mnt/test_share # mount -o sec=krb5:krb5i:krb5p,rw nfs.example.test://exports/test_share /mnt/test_share
- Добавить каталог в fstab:
# cat >> /etc/fstab << EOF nfs.example.test:/exports/test_share /mnt/test_share nfs rw,sec=krb5:krb5i:krb5p,nolock 1 0 EOF
- Проверить доступность от доменного пользователя:
$ touch /mnt/nfs/test_share/myfile $ ll /mnt/nfs/test_share/myfile -rw-r--r-- 1 test01 ipausers 0 мая 29 14:30 /mnt/nfs/test_share/myfile