CentOS6のauthconfig-gtkを起動すると、下記のように「ユーザアカウントの認証」は
NISで行えるものの、認証の方法にkerberosが選べる。
ホームディレクトリの場所、使うシェル、メールアドレスらをNISで管理させ、パスワードのみは別で管理する事が可能となる。NISの中にパスワードを持たせても構わないのだが、NISサーバと分離させることでセキュリティーの向上が望まれる。
っでまずはこのkerberos認証を専門に行うマシン、KDC[Key Distribution Center; 鍵配布センター]サーバを作る
最小構成で作成して、稼働させているサービスは
[root@kdc ~]# chkconfig --list |grep "3:on"
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
[root@kdc ~]#
だけである。さらによりセキュアにするため
らの対策を施す。セキュアのために2台構成したのにKDCサーバが侵略されたら元も子もないので。
その上で、kerberos関係のパッケージをインストールします
[root@kdc ~]# yum -y install krb5-server krb5-workstation ntp
*krb5-serverパッケージと共に portreserve と words がインストールされる。wordsはkadminが参照するみたい
サーバとクライアントとの時刻が5分以上離れると認証されないので時刻同期は必須です
[root@kdc ~]# cat << _EOT_ >/etc/ntp.conf
driftfile /var/lib/ntp/drift
server 192.168.0.3
_EOT_
[root@kdc ~]# echo "192.168.0.3" >> /etc/ntp/step-tickers
[root@kdc ~]# chkconfig ntpd on && chkconfig ntpdate on
[root@kdc ~]# /etc/init.d/ntpdate start && /etc/init.d/ntpd start
kerberosサーバ・クライアントの設定ファイル /etc/krb5.conf を調整します。
サーバ固有の設定ファイル /var/kerberos/krb5kdc/kdc.conf を調整します。
KDCサーバに対するアクセス制限 /var/kerberos/krb5kdc/kadm5.acl を調整します。
まずはKerberosデータベースを作成して、そのマスターキーを定義する。
[root@kdc ~]# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'CHAPERONE.JP',
master key name 'K/M@CHAPERONE.JP'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
[root@kdc ~]#
*KDCデータベースのマスターキーを入力するまで相当時間がかかるときがある。rng-toolsを入れれば早くなるのかな?
作ったデータベースの削除は kdb5_util destroy で行われる。
[root@kdc ~]# kdb5_util destroy
Deleting KDC database stored in '/var/kerberos/krb5kdc/principal', are you sure?
(type 'yes' to confirm)? yes
OK, deleting database '/var/kerberos/krb5kdc/principal'...
** Database '/var/kerberos/krb5kdc/principal' destroyed.
[root@kdc ~]#
データベース完成後に
をそれぞれ起動させる。
[root@kdc ~]# chkconfig kadmin on
[root@kdc ~]# chkconfig krb5kdc on
[root@kdc ~]# /etc/init.d/kadmin start
[root@kdc ~]# /etc/init.d/krb5kdc start
これで認証専門サーバが完成。引き続きデータベースのコンテンツを追加します。対象のサイトとかユーザのパスワードとか。
KDCサーバにて、まずは初期状態のデータベースの中身を確認してみる
[root@kdc ~]# kadmin.local
Authenticating as principal root/admin@CHAPERONE.JP with password.
kadmin.local:
kadmin.local: listprincs
K/M@CHAPERONE.JP
kadmin/admin@CHAPERONE.JP
kadmin/changepw@CHAPERONE.JP
kadmin/kdc.chaperone.jp@CHAPERONE.JP
krbtgt/CHAPERONE.JP@CHAPERONE.JP
kadmin.local:
kadmin.local: quit
[root@kdc ~]#
kadmin.localは、KDCサーバで使用可能な認証不要のデータベース操作ツール。
listprincsサブコマンドで現在のプリンシパルの一覧を表示させている。
初期状態で5つのプリンシパルが存在している。
常にKDCサーバでユーザパスワード管理やプリンシパルの管理をしてもいいが、リモートで作業するためにも管理者(root/admin)を建てる。
[root@kdc ~]# kadmin.local
Authenticating as principal root/admin@CHAPERONE.JP with password.
kadmin.local:
kadmin.local: add_principal root/admin
WARNING: no policy specified for root/admin@CHAPERONE.JP; defaulting to no policy
Enter password for principal "root/admin@CHAPERONE.JP":
Re-enter password for principal "root/admin@CHAPERONE.JP":
Principal "root/admin@CHAPERONE.JP" created.
kadmin.local:
kadmin.local: listprincs
(中略)
root/admin@CHAPERONE.JP *追加されたプリンシパル
kadmin.local:
kadmin.local: quit
[root@kdc ~]#
*サブコマンドのadd_principal はaddprincとかankと同義である
作った管理者プリンシパルでkerberosデータベースにログインを試みます。
[root@kdc ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@CHAPERONE.JP: root/adminのパスワードを入力
kadmin:
kadmin: listprincs
K/M@CHAPERONE.JP
kadmin/admin@CHAPERONE.JP
kadmin/changepw@CHAPERONE.JP
kadmin/kdc.chaperone.jp@CHAPERONE.JP
krbtgt/CHAPERONE.JP@CHAPERONE.JP
root/admin@CHAPERONE.JP
kadmin:
kadmin:
kadmin: quit
[root@kdc ~]#
kadmin.localはKDCサーバにてパスワードなしで使用可能。一方kadminはパスワード認証でリモートから利用可能です。/etc/krb.confの調整は必要だけど。
NISユーザのパスワードを登録します。
[root@kdc ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@CHAPERONE.JP:
kadmin:
kadmin:
kadmin: add_principal saber
WARNING: no policy specified for saber@CHAPERONE.JP; defaulting to no policy
Enter password for principal "saber@CHAPERONE.JP":
Re-enter password for principal "saber@CHAPERONE.JP":
Principal "saber@CHAPERONE.JP" created.
kadmin:
kadmin: quit
[root@kdc ~]#
パスワードのkerberos認証だけなら /etc/krb5.conf の調整だけでOK。ただ他のマシンにtelnet/ssh接続をするときも再度パスワードが求められます。
もしそのtelnet/sshサーバにサービスプリンシパルを持たせるとパスワードなしなシングルサインオンでログインができる。
サービスプリンシパルの表記は「サービス記述子/ホスト名@レルム名」である。目的に応じてのサービス記述子がある。
ここでは client.chaperone.jp マシンへのローカルログイン後(チケット取得後)、ssh経由で ssh.chaperone.jp へシングルサインオンを試みる。
ssh.chaperone.jpのサービスプリンシパルを用意する。host サービス記述子は host。
[root@kdc ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@CHAPERONE.JP:
kadmin:
kadmin:
kadmin: add_principal -randkey host/ssh
WARNING: no policy specified for host/ssh@CHAPERONE.JP; defaulting to no policy
Principal "host/ssh@CHAPERONE.JP" created.
kadmin:
kadmin: add_principal -randkey host/ssh.chaperone.jp
WARNING: no policy specified for host/ssh.chaperone.jp@CHAPERONE.JP; defaulting to no policy
Principal "host/ssh.chaperone.jp@CHAPERONE.JP" created.
kadmin:
kadmin: quit
[root@kdc ~]#
2つを作ってみた。ホスト名だけとFQDNの2つ。次にkeytabファイルを作るが、KDCサーバで作ってscpで相手先に送っても、相手先のサイトで直接 keytab ファイルを作っても構わない。
[root@ssh ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@CHAPERONE.JP:
kadmin:
kadmin: ktadd -k /etc/krb5.keytab host/ssh
Entry for principal host/ssh with kvno 2, (略
kadmin:
kadmin: ktadd -k /etc/krb5.keytab host/ssh.chaperone.jp
Entry for principal host/ssh.chaperone.jp (略
kadmin:
kadmin: quit
[root@ssh ~]#
keytabファイルの中身は
[root@ssh ~]# klist -ek
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
5 host/ssh@CHAPERONE.JP (aes256-cts-hmac-sha1-96)
5 host/ssh@CHAPERONE.JP (aes128-cts-hmac-sha1-96)
5 host/ssh@CHAPERONE.JP (des3-cbc-sha1)
5 host/ssh@CHAPERONE.JP (arcfour-hmac)
2 host/ssh.chaperone.jp@CHAPERONE.JP (aes256-cts-hmac-sha1-96)
2 host/ssh.chaperone.jp@CHAPERONE.JP (aes128-cts-hmac-sha1-96)
2 host/ssh.chaperone.jp@CHAPERONE.JP (des3-cbc-sha1)
2 host/ssh.chaperone.jp@CHAPERONE.JP (arcfour-hmac)
[root@ssh ~]#
となる。
client.chaperone.jp、ssh.chaperone.jpともに /etc/krb5.conf の設定は済んでいるとする
接続先となるssh.chaperone.jpはkerberosでログイン認証を受けることになるので、pam_krb5をインストール後、authconfig-tuiで
[root@ssh ~]# yum install pam_krb5
[root@ssh ~]# authconfig-tui
認証に「Kerberos5を使用」を加える。ユーザ情報はNISのままです。
「次」リンクを選択して、「NIS設定」画面はそのまま、ドメイン:xtal、サーバー:nisとして、「次」リンクを選択
「Kerberos設定」画面で、レルム(Realm)は「CHAPERONE.JP」、KDCは「kdc.chaperone.jp:88」、管理サーバは「kdc.chaperone.jp:749」を指定する。
*「DNSを使用してレルムのホストを解決する」と「DNSを使用してレルム用のKDCを見つける」は不要です。DNSの調整が必要ですから
そして、clientから接続を行ってみる。
[foo@c ~]$ ssh -l saber client *まず外部からclientにsshログインを行う
saber@client's password: *ログイン処理が行われる
Last login: Sun Sep 14 00:32:35 2014 from c.chaperone.jp
[saber@client ~]$
[saber@client ~]$ id
uid=2001(saber) gid=2000(fate) 所属グループ=2000(fate)
[saber@client ~]$ ls -l /tmp/krb5cc_2001_Cz96x3
-rw------- 1 saber fate 539 9月 14 00:33 2014 /tmp/krb5cc_2001_Cz96x3 *uid 2001のチケットが作成される
[saber@client ~]$
[saber@client ~]$ ssh ssh.chaperone.jp *ssh.chaperone.jpへ接続
Last login: Sun Sep 14 00:32:54 2014 from client.chaperone.jp *パスワードなしでログイン可能
[saber@ssh ~]$
[saber@ssh ~]$
テストのため、チケットを破棄してssh.chaperone.jpへ接続を試みると
[foo@c ~]$ ssh -l saber client
saber@client's password:
Last login: Sun Sep 14 00:33:20 2014 from c.chaperone.jp
[saber@client ~]$
[saber@client ~]$
[saber@client ~]$ ls -l /tmp/krb5cc_2001_oODfLU
-rw------- 1 saber fate 539 9月 14 00:39 2014 /tmp/krb5cc_2001_oODfLU
[saber@client ~]$ kdestroy
[saber@client ~]$ ls -l /tmp/krb5cc_2001_oODfLU
ls: cannot access /tmp/krb5cc_2001_oODfLU: そのようなファイルやディレクトリはありません
[saber@client ~]$
[saber@client ~]$ ssh ssh.chaperone.jp
saber@ssh.chaperone.jp's password: *パスワードが要求される
Permission denied, please try again.
saber@ssh.chaperone.jp's password:
Permission denied, please try again.
saber@ssh.chaperone.jp's password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[saber@client ~]$