ディレクトリサーバの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.1 を使ってます
[root@freeipa-nfs ~]# cat /etc/redhat-release
Rocky Linux release 9.1 (Blue Onyx)
[root@freeipa-nfs ~]# getenforce
Enforcing
[root@freeipa-nfs ~]#
まずはnfsサーバをFreeIPAに参加させます.
ホスト名をきちんとして
[root@freeipa-nfs ~]# hostnamectl set-hostname `hostname -f`
[root@freeipa-nfs ~]# echo `hostname -I` `hostname -A` `hostname -s` >> /etc/hosts
[root@freeipa-nfs ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.149 freeipa-nfs.sybyl.local freeipa-nfs
[root@freeipa-nfs ~]# hostname
freeipa-nfs.sybyl.local
[root@freeipa-nfs ~]#
それからFreeIPAのclientパッケージを入れます
DNSにFreeIPA向けのSRVがあれば--serverとかは不要かも
[root@freeipa-nfs ~]# dnf install ipa-client -y
っで「ipa-client-install」コマンドでfreeipaの傘下に入ります
[root@freeipa-nfs ~]# ipa-client-install --server=freeipa.sybyl.local --domain=sybyl.local
This program will set up IPA client.
Version 4.10.0
Autodiscovery of servers for failover cannot work with this configuration.
If you proceed with the installation, services will be configured to always access the discovered server for (略
Proceed with fixed values and no DNS discovery? [no]: yes <-- dnsmasqがあるので[yes]
Do you want to configure chrony with NTP server or pool address? [no]: <-- FreeIPA-nfsで既にchronyが動いているので[no]
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]
Synchronizing time
No SRV records of NTP servers found and no NTP server or pool address was provided.
Using default chrony configuration.
Attempting to sync time with chronyc.
Time synchronization was successful.
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: 2023-01-04 16:40:05 <-- 時計はUTCの様子
Valid Until: 2043-01-04 16:40:05
Enrolled in IPA realm SYBYL.LOCAL
Created /etc/ipa/default.conf
Configured sudoers in /etc/authselect/user-nsswitch.conf
Configured /etc/sssd/sssd.conf
Configured /etc/krb5.conf for IPA realm SYBYL.LOCAL
Systemwide CA database updated.
Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ecdsa_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
Configuring sybyl.local as NIS domain.
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サーバにはなれないので、その取得を次に行う
freeipaサーバにて作業します
[root@freeipa ~]# kinit
[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 ~]# klist
[root@freeipa-nfs ~]# ipa-getkeytab -s freeipa.sybyl.local -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)
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) mklabelgpt
(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 ~]# mkdir /nfs && mount -a
[root@freeipa-nfs ~]# df -lTh /nfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 xfs 32G 261M 32G 1% /nfs
[root@freeipa-nfs ~]# mkdir /nfs/{home,apps}
(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
/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)
#
/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 --now
あとfirewallに穴をあける
[root@freeipa-nfs ~]# firewall-cmd --add-service=nfs --permanent --zone=public
[root@freeipa-nfs ~]# firewall-cmd --reload
freeipaサーバでの作業です. 「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マップ に/etc/auto.homeな下記のデータを載せるなら.
/home -rw freeipa-nfs:/home
/apps -rw freeipa-nfs:/apps
下記コマンドを実行します.
[root@freeipa ~]# ipa automountkey-add default auto.direct --key="/home" --info="-rw freeipa-nfs:/home"
[root@freeipa ~]# ipa automountkey-add default auto.direct --key="/apps" --info="-rw 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,nfs4,sec=krb5 freeipa-nfs:/home」にします. 「/apps」はそのままです
[root@freeipa ~]# ipa automountkey-mod default auto.direct --key="/home" --info="-rw freeipa-nfs:/home" --newinfo="-rw,sec=krb5 freeipa-nfs:/home"
クライアント参加時の「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/」で調整してみる