Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[レシピ]Kerberos認証環境の構築

夏休み中にKerbrose認証環境の構築復習を行いました。ここでメモしておきます。

1 時刻を合わせる

kerbroseチケットの有効期限及び、クライアントマシンタイムスタンプチェックをより正確に 働けるようにするため。同一レルムのマシンの時刻を同期化しておきましょう。

KDCサーバに ntp サービスを立ち上げて、他のマシンからKDCサーバの ntp サービスを使 用するようにする。

1.1 NTPサービス構築手順

sudo pacman -S ntp でntpパッケージをインストールする。インストールされたファイル一 覧は以下となります。

[akira@pipi ~]$ sudo pacman -Ql ntp
ntp /etc/
ntp /etc/ntp.conf                       ★NTPサービス設定ファイル
ntp /usr/
ntp /usr/bin/
ntp /usr/bin/calc_tickadj
ntp /usr/bin/ntp-keygen
ntp /usr/bin/ntp-wait
ntp /usr/bin/ntpd
ntp /usr/bin/ntpdate
ntp /usr/bin/ntpdc
ntp /usr/bin/ntpq
ntp /usr/bin/ntptime
ntp /usr/bin/ntptrace
ntp /usr/bin/sntp
ntp /usr/bin/tickadj
ntp /usr/lib/
ntp /usr/lib/systemd/
ntp /usr/lib/systemd/ntp-units.d/
ntp /usr/lib/systemd/ntp-units.d/50-ntp.list
ntp /usr/lib/systemd/system/
ntp /usr/lib/systemd/system/ntpd.service     ★ntpdデーモン起動用サービス定義ファイル
ntp /usr/lib/systemd/system/ntpdate.service  ★ntpdプロセスで時刻を同期化するOneShotサービス定義ファイル
ntp /usr/share/
ntp /usr/share/doc/
...中略...

/etc/ntp.conf ファイルサンプル

# With the default settings below, ntpd will only synchronize your clock.
#
# For details, see:
# - the ntp.conf man page
# - http://support.ntp.org/bin/view/Support/GettingStarted
# - https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon

# Associate to public NTP pool servers; see http://www.pool.ntp.org/
server 0.jp.pool.ntp.org iburst             ★物理的に近いサーバープールを使用する
server 1.jp.pool.ntp.org iburst
server 2.jp.pool.ntp.org iburst
server 3.jp.pool.ntp.org iburst

# ネットが繋がらない時に自身を NTP サーバーに変身する
server 127.127.1.1                          ★LAN内のマシンにntpサービスを継続提供するための設定
fudge  127.127.1.1 stratum 12

# Only allow read-only access from localhost
restrict default noquery nopeer
restrict 127.0.0.1
restrict ::1

# Location of drift file
driftfile /var/lib/ntp/ntp.drift

# Location of lof file
logfile /var/log/ntp.log                     ★ログ出力先の指定

# NOTE: If you run dhcpcd and have lines like 'restrict' and 'fudge' appearing
# here, be sure to add '-Y -N' to the dhcpcd_ethX variables in /etc/conf.d/net

サービスを有効化して起動する。

$ sudo systemctl enable ntpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
$ sudo systemctl start ntpd.service

1.2 NTPクライアントの設定

ntpクライアントは ntp パッケージの ntpdate.service サービスを利用してマシン起動時 にLAN内のntpサービスと時刻同期化を行います。

LAN内のntpサービスを利用するために /etc/ntp.conf にntpサーバのURLをLAN内のntpサー バに指すように設定を行う。

[akira@mimi ~]$ cat /etc/ntp.conf
# LAN内のntpサービスを利用する
server 192.168.100.4

# Only allow read-only access from localhost
restrict default noquery nopeer
restrict 127.0.0.1
restrict ::1

# Location of drift file
driftfile /var/lib/ntp/ntp.drift

ntpdate.service を起動する

$ sudo systemctl enable ntpdate.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpdate.service to /usr/lib/systemd/system/ntpdate.service.
$ sudo systemctl start ntpdate.service

2 Kerbroseサービスの構築手順

MITの KerbroseV を用いて構築します。まず、 pacmankbr5 パッケージをインストー ルしましょう。

$ sudo pacman -S krb5
warning: krb5-1.12.1-1 is up to date -- reinstalling
resolving dependencies...
looking for inter-conflicts...

Packages (1): krb5-1.12.1-1

Total Installed Size:   3.60 MiB
Net Upgrade Size:       0.00 MiB

:: Proceed with installation? [Y/n] 
(1/1) checking keys in keyring                                                                 [########################################################] 100%
(1/1) checking package integrity                                                               [########################################################] 100%
(1/1) loading package files                                                                    [########################################################] 100%
(1/1) checking for file conflicts                                                              [########################################################] 100%
(1/1) checking available disk space                                                            [########################################################] 100%
(1/1) reinstalling krb5                                                                        [########################################################] 100%
synchronizing filesystem...
$

kbr5パッケージの構成を以下のようになります、主要ファイルの説明は マークにて解説 する。

$ sudo pacman -Ql krb5
krb5 /etc/
krb5 /etc/krb5.conf                  ★Kerbrose認証システム参加するための設定ファイル
krb5 /usr/
krb5 /usr/bin/
krb5 /usr/bin/gss-client
krb5 /usr/bin/gss-server
krb5 /usr/bin/k5srvutil
krb5 /usr/bin/kadmin                 ★Kerbroseの認証データをメンテナンスするためのツール
krb5 /usr/bin/kadmin.local           ★kadminと同じが、ローカルのrootユーザでパスワード入力なしで利用可能
krb5 /usr/bin/kadmind                ★kadminデーモンプロセス、tcp/udpで同じレルムに属するクライアントに管理サービスを提供する
krb5 /usr/bin/kdb5_ldap_util
krb5 /usr/bin/kdb5_util              ★KDCデータベースメンテナンス用のツール
krb5 /usr/bin/kdestroy               ★ローカルマシンに取得済みのKerbroseチケットを破棄するためのツール
krb5 /usr/bin/kinit                  ★TGTチケット取得用
krb5 /usr/bin/klist                  ★取得済みチケット一覧表示用
krb5 /usr/bin/kpasswd                ★プリンシバルの認証パスワード変更用
krb5 /usr/bin/kprop
krb5 /usr/bin/kpropd
krb5 /usr/bin/kproplog
krb5 /usr/bin/krb5-config
krb5 /usr/bin/krb5-send-pr
krb5 /usr/bin/krb5kdc
krb5 /usr/bin/ksu
krb5 /usr/bin/kswitch
krb5 /usr/bin/ktutil
krb5 /usr/bin/kvno
krb5 /usr/bin/sclient
krb5 /usr/bin/sim_client
krb5 /usr/bin/sim_server
krb5 /usr/bin/sserver
krb5 /usr/bin/uuclient
krb5 /usr/bin/uuserver
krb5 /usr/include/
krb5 /usr/include/gssapi.h
krb5 /usr/include/gssapi/
krb5 /usr/include/gssapi/gssapi.h
krb5 /usr/include/gssapi/gssapi_ext.h
krb5 /usr/include/gssapi/gssapi_generic.h
krb5 /usr/include/gssapi/gssapi_krb5.h
krb5 /usr/include/gssapi/mechglue.h
krb5 /usr/include/gssrpc/
krb5 /usr/include/gssrpc/auth.h
krb5 /usr/include/gssrpc/auth_gss.h
krb5 /usr/include/gssrpc/auth_gssapi.h
krb5 /usr/include/gssrpc/auth_unix.h
krb5 /usr/include/gssrpc/clnt.h
krb5 /usr/include/gssrpc/netdb.h
krb5 /usr/include/gssrpc/pmap_clnt.h
krb5 /usr/include/gssrpc/pmap_prot.h
krb5 /usr/include/gssrpc/pmap_rmt.h
krb5 /usr/include/gssrpc/rename.h
krb5 /usr/include/gssrpc/rpc.h
krb5 /usr/include/gssrpc/rpc_msg.h
krb5 /usr/include/gssrpc/svc.h
krb5 /usr/include/gssrpc/svc_auth.h
krb5 /usr/include/gssrpc/types.h
krb5 /usr/include/gssrpc/xdr.h
krb5 /usr/include/kadm5/
krb5 /usr/include/kadm5/admin.h
krb5 /usr/include/kadm5/chpass_util_strings.h
krb5 /usr/include/kadm5/kadm_err.h
krb5 /usr/include/kdb.h
krb5 /usr/include/krad.h
krb5 /usr/include/krb5.h
krb5 /usr/include/krb5/
krb5 /usr/include/krb5/ccselect_plugin.h
krb5 /usr/include/krb5/clpreauth_plugin.h
krb5 /usr/include/krb5/hostrealm_plugin.h
krb5 /usr/include/krb5/kadm5_hook_plugin.h
krb5 /usr/include/krb5/kdcpreauth_plugin.h
krb5 /usr/include/krb5/krb5.h
krb5 /usr/include/krb5/localauth_plugin.h
krb5 /usr/include/krb5/locate_plugin.h
krb5 /usr/include/krb5/plugin.h
krb5 /usr/include/krb5/preauth_plugin.h
krb5 /usr/include/krb5/pwqual_plugin.h
krb5 /usr/include/profile.h
krb5 /usr/include/verto-module.h
krb5 /usr/include/verto.h
krb5 /usr/lib/
krb5 /usr/lib/krb5/
krb5 /usr/lib/krb5/plugins/
krb5 /usr/lib/krb5/plugins/kdb/
krb5 /usr/lib/krb5/plugins/kdb/db2.so
krb5 /usr/lib/krb5/plugins/kdb/kldap.so
krb5 /usr/lib/krb5/plugins/preauth/
krb5 /usr/lib/krb5/plugins/preauth/otp.so
krb5 /usr/lib/krb5/plugins/preauth/pkinit.so
krb5 /usr/lib/libgssapi_krb5.so
krb5 /usr/lib/libgssapi_krb5.so.2
krb5 /usr/lib/libgssapi_krb5.so.2.2
krb5 /usr/lib/libgssrpc.so
krb5 /usr/lib/libgssrpc.so.4
krb5 /usr/lib/libgssrpc.so.4.2
krb5 /usr/lib/libk5crypto.so
krb5 /usr/lib/libk5crypto.so.3
krb5 /usr/lib/libk5crypto.so.3.1
krb5 /usr/lib/libkadm5clnt.so
krb5 /usr/lib/libkadm5clnt_mit.so
krb5 /usr/lib/libkadm5clnt_mit.so.9
krb5 /usr/lib/libkadm5clnt_mit.so.9.0
krb5 /usr/lib/libkadm5srv.so
krb5 /usr/lib/libkadm5srv_mit.so
krb5 /usr/lib/libkadm5srv_mit.so.9
krb5 /usr/lib/libkadm5srv_mit.so.9.0
krb5 /usr/lib/libkdb5.so
krb5 /usr/lib/libkdb5.so.7
krb5 /usr/lib/libkdb5.so.7.0
krb5 /usr/lib/libkdb_ldap.so
krb5 /usr/lib/libkdb_ldap.so.1
krb5 /usr/lib/libkdb_ldap.so.1.0
krb5 /usr/lib/libkrad.so
krb5 /usr/lib/libkrad.so.0
krb5 /usr/lib/libkrad.so.0.0
krb5 /usr/lib/libkrb5.so
krb5 /usr/lib/libkrb5.so.3
krb5 /usr/lib/libkrb5.so.3.3
krb5 /usr/lib/libkrb5support.so
krb5 /usr/lib/libkrb5support.so.0
krb5 /usr/lib/libkrb5support.so.0.1
krb5 /usr/lib/libverto.so
krb5 /usr/lib/libverto.so.0
krb5 /usr/lib/libverto.so.0.0
krb5 /usr/lib/pkgconfig/
krb5 /usr/lib/pkgconfig/gssrpc.pc
krb5 /usr/lib/pkgconfig/kadm-client.pc
krb5 /usr/lib/pkgconfig/kadm-server.pc
krb5 /usr/lib/pkgconfig/kdb.pc
krb5 /usr/lib/pkgconfig/krb5-gssapi.pc
krb5 /usr/lib/pkgconfig/krb5.pc
krb5 /usr/lib/pkgconfig/mit-krb5-gssapi.pc
krb5 /usr/lib/pkgconfig/mit-krb5.pc
krb5 /usr/lib/systemd/
krb5 /usr/lib/systemd/system/
krb5 /usr/lib/systemd/system/krb5-kadmind.service    ★KDCデータ管理サービス
krb5 /usr/lib/systemd/system/krb5-kdc.service        ★KDCサービス
krb5 /usr/lib/systemd/system/krb5-kpropd.service
krb5 /usr/lib/systemd/system/krb5-kpropd.socket
krb5 /usr/lib/systemd/system/krb5-kpropd@.service
krb5 /usr/share/
krb5 /usr/share/aclocal/
krb5 /usr/share/aclocal/ac_check_krb5.m4
krb5 /usr/share/doc/
krb5 /usr/share/doc/krb5/
krb5 /usr/share/doc/krb5/examples/                  ★設定ファイルサンプル
krb5 /usr/share/doc/krb5/examples/kdc.conf
krb5 /usr/share/doc/krb5/examples/kerberos.ldif
krb5 /usr/share/doc/krb5/examples/kerberos.schema
krb5 /usr/share/doc/krb5/examples/krb5.conf
krb5 /usr/share/doc/krb5/examples/services.append
krb5 /usr/share/gnats/
krb5 /usr/share/gnats/mit
krb5 /usr/share/licenses/
krb5 /usr/share/licenses/krb5/
krb5 /usr/share/licenses/krb5/LICENSE
krb5 /usr/share/locale/
krb5 /usr/share/locale/en_US/
krb5 /usr/share/locale/en_US/LC_MESSAGES/
krb5 /usr/share/locale/en_US/LC_MESSAGES/mit-krb5.mo
krb5 /usr/share/man/
krb5 /usr/share/man/man1/
krb5 /usr/share/man/man1/k5srvutil.1.gz
krb5 /usr/share/man/man1/kadmin.1.gz
krb5 /usr/share/man/man1/kdestroy.1.gz
krb5 /usr/share/man/man1/kinit.1.gz
krb5 /usr/share/man/man1/klist.1.gz
krb5 /usr/share/man/man1/kpasswd.1.gz
krb5 /usr/share/man/man1/krb5-config.1.gz
krb5 /usr/share/man/man1/krb5-send-pr.1.gz
krb5 /usr/share/man/man1/ksu.1.gz
krb5 /usr/share/man/man1/kswitch.1.gz
krb5 /usr/share/man/man1/ktutil.1.gz
krb5 /usr/share/man/man1/kvno.1.gz
krb5 /usr/share/man/man1/sclient.1.gz
krb5 /usr/share/man/man5/
krb5 /usr/share/man/man5/.k5identity.5.gz
krb5 /usr/share/man/man5/.k5login.5.gz
krb5 /usr/share/man/man5/k5identity.5.gz
krb5 /usr/share/man/man5/k5login.5.gz
krb5 /usr/share/man/man5/kadm5.acl.5.gz
krb5 /usr/share/man/man5/kdc.conf.5.gz
krb5 /usr/share/man/man5/krb5.conf.5.gz
krb5 /usr/share/man/man8/
krb5 /usr/share/man/man8/kadmin.local.8.gz
krb5 /usr/share/man/man8/kadmind.8.gz
krb5 /usr/share/man/man8/kdb5_ldap_util.8.gz
krb5 /usr/share/man/man8/kdb5_util.8.gz
krb5 /usr/share/man/man8/kprop.8.gz
krb5 /usr/share/man/man8/kpropd.8.gz
krb5 /usr/share/man/man8/kproplog.8.gz
krb5 /usr/share/man/man8/krb5kdc.8.gz
krb5 /usr/share/man/man8/sserver.8.gz
krb5 /var/
krb5 /var/lib/
krb5 /var/lib/krb5kdc/
krb5 /var/lib/krb5kdc/kdc.conf               ★KDC設定ファイル
$

KDCサーバの設定 /var/lib/krb5kdc/kdc.conf

$ cat kdc.conf
[kdcdefaults]
	kdc_ports = 750,88

[realms]
	JIZAI-DOMAIN.JP = {                                       ★レルムの定義
		database_name = /var/lib/krb5kdc/principal            ★KDCデータベースファイルの格納パス
		acl_file = /var/lib/krb5kdc/kadm5.acl                 ★プリンシバルのアクセスコントロール定義
		key_stash_file = /var/lib/krb5kdc/.k5.JIZAI-DOMAIN.JP ★KDCデータベース暗号化パスワードファイル
		kdc_ports = 750,88                                    ★KDCサービスUDPポート
		max_life = 10h 0m 0s                                  ★発行チケットの有効時間
		max_renewable_life = 7d 0h 0m 0s
	}
$

プリンシバルのアクセスコントロールの定義 kadm5.acl

$ cat /var/lib/krb5kdc/kadm5.acl
*/admin@JIZAI-DOMAIN.JP *
$

レルムに参加するホストに対しての設定 /etc/krb5.conf

$ cat /etc/krb5.conf
[libdefaults]
	default_realm = JIZAI-DOMAIN.JP
    dns_lookup_realm = false
	dns_lookup_kdc = false
	ticket_lifetime = 10h
	renew_lifetime = 7d
	forwardable = true                                  ★TGTチケットの転送を可能にする

[realms]
	JIZAI-DOMAIN.JP = {
        kdc = pipi.jizai-domain.jp:88                   ★KDCサーバ接続情報、DNSから自動取得も可能
		admin_server = pipi.jizai-domain.jp:749         ★kadminサービス接続情報
		default_domain = jizai-domain.jp
	}

[domain_realm]
	jizai-domain.jp  = JIZAI-DOMAIN.JP
    .jizai-domain.jp = JIZAI-DOMAIN.JP

[logging]
        kdc = SYSLOG:INFO:LOCAL5
        admin_server = SYSLOG:INFO:LOCAL5
$

KDCサーバでデータベースを初期化する

$ sudo kdb5_util create -s
Loading random data
Initializing database '/var/lib/krb5kdc/principal' for realm 'JIZAI-DOMAIN.JP',
master key name 'K/M@JIZAI-DOMAIN.JP'                           ★データベース暗号化用プリンシバル:K/M@JIZAI-DOMAIN.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: 

$ ls -al /var/lib/krb5kdc                                       ★データベース作成されることを確認する
total 40
drwxr-xr-x  2 root root 4096 Aug 15 15:37 .
drwxr-xr-x 31 root root 4096 Aug 15 00:00 ..
-rw-------  1 root root   76 Aug 15 15:37 .k5.JIZAI-DOMAIN.JP   ★データベースファイルのパスワードファイル
-rw-r--r--  1 root root   26 Aug 15 14:44 kadm5.acl             ★アクセスコントロールファイル
-rw-r--r--  1 root root  288 Aug 15 14:40 kdc.conf
-rw-------  1 root root 8192 Aug 15 15:37 principal             ★データベースファイル本体
-rw-------  1 root root 8192 Aug 15 15:37 principal.kadm5
-rw-------  1 root root    0 Aug 15 15:37 principal.kadm5.lock
-rw-------  1 root root    0 Aug 15 15:37 principal.ok
$

KDCサーバにてrootアカウントでKDC管理用 root/admin プリンシバルを登録する。

$ sudo kadmin.local -p root/admin -q "addprinc root/admin"
Authenticating as principal root/admin with password.
WARNING: no policy specified for root/admin@JIZAI-DOMAIN.JP; defaulting to no policy
Enter password for principal "root/admin@JIZAI-DOMAIN.JP":            ★root/admin プリンシバルのパスワード
Re-enter password for principal "root/admin@JIZAI-DOMAIN.JP": 
Principal "root/admin@JIZAI-DOMAIN.JP" created.                       ★プリンシバルフルネーム:root/admin@JIZAI-DOMAIN.JP
$

KDCサービスを有効化して起動する

$ sudo systemctl enable krb5-kdc.service              ★KDCサービス
Created symlink from /etc/systemd/system/multi-user.target.wants/krb5-kdc.service to /usr/lib/systemd/system/krb5-kdc.service.

$ sudo systemctl enable krb5-kadmind.service          ★KDC管理用サービス
Created symlink from /etc/systemd/system/multi-user.target.wants/krb5-kadmind.service to /usr/lib/systemd/system/krb5-kadmind.service.

$ sudo systemctl start krb5-kdc.service
$ sudo systemctl start krb5-kadmind.service

★ 使用ポート一覧
$ sudo netstat -nutpl | grep k
tcp        0      0 0.0.0.0:749             0.0.0.0:*               LISTEN      29474/kadmind       
tcp        0      0 0.0.0.0:464             0.0.0.0:*               LISTEN      29474/kadmind       
tcp6       0      0 :::749                  :::*                    LISTEN      29474/kadmind       
tcp6       0      0 :::464                  :::*                    LISTEN      29474/kadmind       
udp        0      0 0.0.0.0:464             0.0.0.0:*                           29474/kadmind       
udp        0      0 0.0.0.0:750             0.0.0.0:*                           29470/krb5kdc       
udp        0      0 0.0.0.0:88              0.0.0.0:*                           29470/krb5kdc       
udp6       0      0 fe80::ba27:ebff:fe0:464 :::*                                29474/kadmind       
udp6       0      0 fe80::ba27:ebff:fe0:750 :::*                                29470/krb5kdc       
udp6       0      0 fe80::ba27:ebff:fe0d:88 :::*                                29470/krb5kdc

サービス起動時のログ

$ sudo tail -f /var/log/everything.log

★kdc起動
2014-08-15T15:55:29+09:00 pipi daemon info systemd[1]:  Starting Kerberos 5 KDC...
2014-08-15T15:55:29+09:00 pipi daemon info systemd[1]:  Started Kerberos 5 KDC.
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  Loaded
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  Loaded
2014-08-15T15:55:30+09:00 pipi local5 err krb5kdc[29867]:  preauth pkinit failed to initialize: No realms configured correctly for pkinit support
2014-08-15T15:55:30+09:00 pipi local5 err krb5kdc[29867]:  preauth pkinit failed to initialize: No realms configured correctly for pkinit support
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setting up network...
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setting up network...
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 7: udp 0.0.0.0.88 (pktinfo)
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 7: udp 0.0.0.0.88 (pktinfo)
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 8: udp 0.0.0.0.750 (pktinfo)
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 8: udp 0.0.0.0.750 (pktinfo)
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setsockopt(9,IPV6_V6ONLY,1) worked
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setsockopt(9,IPV6_V6ONLY,1) worked
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  No realms configured correctly for pkinit support - Cannot request packet info for udp socket address :: port 88
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  No realms configured correctly for pkinit support - Cannot request packet info for udp socket address :: port 88
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  skipping unrecognized local address family 17
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  skipping unrecognized local address family 17
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  skipping unrecognized local address family 17
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  skipping unrecognized local address family 17
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setsockopt(9,IPV6_V6ONLY,1) worked
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setsockopt(9,IPV6_V6ONLY,1) worked
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 9: udp fe80::ba27:ebff:fe0d:8d3a%eth0.88
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 9: udp fe80::ba27:ebff:fe0d:8d3a%eth0.88
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setsockopt(10,IPV6_V6ONLY,1) worked
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  setsockopt(10,IPV6_V6ONLY,1) worked
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 10: udp fe80::ba27:ebff:fe0d:8d3a%eth0.750
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  listening on fd 10: udp fe80::ba27:ebff:fe0d:8d3a%eth0.750
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  set up 4 sockets
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  set up 4 sockets
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  commencing operation
2014-08-15T15:55:30+09:00 pipi local5 info krb5kdc[29867]:  commencing operation
2014-08-15T15:55:30+09:00 pipi daemon info krb5kdc[29867]:  krb5kdc: starting...

★kadmind起動

2014-08-15T15:56:09+09:00 pipi daemon info systemd[1]:  Starting Kerberos 5 administration server...
2014-08-15T15:56:09+09:00 pipi daemon info systemd[1]:  Started Kerberos 5 administration server.
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  No dictionary file specified, continuing without one.
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  No dictionary file specified, continuing without one.
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setting up network...
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setting up network...
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 7: udp 0.0.0.0.464 (pktinfo)
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 7: udp 0.0.0.0.464 (pktinfo)
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(8,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(8,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  Invalid argument - Cannot request packet info for udp socket address :: port 464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  Invalid argument - Cannot request packet info for udp socket address :: port 464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  skipping unrecognized local address family 17
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  skipping unrecognized local address family 17
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  skipping unrecognized local address family 17
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  skipping unrecognized local address family 17
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(8,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(8,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 8: udp fe80::ba27:ebff:fe0d:8d3a%eth0.464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 8: udp fe80::ba27:ebff:fe0d:8d3a%eth0.464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(9,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(9,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 10: tcp 0.0.0.0.464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 10: tcp 0.0.0.0.464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 9: tcp ::.464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 9: tcp ::.464
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 11: rpc 0.0.0.0.749
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 11: rpc 0.0.0.0.749
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(12,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  setsockopt(12,IPV6_V6ONLY,1) worked
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 12: rpc ::.749
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  listening on fd 12: rpc ::.749
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  set up 6 sockets
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  set up 6 sockets
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  Seeding random number generator
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  Seeding random number generator
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  starting
2014-08-15T15:56:09+09:00 pipi local5 info kadmind[29923]:  starting
2014-08-15T15:56:09+09:00 pipi daemon info kadmind[29923]:  kadmind: starting...

3 KDCにプリンシバルの登録

kadmin.local 登録した root/admin@JIZAI-DOMAIN.JP 管理プリンシバルを用いて、レルム に参加している任意のマシンからテスト用プリンシバル登録操作を行います。以下の操作は全 てKDCサーバ側のデータベースに反映される、クライアント側には何も影響しない。

★kadminサービスへ接続する
$ kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@JIZAI-DOMAIN.JP:

★1:プリンシバル認証用パスワードのポリシーを作成する
kadmin:  add_policy -maxlife 180day -minlife 0day -minlength 8 -minclasses 2 -history 8 users_policy

★2:作成したポリシーを用いてkbr_u01プリンシバルを登録する
kadmin:  addprinc -policy users_policy kbr_u01
Enter password for principal "kbr_u01@JIZAI-DOMAIN.JP": 
Re-enter password for principal "kbr_u01@JIZAI-DOMAIN.JP": 
Principal "kbr_u01@JIZAI-DOMAIN.JP" created.                     ★プリンシバルのフルネーム

★3:kbr_u02プリンシバルを登録する
kadmin:  addprinc -policy users_policy kbr_u02
Enter password for principal "kbr_u02@JIZAI-DOMAIN.JP": 
Re-enter password for principal "kbr_u02@JIZAI-DOMAIN.JP": 
Principal "kbr_u02@JIZAI-DOMAIN.JP" created.

★4::プリンシバル一覧の表示
kadmin:  list_principals 
K/M@JIZAI-DOMAIN.JP
kadmin/admin@JIZAI-DOMAIN.JP
kadmin/changepw@JIZAI-DOMAIN.JP
kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP                      ★kadminサービスプリンシバル
kbr_u01@JIZAI-DOMAIN.JP                                          ★通常アカウント
kbr_u02@JIZAI-DOMAIN.JP
krbtgt/JIZAI-DOMAIN.JP@JIZAI-DOMAIN.JP                           ★TGSサービスプリンシバル
root/admin@JIZAI-DOMAIN.JP                                       ★管理用プリンシバル
kadmin:

プリンシバル登録時、kadminサービス側のログ

★接続時
2014-08-15T15:57:35+09:00 pipi local5 info krb5kdc[29867]:  AS_REQ (6 etypes {18 17 16 23 25 26}) 192.168.100.4: ISSUE: authtime 1408085855, etypes {rep=18 tkt=18 ses=18}, root/admin@JIZAI-DOMAIN.JP for kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP
2014-08-15T15:57:35+09:00 pipi local5 info krb5kdc[29867]:  AS_REQ (6 etypes {18 17 16 23 25 26}) 192.168.100.4: ISSUE: authtime 1408085855, etypes {rep=18 tkt=18 ses=18}, root/admin@JIZAI-DOMAIN.JP for kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP
2014-08-15T15:57:39+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_init, root/admin@JIZAI-DOMAIN.JP, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4, vers=4, flavor=6
2014-08-15T15:57:39+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_init, root/admin@JIZAI-DOMAIN.JP, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4, vers=4, flavor=6

★1
2014-08-15T16:01:55+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_create_policy, users_policy, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:01:55+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_create_policy, users_policy, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4

★2
2014-08-15T16:03:18+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_get_policy, users_policy, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:03:18+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_get_policy, users_policy, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:03:27+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_create_principal, kbr_u01@JIZAI-DOMAIN.JP, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:03:27+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_create_principal, kbr_u01@JIZAI-DOMAIN.JP, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4

★3
2014-08-15T16:04:11+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_get_policy, users_policy, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:04:11+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_get_policy, users_policy, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:04:18+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_create_principal, kbr_u02@JIZAI-DOMAIN.JP, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:04:18+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_create_principal, kbr_u02@JIZAI-DOMAIN.JP, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4

★4
2014-08-15T16:05:27+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_get_principals, *, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4
2014-08-15T16:05:27+09:00 pipi local5 notice kadmind[29923]:  Request: kadm5_get_principals, *, success, client=root/admin@JIZAI-DOMAIN.JP, service=kadmin/pipi.jizai-domain.jp@JIZAI-DOMAIN.JP, addr=192.168.100.4

4 KDCデータベースのバックアップ

kdb5_util dumpkdb5_util load コマンドを用いてKDCデータベースをバックアップと リストアすることができる。リストア時にKDCサービスを停止する必要があります。

$ sudo kdb5_util dump /var/lib/krb5kdc/kdc_dump
$ ls -al /var/lib/krb5kdc/
total 52
drwxr-xr-x  2 root root 4096 Aug 15 16:11 .
drwxr-xr-x 31 root root 4096 Aug 15 00:00 ..
-rw-------  1 root root   76 Aug 15 15:37 .k5.JIZAI-DOMAIN.JP
-rw-r--r--  1 root root   26 Aug 15 14:44 kadm5.acl
-rw-r--r--  1 root root  288 Aug 15 14:40 kdc.conf
-rw-r--r--  1 root root  304 Aug 15 14:28 kdc.conf.ogin
-rw-------  1 root root 5167 Aug 15 16:11 kdc_dump             ★バックアップ
-rw-------  1 root root    1 Aug 15 16:11 kdc_dump.dump_ok
-rw-------  1 root root 8192 Aug 15 16:04 principal
-rw-------  1 root root 8192 Aug 15 16:01 principal.kadm5
-rw-------  1 root root    0 Aug 15 15:37 principal.kadm5.lock
-rw-------  1 root root    0 Aug 15 16:04 principal.ok
$

5 Kerberos認証の流れを確認する

シナリオ、レルムに参考しているホスト mimi にて kinit kbr_u01 でkbr_u01ユーザプリン シバル認証を通してTGTチケットして、TGTチケットを用いてレルムに参考している別のホスト jizai にSSHでSSOを実現する。

[レルム:JIZAI=DOMAIN.JP]

                                           <<KDC>> pipi.jizai-domain.jp
+---------------------+  ①kinit kbr_u01   +----------------------------------------------------+
|mimi.jizai-domain.jp |------------------->| A|ユーザ  :kbr_u01@JIZAI-DOMAIN.JP                |
|                     |<---TGTチケット-----| B|ホスト  :jizai/jizai-domain.jp@JIZAI-DOMAIN.JP  |
|                     |                    | C|サービス:krbgtg/JIZAI-DOMAIN.JP@JIZAI-DOMAIN.JP |
|                     |------TGS-REQ------>|                                                    |
|                     |<-----TGS-RES-------|                                                    |
|                     |  ③Bホストチケット |                                                    |
+---------+-----------+                    +----------------------------------------------------+
          |
     ②ssh -o GSSAPIAuthentication=yes kbr_u01@jizai.jizai-domai.jp
          |
+---------+-----------+
|jizai.jizai-domain.jp|
|                     |
|                     |
+---------------------+

検証の前提条件

  • KDCにkbr_u01ユーザプリンシバルが登録済み
  • KDCに jizai ホストプリンシバルが登録済み
  • jizai ホストにsshdのGSSAPIAuthenticationオプションが有効である
  • jizai ホストの /etc/passwd ファイルに kbr_u01 アカウントが登録済み

jizai ホストプリンシバルの登録

★以下の作業は jizai ホストで行う

★KDCのkadminサービスへ接続する
$ sudo kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@JIZAI-DOMAIN.JP: 

★1:randkeyオプションでランダムなパスワードを用いて、ホストプリンシバルを登録する
kadmin:  addprinc -randkey host/jizai.jizai-domain.jp
WARNING: no policy specified for host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP; defaulting to no policy
Principal "host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP" created.

★2:ホストプリンシバル認証用鍵(パスワード)をローカルシステムに保存する
kadmin:  ktadd host/jizai.jizai-domain.jp
Entry for principal host/mimi.jizai-domain.jp with kvno 5, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/mimi.jizai-domain.jp with kvno 5, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/mimi.jizai-domain.jp with kvno 5, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/mimi.jizai-domain.jp with kvno 5, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab.

kadmin: quit

★4:ローカルシステムに保存されたホストプリンシバルの鍵を確認する
$ sudo klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   7 host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP
   7 host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP
   7 host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP
   7 host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP
$

jizai ホストにテスト用プリンシバル kbr_u01 をシステムローカルユーザとして登録する。

[akira@jizai ~]$ sudo useradd kbr_u01           ★kbr_u01ユーザ登録
[akira@jizai ~]$ getent passwd | grep kbr       ★kbr_u01ユーザ登録の確認
kbr_u01:x:5013:5013::/home/kbr_u01:/bin/bash
[akira@jizai ~]$

mimi ホストにて kinit コマンドで kbr_u01 プリンシバル認証して TGTチケットを取得 する。

[root@mimi-air ~]# klist -5                                   ★チケット一覧確認
klist: Credentials cache file '/tmp/krb5cc_0' not found

[root@mimi-air ~]# kinit kbr_u01                              ★kbr_u01プリンシバル認証する
Password for kbr_u01@JIZAI-DOMAIN.JP:                         ★kbr_u01プリンシバルに対応する鍵のパスワードを入力する

[akira@mimi ~]$ klist -5                                      ★チケット一覧確認
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: kbr_u01@JIZAI-DOMAIN.JP                    ★← ユーザプリンシバルkbr_u01として認証

Valid starting       Expires              Service principal
2014-08-16T16:01:31  2014-08-17T02:01:31  krbtgt/JIZAI-DOMAIN.JP@JIZAI-DOMAIN.JP  ★←TGTチケット
	renew until 2014-08-23T16:01:31
[root@mimi-air ~]#

mimi から jizai へSSO

★GSSAPIAuthenticationオプション有効でSSHログインする
[akira@mimi ~]$ ssh -vvv -o GSSAPIAuthentication=yes kbr_u01@jizai.jizai-domain.jp
OpenSSH_6.6.1, OpenSSL 1.0.1i 6 Aug 2014
debug1: Reading configuration data /home/akira/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to jizai.jizai-domain.jp [192.168.100.3] port 22.
debug1: Connection established.
debug1: identity file /home/akira/.ssh/id_rsa type -1
debug1: identity file /home/akira/.ssh/id_rsa-cert type -1
debug3: Incorrect RSA1 identifier
debug3: Could not load "/home/akira/.ssh/id_dsa" as a RSA1 public key
debug1: identity file /home/akira/.ssh/id_dsa type 2
debug1: identity file /home/akira/.ssh/id_dsa-cert type -1
debug1: identity file /home/akira/.ssh/id_ecdsa type -1
debug1: identity file /home/akira/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/akira/.ssh/id_ed25519 type -1
debug1: identity file /home/akira/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1
debug1: match: OpenSSH_6.6.1 pat OpenSSH_6.6.1* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "jizai.jizai-domain.jp" from file "/home/akira/.ssh/known_hosts"
debug3: load_hostkeys: found key type ECDSA in file /home/akira/.ssh/known_hosts:16
debug3: load_hostkeys: loaded 1 keys
debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-ed25519,ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: kex_parse_kexinit: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ssh-ed25519
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: mac_setup: setup hmac-md5-etm@openssh.com
debug1: kex: server->client aes128-ctr hmac-md5-etm@openssh.com none
debug2: mac_setup: setup hmac-md5-etm@openssh.com
debug1: kex: client->server aes128-ctr hmac-md5-etm@openssh.com none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 35:6c:0a:2e:7e:c2:5a:45:a0:05:f6:69:7b:7a:15:d0
debug3: load_hostkeys: loading entries for host "jizai.jizai-domain.jp" from file "/home/akira/.ssh/known_hosts"
debug3: load_hostkeys: found key type ECDSA in file /home/akira/.ssh/known_hosts:16
debug3: load_hostkeys: loaded 1 keys
debug3: load_hostkeys: loading entries for host "192.168.100.3" from file "/home/akira/.ssh/known_hosts"
debug3: load_hostkeys: found key type ECDSA in file /home/akira/.ssh/known_hosts:3
debug3: load_hostkeys: loaded 1 keys
debug1: Host 'jizai.jizai-domain.jp' is known and matches the ECDSA host key.
debug1: Found key in /home/akira/.ssh/known_hosts:16
debug1: ssh_ecdsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/akira/.ssh/id_dsa (0x7f87e82679a0),
debug2: key: /home/akira/.ssh/id_rsa ((nil)),
debug2: key: /home/akira/.ssh/id_ecdsa ((nil)),
debug2: key: /home/akira/.ssh/id_ed25519 ((nil)),
debug1: Authentications that can continue: publickey,gssapi-with-mic
debug3: start over, passed a different list publickey,gssapi-with-mic
debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup gssapi-with-mic
debug3: remaining preferred: publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic
debug2: we sent a gssapi-with-mic packet, wait for reply
debug1: Authentication succeeded (gssapi-with-mic).                     ★GSSAPIによるKerbrose認証が成功
Authenticated to jizai.jizai-domain.jp ([192.168.100.3]:22).            ★
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: packet_set_tos: set IP_TOS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Sat Aug 16 12:36:44 2014 from mimi.jizai-domain.jp
[kbr_u01@jizai ~]$ 

[kbr_u01@jizai ~]$ exit
ログアウト

[akira@mimi ~]$ klist -5                                                 ★チケット一覧確認
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: kbr_u01@JIZAI-DOMAIN.JP

Valid starting       Expires              Service principal
2014-08-16T16:01:31  2014-08-17T02:01:31  krbtgt/JIZAI-DOMAIN.JP@JIZAI-DOMAIN.JP
	renew until 2014-08-23T16:01:31
2014-08-16T16:01:39  2014-08-17T02:01:31  host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP    ★jizaiのホストアクセス用のチケットが取得された
	renew until 2014-08-23T16:01:31
[akira@mimi ~]$

以下はkinitからsshグインまでKDC側で取得したkerbroseパケット通信の状況です。

2014-08-15-berbrose-01.png

2014-08-15-berbrose-02.png

2014-08-15-berbrose-03.png

2014-08-15-berbrose-04.png

6 LDAP+pam_krbでLinuxログイン認証

LDAPサーバにユーザエントリの登録を行う。

ユーザエントリの定義

# --- kbr_u01 ---
dn: uid=kbr_u01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp
uid: kbr_u01
cn: Kerberose Test User01
uidNumber: 5101
gidNumber: 3101
userPassword: {CRYPT}x                          ★LDAPの簡易パスワード認証を利用しない
homeDirectory: /home/kbr_u01
loginShell: /bin/bash
gecos: Kerberose User01
objectClass: account
objectClass: posixAccount

# --- kbr_u02 ---
dn: uid=kbr_u02,ou=User,o=Linux Users,dc=jizai-domain,dc=jp
uid: kbr_u02
cn: Kerberose Test User02
uidNumber: 5102
gidNumber: 3102
userPassword: {CRYPT}x
homeDirectory: /home/kbr_u02
loginShell: /bin/bash
gecos: Kerberose User02
objectClass: account
objectClass: posixAccount

ldapadd で登録を行う

$ ldapadd -x -W -D "cn=Manager,dc=jizai-domain,dc=jp" -f 01.users.ldif
Enter LDAP Password: 
adding new entry "uid=kbr_u01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp"

adding new entry "uid=kbr_u02,ou=User,o=Linux Users,dc=jizai-domain,dc=jp"

LinuxホストからLDAPユーザエントリ情報を参照するするようにする

nss-pam-ldapd をインストールして、 /etc/nslcd.conf にてLDAPサーバ接続設定を行う。 /etc/nsswitch.conf に以下のように情報源にldapを追加する。

$ cat /etc/nsswitch.conf
passwd:    files ldap
group:     files ldap
shadow:    files ldap
netgroup:  files ldap

★以上以外の内容、ここでは省略します。

nslcd.service サービスを起動して、LDAPからユーザ情報参照できることを確認する。

$ sudo systemctl start nslcd.service
$ getent passwd
root:x:0:0:root:/root:/bin/bash
.....省略.....
★LDAPのユーザエントリ情報が表示されている
kbr_u01:*:5101:3101:Kerberose User01:/home/kbr_u01:/bin/bash
kbr_u02:*:5102:3102:Kerberose User02:/home/kbr_u02:/bin/bash

AURリポジトリからLinuxホストに pam_krb5 認証モジュールをインストールする

$ yaourt -S pam_krb5
==> AUR から pam_krb5 の PKGBUILD をダウンロード...
...中略...
==> インストールを整理...
  -> 不要なファイルを削除...
  -> libtool ファイルを削除...
  -> static library ファイルを削除...
  -> man と info ページを圧縮...
  -> バイナリとライブラリから不要なシンボルを削除...
==> パッケージを作成 "pam_krb5"...
  -> .PKGINFO ファイルを生成...
  -> .MTREE ファイルを生成...
  -> パッケージの圧縮...
==> fakeroot 環境を終了。
==> 作成完了: pam_krb5 2.4.9-1 (2014年  8月 16日 土曜日 16:38:32 JST)

==> pam_krb5 のインストールを続行しますか ? [Y/n]
==> [v]パッケージの中身確認 [c]heck package with namcap
==> -----------------------------------------
==> y

パッケージをロード...
警告: pam_krb5-2.4.9-1 は最新です -- 再インストール
依存関係を解決しています...
相互衝突をチェックしています...

パッケージ (1): pam_krb5-2.4.9-1

Total Installed Size:   0.27 MiB
Net Upgrade Size:       0.00 MiB

:: インストールを行いますか? [Y/n] 
(1/1) キーリングのキーを確認                                                                   [########################################################] 100%
(1/1) パッケージの整合性をチェック                                                             [########################################################] 100%
(1/1) パッケージファイルのロード                                                               [########################################################] 100%
(1/1) ファイルの衝突をチェック                                                                 [########################################################] 100%
(1/1) 空き容量を確認                                                                           [########################################################] 100%
(1/1) 再インストール pam_krb5                                                                  [########################################################] 100%
[akira@jizai ~]$

pam_krb5 モジュールの確認

[akira@jizai ~]$ pacman -Ql pam_krb5
pam_krb5 /usr/
pam_krb5 /usr/bin/
pam_krb5 /usr/bin/afs5log
pam_krb5 /usr/lib/
pam_krb5 /usr/lib/security/
pam_krb5 /usr/lib/security/pam_krb5.so      ★モジュール自体
pam_krb5 /usr/lib/security/pam_krb5/
pam_krb5 /usr/lib/security/pam_krb5/pam_krb5_cchelper
pam_krb5 /usr/share/
pam_krb5 /usr/share/locale/
...中略...
[akira@jizai ~]$

PAM認証設定1: /etc/pam.d/system-auth

#%PAM-1.0

auth      sufficient pam_krb5.so                   ★Kerbrose認証連携
auth      required  pam_env.so
auth      required  pam_unix.so     try_first_pass nullok
auth      optional  pam_permit.so

account   sufficient pam_krb5.so                   ★Kerbrose認証連携
account   required  pam_unix.so
account   optional  pam_permit.so
account   required  pam_time.so

password  sufficient pam_krb5.so                   ★Kerbrose認証連携
password  required  pam_unix.so     try_first_pass nullok sha512 shadow
password  optional  pam_permit.so

#ユーザ、グループ単位にリソース制限を行う
session   required  pam_limits.so
session   required  pam_env.so

#ログイン時にホームディレクトリが存在していなければ自動で生成する指定
session   required  pam_mkhomedir.so umask=077

#ログイン、ログアウト情報をauthログに出力する
session   required  pam_unix.so

session   optional  pam_krb5.so                    ★Kerbrose認証連携
session   optional  pam_permit.so

PAM認証設定2: /etc/pam.d/other

#%PAM-1.0
auth            sufficient      pam_krb5.so
auth		required	pam_unix.so

account         sufficient      pam_krb5.so
account		required	pam_unix.so

password        sufficient      pam_krb5.so
password	required	pam_unix.so

session		required	pam_unix.so

Linuxホストに kbr_u01 アカウントでログインする

$ ssh kbr_u01@jizai.jizai-domain.jp
kbr_u01@jizai.jizai-domain.jp's password:       ★KDCに登録されたkbr_u01プリンシバルのパスワードを入力する
Last login: Sat Aug 16 16:29:21 2014 from mimi.jizai-domain.jp

[kbr_u01@jizai ~]$ klist -5                     ★チケット一覧を確認する
Ticket cache: FILE:/tmp/krb5cc_5101_557rnl
Default principal: kbr_u01@JIZAI-DOMAIN.JP

Valid starting       Expires              Service principal
2014-08-16T16:46:53  2014-08-17T02:46:53  krbtgt/JIZAI-DOMAIN.JP@JIZAI-DOMAIN.JP    ★TGTチケット
	renew until 2014-08-23T16:46:53
2014-08-16T16:46:53  2014-08-17T02:46:53  krbtgt/JIZAI-DOMAIN.JP@JIZAI-DOMAIN.JP    ★なぜ2枚なのかは不明
	renew until 2014-08-23T16:46:53


[kbr_u01@jizai ~]$ env  | grep KRB5CCNAME
KRB5CCNAME=FILE:/tmp/krb5cc_5101_557rnl               ★Kerbrose認証チケットの保管場所は環境変数KRB5CCNAMEで参照できる
[kbr_u01@jizai ~]$

ログイン時Linuxホストのログ

Aug 16 16:46:53 jizai sshd[22872]: pam_krb5[22872]: TGT verified using key for 'host/jizai.jizai-domain.jp@JIZAI-DOMAIN.JP'
Aug 16 16:46:53 jizai sshd[22872]: pam_krb5[22872]: authentication succeeds for 'kbr_u01' (kbr_u01@JIZAI-DOMAIN.JP)    ★Kerbrose認証成功
Aug 16 16:46:53 jizai sshd[22872]: Accepted password for kbr_u01 from 192.168.100.10 port 58136 ssh2
Aug 16 16:46:55 jizai sshd[22872]: pam_unix(sshd:session): session opened for user kbr_u01 by (uid=0)
Aug 16 16:46:55 jizai systemd-logind[655]: New session c17 of user kbr_u01.

Comments