CentOS6のauthconfig-gtkを起動すると、下記のように「ユーザアカウントの認証」は
NISで行えるものの、認証の方法にkerberosが選べる。
2014y09m06d_232910387.png
ホームディレクトリの場所、使うシェル、メールアドレスらをNISで管理させ、パスワードのみは別で管理する事が可能となる。NISの中にパスワードを持たせても構わないのだが、NISサーバと分離させることでセキュリティーの向上が望まれる。

っでまずはこのkerberos認証を専門に行うマシン、KDC[Key Distribution Center; 鍵配布センター]サーバを作る

KDCサーバインストール

最小構成で作成して、稼働させているサービスは

[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 ~]#

だけである。さらによりセキュアにするため

  • rootアカウントのロック
  • 特定ユーザのみのssh接続
  • 特定ユーザのみsudoを許可
  • 公開鍵方式による接続のみ許可
  • iptablesでsshへの辞書攻撃を防御

らの対策を施す。セキュアのために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

KDCサーバ設定

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 ~]#

データベース完成後に

  • kerberos データベース管理デーモン kadmind
  • kerberos チケット処理デーモン krb5kdc

をそれぞれ起動させる。

[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サブコマンドで現在のプリンシパルの一覧を表示させている。

  • K/M@CHAPERONE.JP
  • kadmin/admin@CHAPERONE.JP
  • kadmin/changepw@CHAPERONE.JP
  • kadmin/kdc.chaperone.jp@CHAPERONE.JP
  • krbtgt/CHAPERONE.JP@CHAPERONE.JP

初期状態で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_principaladdprincとか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アカウントのパスワード登録

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 ~]#

データベース操作 サービスプリンシパルの追加とkeytabファイルの作成

パスワードの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のままです。
2014y09m13d_184604917.png
「次」リンクを選択して、「NIS設定」画面はそのまま、ドメイン:xtal、サーバー:nisとして、「次」リンクを選択
2014y09m13d_184743949.png
「Kerberos設定」画面で、レルム(Realm)は「CHAPERONE.JP」、KDCは「kdc.chaperone.jp:88」、管理サーバは「kdc.chaperone.jp:749」を指定する。
2014y09m13d_185036062.png
*「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 ~]$

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2014-09-14 (日) 18:26:36 (1013d)