TOC
認証用のサービスアカウントをADで作成
ActiveDirectoryのKDCに対して認証するためにkeytabを作成します。そのkeytabに紐付けるサービスアカウントをADでまず作成します。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-21.png)
![](https://eng-investor.com/wp-content/uploads/2021/11/image-22.png)
![](https://eng-investor.com/wp-content/uploads/2021/11/image-23.png)
続いて、Linuxのホスト用のSPN(Service Principal Name)を登録します。
PS C:\> setspn -S host/ubuntu-jump.test.local linux-service
host/ubuntu-jump.test.local
のSPNに対して、linux-serviceのアカウントに紐付けます。
![](https://eng-investor.com/wp-content/uploads/2021/11/AD2-Administrator-192.168.10.28-Remote-Desktop-Connection-Manager-v2.83-Sysinternals_-www.sysinternals.com-2021-11-19-21.33.17.png)
これにより、そのユーザーの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サーバーを入力します。入力した内容が設定に反映されますが、手動で入力しても問題ありません。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-1-1024x542.png)
![](https://eng-investor.com/wp-content/uploads/2021/11/image-2-1024x539.png)
![](https://eng-investor.com/wp-content/uploads/2021/11/image-3-1024x544.png)
一例としてこのような構成ファイルが作成されます。
#/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が見えます。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-26.png)
KDCからAS-REPは下記のとおりです。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-27.png)
また、Kerberosのログを有効化していると、イベントビューアから下記のTGT要求が見えます。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-28.png)
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をパケットキャプチャすると以下のとおりです。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-24.png)
続いて、応答はTGS-REPで、このとおりです。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-25.png)
システムビューアでは下記のログが見えます。
![](https://eng-investor.com/wp-content/uploads/2021/11/image-29.png)