NFS сервер с Kerberos авторизацией

Материал из ALT Linux Wiki

Домен на базе 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-сервера

  1. Установить пакет nfs-server:
    # apt-get install nfs-server
    
  2. Включить автозапуск сервиса:
    # systemctl enable --now nfs-server
    
  3. В файле /etc/idmapd.conf указать домен (realm) и методы (GSS-Methods):
    [General]
    Domain = test.alt
    Local-Realms = TEST.ALT
    
    [Translation]
    Method = nsswitch,static
    GSS-Methods = nsswitch,static
    
  4. В файле /etc/nfs.conf можно запретить некоторые версии NFS:
    [nfsd]
    vers3=n
    vers4=y
    vers4.0=y
    vers4.1=y
    vers4.2=y
    
  5. Создать каталоги, которые будут доступны на удаленном узле, а также назначить группу domain users владельцем каталога share и добавить права на запись для группы domain users:
    # mkdir -p /exports/share/sharedir
    # chgrp -R 'domain users' /exports/share/
    # chmod g+w /exports/share/
    
  6. Добавить строки в файл /etc/exports:
    /exports/share *(rw,sync,no_subtree_check,sec=krb5:krb5i:krb5p)
    
  7. Для применения изменений, внесённых в файл /etc/exports, необходимо выполнить команду:
    # exportfs -ra
    
  8. Создать сервисную запись:
    # kinit administrator@TEST.ALT
    # adcli update --service-name=nfs
    
  9. Перезапустить NFS-сервер:
    # systemctl restart nfs-server
    

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

  1. Включить автозапуск NFS-клиента:
    # systemctl enable --now nfs-client.target
    
  2. Создать точку монтирования и примонтировать файловую систему:
    # 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/ — локальный каталог, куда монтируется удалённый каталог.
  3. Проверить доступность от доменного пользователя:
    $ 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

  1. Добавить сервис, где имя NFS-сервера — nfs.example.test:
    # kinit admin
    # ipa service-add nfs/nfs.example.test
    
  2. Создать пользователя и группу для доступа к 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-сервере

  1. Установить пакет nfs-server:
    # apt-get install nfs-server
    
  2. Включить SECURE_NFS:
    # echo 'SECURE_NFS=yes' >>/etc/sysconfig/nfs
    
  3. Сгенерировать таблицу ключей службы и сохранить в keytab:
    # kinit admin
    # ipa-getkeytab -s ipaserver.example.test -p nfs/nfs.example.test -k /etc/krb5.keytab
    # klist -ket /etc/krb5.keytab
    
  4. Создать каталог с групповыми правами на запись:
    # install -g nfs_users -m 774 -d /exports/test_share/testdir
    
  5. Добавить список экспорта:
    # echo '/exports/test_share *(rw,no_subtree_check,sec=krb5:krb5i:krb5p)' >>/etc/exports
    # exportfs -ra
    
  6. Включить автозапуск сервиса и применить изменения:
    # systemctl enable nfs-server
    # systemctl restart nfs-server
    

На введённом в домен NFS-клиенте

  1. Включить автозагрузку NFS-клиента:
    # systemctl enable --now nfs-client.target
    
  2. Проверить доступность ресурса:
    # showmount -e nfs.example.test
    
  3. Создать и смонтировать каталог NFS:
    # mkdir /mnt/test_share
    # mount -o sec=krb5:krb5i:krb5p,rw nfs.example.test://exports/test_share /mnt/test_share
    
  4. Добавить каталог в fstab:
    # cat >> /etc/fstab << EOF
    nfs.example.test:/exports/test_share /mnt/test_share nfs rw,sec=krb5:krb5i:krb5p,nolock 1 0
    EOF
    
  5. Проверить доступность от доменного пользователя:
    $ 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