sec=krb5p
Debian 11(Bullseye)を実行している2つのHyper-V VMでMIT Kerberos()を使用してNFSv4.2を設定しています。マシンベースの認証()を使用すると、sec=sys
すべてがうまく機能します。 Kerberos( sec=krb5p
) を使用してクライアントに共有をマウントできますが、Permission denied
共有にアクセスしようとすると表示されます。心に浮かぶ関連構成情報を含め、これらすべてを以下に詳しく文書化しました。私は少し深さがありませんでした。私は何を逃したか間違っていますか?
NFS対sec=sys
サーバーの /etc/exports:
/exports/ned 192.168.1.0/24(sec=sys,rw,no_subtree_check)
クライアントの /etc/fstab:
test-debian-server:/exports/ned /imports/ned nfs sec=sys 0 0
テスト共有:
ned@test-debian-desktop:/imports$ su - -c "nfsstat -m"
Password:
/imports/ned from test-debian-server:/exports/ned
Flags: rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.63,local_lock=none,addr=192.168.1.62
ned@test-debian-desktop:/imports$ id
uid=2001(ned) gid=2001(ned) groups=2001(ned)
ned@test-debian-desktop:/imports$ ls -l
total 4
drwxr-xr-x 2 ned ned 4096 Jan 26 17:57 ned
ned@test-debian-desktop:/imports$ cd ned
ned@test-debian-desktop:/imports/ned$ ls
ned@test-debian-desktop:/imports/ned$ touch test.txt
ned@test-debian-desktop:/imports/ned$ ls
test.txt
サーバーでtest.txtを確認します。
ned@test-debian-server:/exports$ id
uid=2001(ned) gid=2001(ned) groups=2001(ned)
ned@test-debian-server:/exports$ ls -l
total 4
drwxr-xr-x 2 ned ned 4096 Jan 26 19:11 ned
ned@test-debian-server:/exports$ ls -l ned
total 0
-rw-r--r-- 1 ned ned 0 Jan 26 19:11 test.txt
許可が拒否されましたsec=krb5p
サーバー構成
/etc/ホスト:
127.0.0.1 localhost
127.0.1.1 test-debian-server.test test-debian-server
192.168.1.63 test-debian-desktop
192.168.1.62 test-debian-server
/etc/default/nfs-カーネル-サーバー:
RPCNFSDCOUNT=8
RPCNFSDPRIORITY=0
RPCMOUNTDOPTS="--manage-gids"
NEED_SVCGSSD=""
RPCSVCGSSDOPTS=""
/etc/default/nfs-共通:
NEED_STATD=
STATDOPTS=
NEED_IDMAPD=
NEED_GSSD=
/etc/export:
/exports/ned 192.168.1.0/24(sec=krb5p,rw,no_subtree_check)
/etc/krb5.conf (ほとんどの要約):
[libdefaults]
default_realm = TEST
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
TEST = {
kdc = test-debian-server
admin_server = test-debian-server
}
Kerberosの原則:
root@test-debian-server:~# kadmin.local listprincs
K/M@TEST
host/test-debian-desktop@TEST
host/test-debian-server@TEST
kadmin/admin@TEST
kadmin/changepw@TEST
kadmin/test-debian-server@TEST
kiprop/test-debian-server@TEST
krbtgt/TEST@TEST
nfs/test-debian-desktop@TEST
nfs/test-debian-server@TEST
Kerberos キータブ:
root@test-debian-server:~# klist -ke
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 nfs/test-debian-server@TEST (aes256-cts-hmac-sha1-96)
2 nfs/test-debian-server@TEST (aes128-cts-hmac-sha1-96)
2 host/test-debian-server@TEST (aes256-cts-hmac-sha1-96)
2 host/test-debian-server@TEST (aes128-cts-hmac-sha1-96)
NFS有効なドメイン:
root@test-debian-server:~# nfsidmap -d
test
エクスポート権限:
root@test-debian-server:~# ls -ld /exports /exports/*
drwxr-xr-x 3 root root 4096 Jan 26 17:58 /exports
drwxr-xr-x 2 ned ned 4096 Jan 26 19:11 /exports/ned
クライアント構成
/etc/ホスト:
127.0.0.1 localhost
127.0.1.1 test-debian-desktop.test test-debian-desktop
192.168.1.63 test-debian-desktop
192.168.1.62 test-debian-server
/etc/default/nfs-common: サーバーと同じです。
/etc/fstab:
test-debian-server:/exports/ned /imports/ned nfs sec=krb5p 0 0
/etc/krb5.conf: サーバーと同じです。
Kerberos キータブ:
root@test-debian-desktop:~# klist -ke
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
3 nfs/test-debian-desktop@TEST (aes256-cts-hmac-sha1-96)
3 nfs/test-debian-desktop@TEST (aes128-cts-hmac-sha1-96)
2 host/test-debian-desktop@TEST (aes256-cts-hmac-sha1-96)
2 host/test-debian-desktop@TEST (aes128-cts-hmac-sha1-96)
NFS有効なドメイン:
root@test-debian-desktop:~# nfsidmap -d
test
権限を取得する(共有を削除した後):
root@test-debian-desktop:~# umount /imports/ned
root@test-debian-desktop:~# ls -ld /imports /imports/*
drwxr-xr-x 3 root root 4096 Jan 26 19:08 /imports
drwxr-xr-x 2 root root 4096 Jan 26 17:02 /imports/ned
(注:Iでも同じ結果が表示されます。マウントが失敗したときに誤ってローカルディスクに書き込むのを防ぐために正しいとchown ned:ned /imports/ned
仮定するものは何ですか?)root:root
ned
許可が拒否されました
サーバーとクライアントを再起動した後:
ned@test-debian-desktop:/imports$ su -c "nfsstat -m"
Password:
/imports/ned from test-debian-server:/exports/ned
Flags: rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5p,clientaddr=192.168.1.63,local_lock=none,addr=192.168.1.62
ned@test-debian-desktop:/imports$ ls -l
total 4
drwxr-xr-x 2 ned ned 4096 Jan 26 19:11 ned
ned@test-debian-desktop:/imports$ cd ned
bash: cd: ned: Permission denied
ned@test-debian-desktop:/imports$
場合によっては、上記のセッションでわかるように、ned
最初の共有が一覧表示されますが、入力ls -l
できないことがあります。 1分後にそうしようとすると、フォルダのプロパティの疑問符が表示されます。これが発生した場合は、次のことができます。cd
ned
ls -l
Permission denied
ned
ned@test-debian-desktop:/imports$ ls -l
ls: cannot access 'ned': Permission denied
total 0
d????????? ? ? ? ? ? ned
ned@test-debian-desktop:/imports$ su -c "ls -l /imports"
Password:
total 4
drwxr-xr-x 2 ned ned 4096 Jan 26 19:11 ned
ned@test-debian-desktop:/imports$ ls -l
total 4
drwxr-xr-x 2 ned ned 4096 Jan 26 19:11 ned
ned@test-debian-desktop:/imports$
これは、期限切れの属性キャッシュが原因であるようです。noac
クライアントの/ etc / fstabで属性キャッシュを無効にしned
ますPermission denied
。ls -l
私が試したこと
クライアントとサーバーの両方に次のものがあります。
- 設定
Verbosity = 4
する/etc/idmapd.conf
- 、および
rpcdebug
設定に使用されるすべてのフラグnfs
nfsd
nlm
rpc
- 関連情報のsystemdログを検索します(再起動して共有にアクセスしようとした後)。
私はsystemctl status
次のレッスンが正しいことを確認して確認しactive
、各レッスンにリストされている最新のジャーナルエントリを読み、明らかなエラーの兆候を見つけられませんでした。
- 仕える人:
- krb5 - 管理サーバー
- krb5-kdc
- nfs カーネルサーバー
- nfs-idmapd
- nfsマウント
- nfs サーバー
- rpc-svcgssd
- rpc-gssd
- 顧客:
- rpc-gssd
- 輸入・マウント
私が知る限り、Kerberosは正しく認証します。
見つかったすべての関連マニュアルページとオンラインマニュアル、およびStackExchangeで関連していると思われるすべての質問を読みましたが、問題を解決できなかったか、クライアントまたはサーバーで許可が拒否された理由を示すエラーメッセージを生成することはできません。
host/test-debian-desktop
Kerberosプリンシパルとキーを追加するように編集します。host/test-debian-server
Unix アプリケーションサーバー - MIT Kerberos ドキュメント
私が逃したものは何ですか
選択した回答は、私の設定がうまくいかない理由をよく説明します。誰もが同じ状況が発生した場合、私が見逃した詳細は次のとおりです。理由を理解するには、以下の回答を読んでください。
Kerberosは個々のユーザーを認証します(何らかの理由で認証しないようです)。したがって、ned
接続するにはKerberosにプリンシパルが必要で、クライアントPCのLinuxユーザーはned@TEST
そのプリンシパルのチケット付与チケット(TGT)を取得する必要があります。そうすれば、すべてが順調に進みます。これをある程度自動化するために、以下を行いました。ned
kinit
/etc/krb5/user/<uid>/client.keytab:ned
とのキーを保持します。nedだけ読むことができます!私は0600
所有者とグループの両方の権限を使用しましたned
。
kinit -ki
このキータブを使用すると、パスワードを入力せずにログインを簡単に呼び出すことができます。これを自動化する迅速で汚い方法は、~/.gnomerc、~/.bashrc、および~/.zshrcに追加することです(私はGnome、Bash、Zshを使用しているためです)。
kinit
また、Ansibleを介してこれらの設定を展開し、いくつかの共有ポイントファイルがあるがNFSアクセスを必要としないシステムがあるため、クライアントキータブがある場合にのみ実行されるBashとZshにも興味があります。
~/.bashrc:
# Grab or renew a Kerberos ticket.
if type -t kinit >/dev/null && [[ -r /etc/krb/user/$(id -u)/client.keytab ]]
then
kinit -ki
fi
~/.zshrc:
# Grab or renew a Kerberos ticket.
if type kinit >/dev/null && [[ -r /etc/krb/user/$(id -u)/client.keytab ]]
then
kinit -ki
fi
答え1
「許可拒否」というメッセージが表示されるのは、上記のように資格情報キャッシュにKerberos TGT(チケット付与チケット)がないためです。アカウントを実行してパスワードを入力する必要がklist
あります。kinit
認証を受けてTGTチケットがキャッシュされると、このチケットを使用してNFSサーバーに認証できます。
Kerberos認証の全体的な概念は、NFSサーバー(または他の関連サービス)に対してあなたの身元を「証明する」ことです。コマンドにパスワード(自分だけが知っている)を入力して生成されたキャッシュされたTGTを提供することで、これを「証明」できますkinit
。したがって、これは通常これが機能する方法です。期限切れになる前にチケットが長く持続するようにkrb5
//で期限切れと更新時間を変更できますが、sssd
最終的にはある時点で何らかの方法で再認証する必要があります。
もちろん、いつでもアカウントのキータブを作成できます。クライアントのキータブに追加しないでください。クライアントキータブは、次の目的で使用されます。顧客一人で。新しいファイルに新しいキータブを作成する必要がありますあなたのアカウントを作成し、最小限の権限でこのファイルを安全にプライベートに保ち、このキータブを使用してインタラクティブにパスワードを入力することなく、資格情報キャッシュにTGTを作成できます。理論的には、定期的にこれを行うためのキータブを作成することもできますが、誰かcrontab
が特定の時点(たとえばrootアクセス権を持っている場合)でキータブを盗んでユーザーであるふりをして他のサービスを提供できるので、セキュリティは安全ではありません。しかし、それはあなたの考慮事項です。
また、キータブ方式を使用している場合は、アカウントのパスワードを変更するたびにキータブも更新する必要があることを忘れないでください。