TOC
認証用のサービスアカウントをADで作成
ActiveDirectoryのKDCに対して認証するためにkeytabを作成します。そのkeytabに紐付けるサービスアカウントをADでまず作成します。
続いて、Linuxのホスト用のSPN(Service Principal Name)を登録します。
PS C:\> setspn -S host/ubuntu-jump.test.local linux-service
host/ubuntu-jump.test.local
のSPNに対して、linux-serviceのアカウントに紐付けます。
これにより、そのユーザーのservicePrincipalName
に登録されます。
これでkeytabを作る準備ができたのでktpassコマンドを使って作成します。
PS C:\> ktpass /out linuxhost.keytab /princ host/ubuntu-jump.test.local@TEST.LOCAL /rndPass /mapuser linux-service /ptype KRB5_NT_PRINCIPAL /crypto All
このkeytabファイルをlinuxで使うのでscpなどでコピーします。
UbuntuでKerberosクライアントをインストール
Ubuntuからケルベロス認証するためのクライアントをインストールします。
sudo apt-get install krb5-user
インストール中に設定画面が出るので、レルムとADサーバーを入力します。入力した内容が設定に反映されますが、手動で入力しても問題ありません。
一例としてこのような構成ファイルが作成されます。
#/etc/krb5.conf
[libdefaults]
default_realm = TEST.LOCAL
[realms]
TEST.LOCAL = {
kdc = WIN-K77Q2NQU2N7.test.local
admin_server = WIN-K77Q2NQU2N7.test.local
default_domain = test.local
}
[domain_realm]
test.local = TEST.LOCAL
.test.local = TEST.LOCAL
TGTの発行
keytabの中身を確認しておきます。
$ klist -e -k -t ./linuxhost.keytab
Keytab name: FILE:./linuxhost.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
5 01/01/1970 00:00:00 host/ubuntu-jump.test.local@TEST.LOCAL (etype 1)
5 01/01/1970 00:00:00 host/ubuntu-jump.test.local@TEST.LOCAL (etype 3)
5 01/01/1970 00:00:00 host/ubuntu-jump.test.local@TEST.LOCAL (arcfour-hmac)
5 01/01/1970 00:00:00 host/ubuntu-jump.test.local@TEST.LOCAL (aes256-cts-hmac-sha1-96)
5 01/01/1970 00:00:00 host/ubuntu-jump.test.local@TEST.LOCAL (aes128-cts-hmac-sha1-96)
このkeytabを使ってTGTを発行します。
$ kinit -kVt ./linuxhost.keytab host/ubuntu-jump.test.local@TEST.LOCAL
Using default cache: /tmp/krb5cc_1000
Using principal: host/ubuntu-jump.test.local@TEST.LOCAL
Using keytab: ./linuxhost.keytab
Authenticated to Kerberos v5
発行されたTGTはklistで確認できます。
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: host/ubuntu-jump.test.local@TEST.LOCAL
Valid starting Expires Service principal
11/20/2021 13:55:15 11/20/2021 23:55:15 krbtgt/TEST.LOCAL@TEST.LOCAL
renew until 11/21/2021 13:55:15
KDC側でパケットをキャプチャするとAS-REQが見えます。
KDCからAS-REPは下記のとおりです。
また、Kerberosのログを有効化していると、イベントビューアから下記のTGT要求が見えます。
STの発行
続いて、STを発行します。
$ kvno host/ubuntu-jump.test.local@TEST.LOCAL
host/ubuntu-jump.test.local@TEST.LOCAL: kvno = 7
klistで同様にチケットを確認するとTGTとSTが確認できます。
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: host/ubuntu-jump.test.local@TEST.LOCAL
Valid starting Expires Service principal
11/20/2021 13:55:15 11/20/2021 23:55:15 krbtgt/TEST.LOCAL@TEST.LOCAL
renew until 11/21/2021 13:55:15
11/20/2021 13:55:22 11/20/2021 23:55:15 host/ubuntu-jump.test.local@TEST.LOCAL
renew until 11/21/2021 13:55:15
STのリクエストとなるTGS-REQをパケットキャプチャすると以下のとおりです。
続いて、応答はTGS-REPで、このとおりです。
システムビューアでは下記のログが見えます。