NFSサーバに対する認証。
UID/GIDのマッチングによるファイル/フォルダへのアクセス許可判定以外に、
kerberos認証によるチケットでファイル/フォルダへのアクセス可否を判断することができる。
NFSサーバの/etc/exportsは、擬似ファイルシステム形式で作り、gss/krb5を公開ホスト名代わりに使用する
*kerberos認証形式は擬似ファイルシステム形式でないとだめ?
[root@nfs ~]# cat /etc/exports
#
/nfs gss/krb5(rw,fsid=0)
/nfs/home gss/krb5(rw,nohide)
/nfs/export gss/krb5(rw,nohide)
/nfs/src gss/krb5(rw,nohide)
#
[root@nfs ~]#として /etc/sysconfig/nfs の SECURE_NFS="yes" を有効にする
[root@nfs ~]# grep -v "#" /etc/sysconfig/nfs
SECURE_NFS="yes"
[root@nfs ~]#/etc/krb5.confを定義する
[root@nfs ~]# vi /etc/krb5.conf
[libdefaults]
default_realm = CHAPERONE.JP
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
CHAPERONE.JP = {
kdc = kdc.chaperone.jp
admin_server = kdc.chaperone.jp
}
[domain_realm]
.chaperone.jp = CHAPERONE.JP
chaperone.jp = CHAPERONE.JP
[root@nfs ~]#NFSサーバ(nfs.chaperone.jp)に NFSv4向けのサービスプリンシパルを用意して、keytabファイルとしてNFSサーバに置く
[root@nfs ~]# yum install krb5-workstation
[root@nfs ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@CHAPERONE.JP: *管理者パスワードでkdc.chaperone.jpにアクセス
kadmin:
kadmin: add_principal -randkey nfs/nfs.chaperone.jp@CHAPERONE.JP
kadmin: add_principal -randkey nfs/nfs@CHAPERONE.JP
kadmin:
kadmin: ktadd -k /etc/krb5.keytab nfs/nfs.chaperone.jp@CHAPERONE.JP
kadmin: ktadd -k /etc/krb5.keytab nfs/nfs@CHAPERONE.JP
kadmin:
kadmin: quit
[root@nfs ~]#
[root@nfs ~]#
[root@nfs ~]# klist -ke
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 nfs/nfs.chaperone.jp@CHAPERONE.JP (aes256-cts-hmac-sha1-96)
2 nfs/nfs.chaperone.jp@CHAPERONE.JP (aes128-cts-hmac-sha1-96)
2 nfs/nfs.chaperone.jp@CHAPERONE.JP (des3-cbc-sha1)
2 nfs/nfs.chaperone.jp@CHAPERONE.JP (arcfour-hmac)
2 nfs/nfs@CHAPERONE.JP (aes256-cts-hmac-sha1-96)
2 nfs/nfs@CHAPERONE.JP (aes128-cts-hmac-sha1-96)
2 nfs/nfs@CHAPERONE.JP (des3-cbc-sha1)
2 nfs/nfs@CHAPERONE.JP (arcfour-hmac)
[root@nfs ~]#必要なデーモンを定義して再起動か、もしくは手動で各デーモンを再起動する
[root@nfs ~]# chkconfig nfs on && chkconfig nfslock on && chkconfig rpcbind on && chkconfig rpcgssd on && \
reboot
[root@nfs ~]# /etc/init.d/rpcbind restart && /etc/init.d/nfslock restart && /etc/init.d/rpcgssd restart && \
/etc/init.d/nfs restart各デーモンとの連携は下記になる
S13rpcbind /sbin/rpcbind
S14nfslock /sbin/rpc.statd (NFSv3,v2を使うなら必要)
S19rpcgssd /usr/sbin/rpc.gssd (/etc/sysconfig/nfsでSECURE_NFS="yes"なら)
S30nfs /etc/init.d/nfs
+----- /sbin/service rpcsvcgssd start (/etc/sysconfig/nfsでSECURE_NFS="yes"なら)
+----- rpc.rquotad (/etc/sysconfig/nfsでRQUOTADが有効なら)
+----- rpc.mountd
+----- rpc.nfsd
+----- /sbin/service rpcidmapd start/etc/sysconfig/nfs の SECURE_NFS="yes" を有効にして、/etc/krb5.confもNFSサーバと同じように調整する。
そしてNFSクライアント(client.chaperone.jp)の NFSv4向けのサービスプリンシパルを用意する。
[root@client ~]# yum install krb5-workstation
[root@client ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@CHAPERONE.JP:
kadmin:
kadmin: add_principal -randkey nfs/client.chaperone.jp@CHAPERONE.JP
kadmin: add_principal -randkey nfs/client@CHAPERONE.JP
kadmin:
kadmin: ktadd -k /etc/krb5.keytab nfs/client.chaperone.jp@CHAPERONE.JP
kadmin: ktadd -k /etc/krb5.keytab nfs/client@CHAPERONE.JP
kadmin:
kadmin: quit
[root@client ~]# klist -ke
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 nfs/client.chaperone.jp@CHAPERONE.JP (aes256-cts-hmac-sha1-96)
2 nfs/client.chaperone.jp@CHAPERONE.JP (aes128-cts-hmac-sha1-96)
2 nfs/client.chaperone.jp@CHAPERONE.JP (des3-cbc-sha1)
2 nfs/client.chaperone.jp@CHAPERONE.JP (arcfour-hmac)
2 nfs/client@CHAPERONE.JP (aes256-cts-hmac-sha1-96)
2 nfs/client@CHAPERONE.JP (aes128-cts-hmac-sha1-96)
2 nfs/client@CHAPERONE.JP (des3-cbc-sha1)
2 nfs/client@CHAPERONE.JP (arcfour-hmac)
[root@client ~]#次にNFSマウントに必要なデーモンを定義してマシンの再起動か、もしくは手動で各デーモンを再起動する
[root@client ~]# chkconfig nfslock on && chkconfig rpcbind on && chkconfig rpcgssd on && reboot
[root@client ~]# /etc/init.d/nfslock restart && /etc/init.d/rpcbind restart && /etc/init.d/rpcgssd restart各デーモンとの連携は下記になる
S13rpcbind /sbin/rpcbind
S14nfslock /sbin/rpc.statd (NFSv3,v2を使うなら必要。NFSクライアントにも必要みたい)
S19rpcgssd /usr/sbin/rpc.gssd (/etc/sysconfig/nfsでSECURE_NFS="yes"なら)NFSサーバ側で適切にディレクトリが公開されているかを確認する
留意 NFSサーバはNISに加入しなくても構わない
[root@nfs ~]# ls -l /nfs/export/
合計 8
drwxr-xr-x 2 2000 2000 4096 9月 9 21:58 2014 illya
drwxr-xr-x 3 2001 2000 4096 9月 15 13:14 2014 saber
[root@nfs ~]#client.chaperone.jpはNISに参加していて、autofsの影響を受けている。その影響を排して動作確認をしたいので、一端autofsを停止する
[root@client ~]# ypcat auto.home
-rw,sec=krb5 nfs:/export/saber
-rw,sec=krb5 nfs:/export/illya
[root@client ~]#
[root@client ~]# /etc/init.d/autofs stopclient.chaperone.jpからNFSマウントを試みる
[root@client ~]# ls -l /tmp
合計 0
[root@client ~]# mount -t nfs4 -o sec=krb5 nfs:/export /home
[root@client ~]#
[root@client ~]# ls -l /tmp
合計 4
-rw------- 1 root root 1158 9月 15 13:05 2014 krb5cc_machine_CHAPERONE.JP
[root@client ~]#
[root@client ~]# df -Th /home
Filesystem Type Size Used Avail Use% Mounted on
nfs:/export nfs4 5.5G 921M 4.3G 18% /home
[root@client ~]#NFSマウントは成功して /tmp にチケットが置かれる。ほかのマシンからユーザがログインしてみると
[foo@c ~]$ ssh -l saber client
saber@client's password:
Last login: Mon Sep 15 12:37:27 2014 from c.chaperone.jp
[saber@client ~]$ pwd
/home/saber
[saber@client ~]$ df -Th /home
Filesystem Type Size Used Avail Use% Mounted on
nfs:/export nfs4 5.5G 921M 4.3G 18% /home
[saber@client ~]$ ls -l /tmp
合計 8
-rw------- 1 saber fate 539 9月 15 13:10 2014 krb5cc_2001_8ua7HK
-rw------- 1 root root 1158 9月 15 13:05 2014 krb5cc_machine_CHAPERONE.JP
[saber@client ~]$とログインに成功して、/tmp にそのuidを持ったチケットが作られる
未完成
成功しない....
静的NFSは問題なかったのだが動的NFSではそのようなファイルやディレクトリはないと言われる。
ログとして
automount[1097]: st_expire: state 1 path /home
automount[1097]: expire_proc: exp_proc = 140035732772608 path /home
automount[1097]: expire_cleanup: got thid 140035732772608 path /home stat 0
automount[1097]: expire_cleanup: sigchld: exp 140035732772608 finished, switching from 2 to 1
automount[1097]: st_ready: st_ready(): state = 2 path /homeが15秒おきに記録される。automountの設定問題かも...