ディレクトリサーバのFreeIPA、ログインノード、計算ノード、ストレージノードな構成を考える.
ログインノード、計算ノードにnfsでストレージを供給するストレージサーバ、構成はxfs, zfs, btrfs, cephfs, BeeGFSなどいろいろあるが、FreeIPAでのnfsサーバを作ってみる.

やっていることはsamba/NFSと同じくサービス記述子nfsをもつサービスプリンシパルを持たせてkerberosによるnfsかな.
もちろんこの操作をしなくてもsysな従来からのuidベースのnfsとしてFreeIPA関係なく構築もできるけどね
参照先 https://blog.delouw.ch/2015/03/14/using-ipa-to-provide-automount-maps-for-nfsv4-home-directories/
様 thanks
nfsサーバには RockyLinux 9.6 を使ってます
[root@freeipa-nfs ~]# cat /etc/redhat-release
Rocky Linux release 9.6 (Blue Onyx)
[root@freeipa-nfs ~]# getenforce
Enforcing
[root@freeipa-nfs ~]#FreeIPAのclientパッケージを入れます
[root@freeipa-nfs ~]# dnf install ipa-client -ychronyの設定を施します
[root@freeipa-nfs ~]# echo "server c.sybyl.local" > /etc/chrony.conf
[root@freeipa-nfs ~]# systemctl restart chronydっで「ipa-client-install」コマンドでfreeipaの傘下に入ります.
[root@freeipa-nfs ~]# ipa-client-install --no-ntp <-- chronyの設定があるのでfreeipaでのntp設定は不要
This program will set up IPA client.
Version 4.12.2
Discovery was successful!
Client hostname: freeipa-nfs.sybyl.local
Realm: SYBYL.LOCAL
DNS Domain: sybyl.local
IPA Server: freeipa.sybyl.local
BaseDN: dc=sybyl,dc=local
Continue to configure the system with these values? [no]: yes <-- この内容で参加手続きを進めるので[yes]
Skipping chrony configuration
User authorized to enroll computers: admin <--- FreeIPAサーバの登録管理者admin
Password for admin@SYBYL.LOCAL: <--- 登録管理者adminのパスワードを入力
Successfully retrieved CA cert
Subject: CN=Certificate Authority,O=SYBYL.LOCAL
Issuer: CN=Certificate Authority,O=SYBYL.LOCAL
Valid From: 2025-09-27 19:27:06+00:00
Valid Until: 2045-09-27 19:27:06+00:00
Enrolled in IPA realm SYBYL.LOCAL
Created /etc/ipa/default.conf
Configured /etc/sssd/sssd.conf
Systemwide CA database updated.
Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub
Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub
Could not update DNS SSHFP records.
SSSD enabled
Configured /etc/openldap/ldap.conf
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config.d/04-ipa.conf
Configuring sybyl.local as NIS domain.
Configured /etc/krb5.conf for IPA realm SYBYL.LOCAL
Client configuration complete.
The ipa-client-install command was successful
[root@freeipa-nfs ~]#これでkrb5.keytabが貰える
[root@freeipa-nfs ~]# klist -ke
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes256-cts-hmac-sha384-192)
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes128-cts-hmac-sha256-128)
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes256-cts-hmac-sha1-96)
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes128-cts-hmac-sha1-96)
[root@freeipa-nfs ~]#だが、、nfsサービスプリンシパルがないとnfsサーバにはなれないので、その取得を次に行う. 正確には krb5 で繋ぐnfsサーバでしょうか. 普通のnfsはfreeipaに依存しなくても作れます
freeipaサーバにて作業します
まずはkrbチケットを貰って
[root@freeipa ~]# kinit admin
Password for admin@SYBYL.LOCAL: <--- 登録管理者adminのパスワードを入力
[root@freeipa ~]#nfsサービスプリンシパルを作ります
[root@freeipa ~]# ipa service-add nfs/freeipa-nfs.sybyl.local
-------------------------------------------------------
Added service "nfs/freeipa-nfs.sybyl.local@SYBYL.LOCAL"
-------------------------------------------------------
Principal name: nfs/freeipa-nfs.sybyl.local@SYBYL.LOCAL
Principal alias: nfs/freeipa-nfs.sybyl.local@SYBYL.LOCAL
Managed by: freeipa-nfs.sybyl.local
[root@freeipa ~]#これで freeipa-nfs は nfsサービスプリンシパルを持つことになります
そしてFreeIPAサーバからnfsサービスプリンシパルを受け取ります
[root@freeipa-nfs ~]# kinit admin
Password for admin@SYBYL.LOCAL: <--- 登録管理者adminのパスワードを入力
[root@freeipa-nfs ~]# ipa-getkeytab -p nfs/freeipa-nfs.sybyl.local -k /etc/krb5.keytab
Keytab successfully retrieved and stored in: /etc/krb5.keytab
[root@freeipa-nfs ~]#
(確認)
[root@freeipa-nfs ~]# klist -ke /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes256-cts-hmac-sha384-192)
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes128-cts-hmac-sha256-128)
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes256-cts-hmac-sha1-96)
1 host/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes128-cts-hmac-sha1-96)
1 nfs/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes256-cts-hmac-sha384-192) <-- 以下追加された nfsサービスプリンシパル
1 nfs/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes128-cts-hmac-sha256-128)
1 nfs/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes256-cts-hmac-sha1-96)
1 nfs/freeipa-nfs.sybyl.local@SYBYL.LOCAL (aes128-cts-hmac-sha1-96)
[root@freeipa-nfs ~]#次にnfsとして供出する場所を準備します. ここでは/etc/sdbを/nfsとして/nfs/{home,apps}をexortします.
[root@freeipa-nfs ~]# parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) quit
[root@freeipa-nfs ~]# mkfs.xfs -L nfs /dev/sdb1
[root@freeipa-nfs ~]# echo "LABEL=nfs /nfs xfs defaults 0 0" >> /etc/fstab
[root@freeipa-nfs ~]# systemctl daemon-reload
[root@freeipa-nfs ~]# mkdir /nfs && mount -a
[root@freeipa-nfs ~]# df -lTh /nfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 xfs 50G 389M 50G 1% /nfs
[root@freeipa-nfs ~]# mkdir /nfs/{home,apps}
[root@freeipa-nfs ~]# echo "/nfs/home /home none bind 0 0" >> /etc/fstab
[root@freeipa-nfs ~]# systemctl daemon-reload
[root@freeipa-nfs ~]# mount -a
(SELinux対応)
[root@freeipa-nfs ~]# semanage fcontext -a -t home_root_t /nfs/home
[root@freeipa-nfs ~]# restorecon -R /nfs/home
[root@freeipa-nfs ~]# vi /etc/exports
# sec=sys向け
#/nfs 192.168.0.0/255.255.255.0(rw,sync,fsid=0)
#/nfs/home 192.168.0.0/255.255.255.0(rw,sync,nohide)
#/nfs/apps 192.168.0.0/255.255.255.0(rw,sync,nohide)
#
# sec=krb5向け
/nfs gss/krb5(rw,sync,sec=krb5,fsid=0)
/nfs/home gss/krb5(rw,sync,sec=krb5,nohide)
/nfs/apps gss/krb5(rw,sync,sec=krb5,nohide)
[root@freeipa-nfs ~]# systemctl enable nfs-server rpcbind --now
「/dev/sdb1」が「/home」として運用なら
#/ 192.168.0.0/255.255.255.0(rw,sync,fsid=0)
#/home 192.168.0.0/255.255.255.0(rw,sync,nohide)
/ gss/krb5(rw,sync,sec=krb5,fsid=0)
/home gss/krb5(rw,sync,sec=krb5,nohide)とします
あとfirewallに穴をあける
[root@freeipa-nfs ~]# firewall-cmd --add-service=nfs --add-service=rpc-bind --permanent --zone=public
[root@freeipa-nfs ~]# firewall-cmd --reloadfreeipaサーバでの作業です. 「nis automount」のようにautofsが効くようにします
FreeIPAドメインを作った時に既に用意されているlocationがあり、名前は「default」です
[root@freeipa ~]# ipa automountlocation-find
(略
Location: default
(略
[root@freeipa ~]#このlocation「default」で持っているmapは下記のように「auto.master」と「auto.direct」です.
[root@freeipa ~]# ipa automountmap-find default
(略
Map: auto.direct
Map: auto.master
(略
[root@freeipa ~]#っで既定で用意されていたこの「auto.master」と「auto.direct」の中身は「ipa automountkey-find」で読めて
[root@freeipa ~]# ipa automountkey-find default auto.master
-----------------------
1 automount key matched
-----------------------
Key: /-
Mount information: auto.direct
----------------------------
Number of entries returned 1
----------------------------
[root@freeipa ~]# ipa automountkey-find default auto.direct
------------------------
0 automount keys matched
------------------------
----------------------------
Number of entries returned 0
----------------------------
[root@freeipa ~]#っと、「auto.master」の中身は /etc/auto.master で例えれば
/- auto.directな感じ. っでauto.directの中身は今はない状態. っで例えば auto.directマップ に下記のように「/home -rw,sec=krb5 freeipa-nfs:/home」なようにしたければ
/home -rw,sec=krb5 freeipa-nfs:/home
/apps -rw,sec=krb5 freeipa-nfs:/apps下記コマンドを実行します.
[root@freeipa ~]# ipa automountkey-add default auto.direct --key="/home" --info="-rw,sec=krb5 freeipa-nfs:/home" <-- /homeをkrb5で認証させます
[root@freeipa ~]# ipa automountkey-add default auto.direct --key="/apps" --info="-rw,sec=krb5 freeipa-nfs:/apps"
(確認)
[root@freeipa ~]# ipa automountkey-find default auto.direct
------------------------
2 automount keys matched
------------------------
Key: /apps
Mount information: -rw freeipa-nfs:/apps
Key: /home
Mount information: -rw freeipa-nfs:/home
----------------------------
Number of entries returned 2
----------------------------
[root@freeipa ~]#修正の場合は下記のようにします. 下記は「/home -rw,sec=sys freeipa-nfs:/home」にします. 「/apps」はそのままです
[root@freeipa ~]# ipa automountkey-mod default auto.direct --key="/home" --info="-rw freeipa-nfs:/home" --newinfo="-rw,sec=sys freeipa-nfs:/home"
[root@freeipa ~]# ipa automountkey-mod default auto.direct --key="/apps" --info="-rw freeipa-nfs:/apps" --newinfo="-rw,sec=sys freeipa-nfs:/apps"内容を消したい場合は
[root@freeipa ~]# ipa automountkey-del default auto.direct --key="/home"
[root@freeipa ~]# ipa automountkey-del default auto.direct --key="/apps"とします
「/home」とかならこちらで設定した方がいいみたい. /home自体がOSに存在するため, /homeが消えたりするので他のsystemd, pamに影響する可能性があるため
[root@freeipa ~]# ipa automountmap-add default auto.home <--indirect向けの器を作る
[root@freeipa ~]# ipa automountkey-del default auto.master --key="/-" <--direct向けのkeyを削除
[root@freeipa ~]# ipa automountkey-add default auto.master --key=/home --info=auto.home <-- /homeのキーを作ってauto.homeに繋げる
[root@freeipa ~]# ipa automountkey-add default auto.home --key="*" --info="-sec=krb5,rw freeipa-nfs:/home/&" <-- auto.homeの中身krbチケットがないとmountできません.
代わりに「sec=sys」ならuid/gidでmountしてその場所に行けますが、uid/gidが偽装されたら他人の場所に入れてしまいます. 野良のnfs-clientがあれば参照されてしまいます.
よりセキュアなnfs環境となるとこの「sec=krb5」で行うのが望ましいかと.
krbチケットは認証しないと貰えませんから.
あとこちらにするとログイン/ログアウトが遅くなる現象があります。
「/etc/exports」でmount可能なipを指定して阻止、MACアドレス制限とかありますが、偽装可能なので気休めなのかも
クライアント参加時の「ipa-client-install」にオプションとして「--mkhomedir」を加えれば勝手にホームディレクトリを
作ってくれるけど、それがnfs先、しかもautofsでもできるの?確かめていない。
っで、nfsサーバで作る
[root@freeipa-nfs ~]# mkhomedir_helper arcueid 0022 /etc/skel
[root@freeipa-nfs ~]# mkhomedir_helper illya 0022 /etc/skel
[root@freeipa-nfs ~]# ls -l /home
total 0
drwxr-xr-x. 2 arcueid em 62 Apr 29 22:22 arcueid
drwxr-xr-x. 2 illya em 62 Apr 29 22:22 illya
[root@freeipa-nfs ~]#作れなかったら原因はSELinuxかも. 「restorecon -R /home/」で調整してみる