ディレクトリサーバの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に依存しなくても作れます
mount optionで src=krb5とかするなら「nfsサービスプリンシパル」が必要で、従来の「sec=sys」なら作る必要はありません。
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} /apps
[root@freeipa-nfs ~]# echo "/nfs/home /home none bind 0 0" >> /etc/fstab
[root@freeipa-nfs ~]# echo "/nfs/apps /apps none bind 0 0" >> /etc/fstab
[root@freeipa-nfs ~]# systemctl daemon-reload
[root@freeipa-nfs ~]# mount -a
[root@freeipa-nfs ~]# touch /apps/_apps_ /home/_home_
(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下記コマンドを実行して「auto.direct」マップを修正します。
[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 automountkey-find default auto.master
:
Key: /-
Mount information: auto.direct
:
[root@freeipa ~]# ipa automountkey-del default auto.master --key="/-" <--direct向けのkeyを削除
[root@freeipa ~]# ipa automountmap-del default auto.direct <--そしてauto.dirctマップも削除します
[root@freeipa ~]# ipa automountmap-find default
:
Map: auto.master (auto.masterマップのみ)
:
[root@freeipa ~]# ipa automountmap-add default auto.home <--indirect向けのマップを作る
[root@freeipa ~]# ipa automountmap-add default auto.apps
[root@freeipa ~]# ipa automountmap-find default
:
Map: auto.master (これで3つのマップが存在します)
Map: auto.apps
Map: auto.home
:
[root@freeipa ~]# ipa automountkey-find default auto.master <-- auto.masterのkeyは現在空っぽです. 先ほどキーの「"/-"」を削除したので
(none)
[root@freeipa ~]#
[root@freeipa ~]# ipa automountkey-add default auto.master --key=/home --info=auto.home <-- キー名称「/home」でinfo「auto.home」のエントリーを追加
[root@freeipa ~]# ipa automountkey-add default auto.master --key=/apps --info=auto.apps
(確認)
[root@freeipa ~]# ipa automountkey-find default auto.master <-- 新たに用意したエントリーが見える
:
Key: /apps
Mount information: auto.apps
Key: /home
Mount information: auto.home
:
(新たに用意したauto.home、auto.appsマップに値を入れる)
[root@freeipa ~]# ipa automountkey-add default auto.home --key="*" --info="-sec=krb5,rw freeipa-nfs:/home/&" <-- auto.homeの中身
[root@freeipa ~]# ipa automountkey-add default auto.apps --key="*" --info="-sec=krb5,rw freeipa-nfs:/apps/&"
(確認)
[root@freeipa ~]# ipa automountkey-find default auto.home
Key: *
Mount information: -sec=krb5,rw freeipa-nfs:/home/&
[root@freeipa ~]# ipa automountkey-find default auto.apps
Key: *
Mount information: -sec=krb5,rw freeipa-nfs:/apps/&
[root@freeipa ~]#
(修正なら)
[root@freeipa ~]# ipa automountkey-mod default auto.home --key="*" --info="-sec=krb5,rw freeipa-nfs:/home/&" --newinfo="-sec=sys,rw <ip address>:/home/&"既にFreeIPAの参加に入っているとします。
確認箇所「/etc/nsswitch.conf」で「automount: sss files」とautomountがsssを優先して使うことを確認。
次に、「/etc/sssd/sssd.conf」で[domain/sybyl.local]欄で「automount_provider = ipa」があって、[sssd]欄に「autofs」があることを確認します
:
[domain/sybyl.local]
:
id_provider = ipa
automount_provider = ipa <--これがあるか
:
[sssd]
services = nss, pam, ssh, sudo, autofs <--このautofsがあるか
domains = sybyl.local
:FreeIPAsサーバからマップの取得が上手く行っているかは「automount -m」で確認します
[root@freeipa-client ~]# systemctl restart sssd
[root@freeipa-client ~]# automount -m
:
Mount point: /apps
source(s):
instance type(s): sss
map: auto.apps
* | -sec=krb5,rw freeipa-nfs:/apps/&
Mount point: /home
source(s):
instance type(s): sss
map: auto.home
* | -sec=krb5,rw freeipa-nfs:/home/&
[root@freeipa-client ~]#ここまで確認出来たらautofsを開始させます
[root@freeipa-client ~]# systemctl enable autofs --now「indirect」で作ると「ls /home」としても全部が見えません。「ls /home/saber」として初めて見えますが、「/home/saber」以外は見えません。
「/apps」も同じで「ls /apps」では何も表示されません。「ls /apps/src」とか「ls /apps/relion-4.0.2」で初めてmountされ中身が見えます。
この方式の利点は、nfsクライアントに既にアカウントが合って「/home/fgo」とか存在しても「/home」がマウントされて消えないって事。
そのマシンでしか存在しない/home/ABCを消さなない。見えなくさせないようにするためのもの。direct方式は/homeを丸ごとnfs由来の/homeに変えてしまう。
/appsならdirectっでいいのでしょうけど、ライセンスアプリが/home/配下にあってライセンスサーバがその/homeにあるライセンスを見ている最中に、directで見えなくなってしまうと問題ですからね。
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/」で調整してみる