LinuxからWindows KDCに対してKerberos認証

認証用のサービスアカウントを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で、このとおりです。

システムビューアでは下記のログが見えます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA