AlmaLinux9.2でnfsサーバを構築する

AlmaLinux9.2にnfsサーバおよびクライアントの設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/623bc35e-5702-8f6a-ce2d-4b7979ad9f7a.png)

# 環境
AlmaLinux release 9.2 (Turquoise Kodkod)
rpcbind-1.2.6-5.el9.x86_64
nfs-utils-2.5.4-18.el9.x86_64

※firewalldとselinuxは停止済み



# 1.nfsパッケージインストール
パッケージインストール

```text:install
# dnf install -y rpcbind nfs-utils
依存関係が解決しました。
============================================================================================================
 パッケージ                  アーキテクチャー      バージョン             リポジトリー                サイズ
============================================================================================================
インストール:
 nfs-utils                   x86_64                1:2.5.4-18.el9         local_dvd_BaseOS            426 k
 rpcbind                     x86_64                1.2.6-5.el9            local_dvd_BaseOS             56 k
依存関係のインストール:
 gssproxy                    x86_64                0.8.4-4.el9            local_dvd_BaseOS            108 k
 keyutils                    x86_64                1.6.3-1.el9            local_dvd_BaseOS             71 k
 libev                       x86_64                4.33-5.el9             local_dvd_BaseOS             52 k
 libnfsidmap                 x86_64                1:2.5.4-18.el9         local_dvd_BaseOS             60 k
 libverto-libev              x86_64                0.3.2-3.el9            local_dvd_BaseOS             13 k
 sssd-nfs-idmap              x86_64                2.8.2-2.el9            local_dvd_BaseOS             41 k

トランザクションの概要
============================================================================================================
インストール  8 パッケージ

《中略》
完了しました!
```


# 2.ディレクトリ作成
共有用ディレクトリを作成します。

```text:ディレクトリ作成
# mkdir /share
# mkdir /share/nfs01
```

:::note warn
複数人で利用するNFSサーバの場合、ディスクフルリスク回避のためにもルートボリューム以外のディスクを準備し使用するようにしてください。
:::


# 3.nfs設定(/etc/exports)
nfsサーバの設定ファイルの編集を行います。

```text:/etc/exports
/share/nfs01 192.168.142.0/24(rw,no_root_squash,async)
```

`/share/nfs01`　　　 公開する共有ディレクトリ。
`192.168.142.0/24`　共有ディレクトリにアクセスできる範囲。
`rw`　　　　　　　　　読み書き両用。
`no_root_squash`　　 root権限で利用可。
`async`　　　　　　　 非同期書き込み。性能向上のため。


:::note alert
`no_root_squash`オプションはセキュリティが下がるため、複数人で利用するNFSサーバの場合には権限設計をするようにしてください。
:::
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/sect-security_guide-securing_nfs-do_not_use_the_no_root_squash_option




# 4.サービス起動
nfs関連のサービスの起動を行います。

```text:rpcbind
# systemctl enable rpcbind

# systemctl restart rpcbind

# systemctl status rpcbind
● rpcbind.service - RPC Bind
     Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; preset: enabled)
     Active: active (running) since Sun 2023-06-04 11:36:50 JST; 3s ago
TriggeredBy: ● rpcbind.socket
       Docs: man:rpcbind(8)
   Main PID: 28630 (rpcbind)
      Tasks: 1 (limit: 11107)
     Memory: 1.6M
        CPU: 30ms
     CGroup: /system.slice/rpcbind.service
             mq28630 /usr/bin/rpcbind -w -f
```

```text:nfsserver
# systemctl enable nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.

# systemctl restart nfs-server

# systemctl status nfs-server
● nfs-server.service - NFS server and services
     Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; preset: disabled)
    Drop-In: /run/systemd/generator/nfs-server.service.d
             mqorder-with-mounts.conf
     Active: active (exited) since Sun 2023-06-04 11:37:04 JST; 3s ago
    Process: 28673 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
    Process: 28674 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
    Process: 28691 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
   Main PID: 28691 (code=exited, status=0/SUCCESS)
        CPU: 34ms
```



# 5.nfsクライアント設定
nfsクライアントから各種設定を行います。

**パッケージインストール**
```text:install
# dnf install -y nfs-utils
依存関係が解決しました。
=============================================================================================================
 パッケージ                   アーキテクチャー        バージョン               リポジトリー            サイズ
=============================================================================================================
インストール:
 nfs-utils                    x86_64                  1:2.5.4-18.el9           local_dvd_BaseOS        426 k
依存関係のインストール:
 gssproxy                     x86_64                  0.8.4-4.el9              local_dvd_BaseOS        108 k
 keyutils                     x86_64                  1.6.3-1.el9              local_dvd_BaseOS         71 k
 libev                        x86_64                  4.33-5.el9               local_dvd_BaseOS         52 k
 libnfsidmap                  x86_64                  1:2.5.4-18.el9           local_dvd_BaseOS         60 k
 libverto-libev               x86_64                  0.3.2-3.el9              local_dvd_BaseOS         13 k
 rpcbind                      x86_64                  1.2.6-5.el9              local_dvd_BaseOS         56 k
 sssd-nfs-idmap               x86_64                  2.8.2-2.el9              local_dvd_BaseOS         41 k

トランザクションの概要
=============================================================================================================
インストール  8 パッケージ

《中略》
完了しました!
```

<br>

**マウントディレクトリ作成**

```text:マウントディレクトリ作成
# mkdir /share
# mkdir /share/client
# mkdir /share/client/nfs01
```

<br>

**nfsマウント**

```text:nfsマウント
# mount -v -t nfs 192.168.142.31:/share/nfs01 /share/client/nfs01
mount.nfs: timeout set for Sun Jun  4 11:40:01 2023
mount.nfs: trying text-based options 'vers=4.2,addr=192.168.142.31,clientaddr=192.168.142.32'
```

<br>

**nfsマウント確認**

```text:nfsマウント確認
# mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
192.168.142.31:/share/nfs01 on /share/client/nfs01 type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.142.32,local_lock=none,addr=192.168.142.31)
```


<br>

**ファイル作成確認**

```text:ファイル作成確認
# touch /share/client/nfs01/testfile.txt

# ll  /share/client/nfs01/
合計 0
-rw-r--r--. 1 root root 0  6月  4 11:38 testfile.txt
```

nfs接続が確認されました。