Linux クライアント用の Kerberos ベースの認証を使用した NFS サーバーのセットアップ - パート 7
このシリーズの最後の記事では、複数の種類のオペレーティング システムで構成されるネットワーク上で Samba 共有をセットアップする方法を検討しました。さて、Unix 系クライアントのグループに対してファイル共有を設定する必要がある場合は、自動的にネットワーク ファイル システム、 略してNFSを思い浮かべることでしょう。
この記事では、NFS 共有にKerberos ベースの認証を使用するプロセスについて説明します。 NFS サーバーとクライアントがすでにセットアップされていることを前提としています。そうでない場合は、「NFS サーバーのインストールと構成」を参照してください。ここでは、インストールする必要がある必要なパッケージのリストと、次に進む前にサーバーで初期構成を実行する方法について説明します。
さらに、NFS を介したファイル共有を許可するように SELinux と firewalld の両方を構成する必要があります。
次の例では、NFS 共有が box2 の /nfs にあることを前提としています。
semanage fcontext -a -t public_content_rw_t "/nfs(/.*)?"
restorecon -R /nfs
setsebool -P nfs_export_all_rw on
setsebool -P nfs_export_all_ro on
(-P フラグは再起動後の永続性を示します)。
最後に、次のことを忘れないでください。
NFS グループの作成と NFS 共有ディレクトリの構成
1. nfs というグループを作成し、そこに nfsnobody ユーザーを追加し、/nfs の権限を変更します。 > ディレクトリを 0770 に、そのグループ所有者を nfs に設定します。したがって、nfsnobody (クライアント リクエストにマッピングされている) には共有への書き込み権限があり、/etc で no_root_squash を使用する必要はありません。/エクスポートファイル。
groupadd nfs
usermod -a -G nfs nfsnobody
chmod 0770 /nfs
chgrp nfs /nfs
2. エクスポート ファイル (/etc/exports) を次のように変更して、Kerberos を使用した box1 からのアクセスのみを許可します。セキュリティ (sec=krb5)。
注: anongid の値は、nfs の GID に設定されています。以前に作成したstrong>グループ:
/nfs box1(rw,sec=krb5,anongid=1004)
3. すべての NFS 共有(-r)(-a)を再エクスポートします。出力 (-v) に冗長性を追加すると、何か問題が発生した場合にサーバーのトラブルシューティングに役立つ情報が提供されるため、お勧めします。
exportfs -arv
4. NFS サーバーと関連サービスを再起動して有効にします。 nfs-lock と nfs-idmapd は起動時に他のサービスによって自動的に開始されるため、これらを有効にする必要がないことに注意してください。
systemctl restart rpcbind nfs-server nfs-lock nfs-idmap
systemctl enable rpcbind nfs-server
テスト環境とその他の前提条件
このガイドでは、次のテスト環境を使用します。
- クライアント マシン [ボックス 1: 192.168.0.18]
- NFS/Kerberos サーバー [box2: 192.168.0.20] (キー配布センター、または略してKDCとも呼ばれます)。
注: Kerberos サービスは認証スキームにとって重要です。
ご覧のとおり、NFS サーバーと KDC は簡単にするために同じマシンでホストされていますが、より多くの空きがある場合は別のマシンにセットアップすることもできます。どちらのマシンも mydomain.com
ドメインのメンバーです。
最後になりましたが、Kerberos では、少なくとも名前解決の基本スキーマとネットワーク タイム プロトコル サービスがクライアントとサーバーの両方に存在する必要があります。これは、Kerberos 認証のセキュリティが部分的にタイムスタンプに基づいているためです。チケット。
名前解決を設定するには、クライアントとサーバーの両方で /etc/hosts ファイルを使用します。
192.168.0.18 box1.mydomain.com box1
192.168.0.20 box2.mydomain.com box2
RHEL 7 では、chrony が NTP 同期に使用されるデフォルトのソフトウェアです。
yum install chrony
systemctl start chronyd
systemctl enable chronyd
chrony が実際にシステムの時刻をタイム サーバーと同期していることを確認するには、次のコマンドを 2 ~ 3 回発行して、オフセットがゼロに近づいていることを確認します。
chronyc tracking
Kerberos のインストールと構成
KDC をセットアップするには、サーバーとクライアントの両方に次のパッケージをインストールします (クライアントのサーバー パッケージは省略します)。
yum update && yum install krb5-server krb5-workstation pam_krb5
インストールしたら、構成ファイル (/etc/krb5.conf および /var/kerberos/krb5kdc/kadm5.acl) を編集し、 のすべてのインスタンスを置き換えます。次のように、example.com (小文字と大文字) と mydomain.com
を組み合わせます。
次に、Kerberos データベースを作成します (システムにある程度のエントロピーが必要なため、これには時間がかかる場合があることに注意してください。処理を高速化するために、別のターミナルを開いて ping -f を実行しました)ローカルホストを 30 ~ 45 秒間):
kdb5_util create -s
次に、ファイアウォール経由でKerberosを有効にし、関連サービスを開始/有効にします。
重要: nfs-secure もクライアント上で開始して有効にする必要があります。
firewall-cmd --permanent --add-service=kerberos
systemctl start krb5kdc kadmin nfs-secure
systemctl enable krb5kdc kadmin nfs-secure
次に、kadmin.local ツールを使用して、root の管理プリンシパルを作成します。
kadmin.local
addprinc root/admin
そして、Kerberos サーバーをデータベースに追加します。
addprinc -randkey host/box2.mydomain.com
クライアント (ボックス 1) とサーバー (ボックス 2) の両方の NFS サービスも同様です。以下のスクリーンショットでは、終了する前に box1 に対してこれを行うのを忘れていることに注意してください。
addprinc -randkey nfs/box2.mydomain.com
addprinc -randkey nfs/box1.mydomain.com
そして、「quit」と入力して Enter キーを押して終了します。
次に、root/admin の Kerberos チケット認可チケットを取得してキャッシュします。
kinit root/admin
klist
実際にKerberosを使用する前の最後のステップは、Kerberos 認証の使用を許可されているプリンシパルを (サーバー内の)keytab ファイルに保存することです。
kadmin.local
ktadd host/box2.mydomain.com
ktadd nfs/box2.mydomain.com
ktadd nfs/box1.mydomain.com
最後に、共有をマウントし、書き込みテストを実行します。
mount -t nfs4 -o sec=krb5 box2:/nfs /mnt
echo "Hello from linux-console.net" > /mnt/greeting.txt
次に、 共有をアンマウントし、クライアントのキータブファイルの名前を変更し(存在しないことをシミュレートするため)、再度共有をマウントしてみます。
umount /mnt
mv /etc/krb5.keytab /etc/krb5.keytab.orig
これで、Kerberos ベース認証でNFS共有を使用できるようになりました。
まとめ
この記事では、Kerberos 認証を使用してNFSを設定する方法を説明しました。このトピックには 1 つのガイドではカバーしきれないほど多くの内容が含まれているため、オンラインの Kerberos ドキュメントを自由にチェックしてください。また、控えめに言っても Kerberos は少し難しいため、以下のフォームを使用して遠慮せずにメモを残してください。問題が発生した場合、またはテストや実装に関してサポートが必要な場合。