web-dev-qa-db-ja.com

MIT OpenSSHへの認証時にKerberosがパスワードを要求し続ける

私は、Kerberosサーバー(KDC)、クライアントマシン、およびOpenSSHデーモンを実行するサーバーマシンで構成される単純なKerberos環境をセットアップしようとしています。クライアントは、サーバーマシンへのSSH接続を確立するときに、Kerberosを介して認証されることになっています。

認証しようとしているKerberosユーザーの名前はkrbuserです。このユーザーはサービスマシンに存在し、UIDは1001です。奇妙なことに、SSHでログインするときにKerberosユーザーのパスワードを入力する必要があります。ログインするたびに。初めての接続だけではありません。 Kerberosの目的はパスワードなしで認証することなので、これは奇妙に見えます。

認証プロセス中にtcpdumpを実行したところ、クライアントがcname rootを使用してKDCに対してAS-REQを実行していることがわかりました。このKerberosユーザー名は使用しておらず、私はnoクライアントがこの名前を使用している理由を理解しています。予想どおり、データベースにrootユーザーが存在しないため、KDCはeRR-C-PRINCIPAL-UNKNOWNメッセージで応答します。

私にとって、主な問題は、クライアントがrootではなくkrbuserとして認証しようとするという事実であるようです。

現在の構成に関する情報を以下に投稿します。追加情報が必要な場合はお知らせください。

KDC上:

/etc/krb5.conf

[logging]
    default = FILE:/usr/local/krb5/var/log/krb5lib.log 
    kdc = FILE:/usr/local/krb5/var/log/krb5kdc.log
    admin_server = FILE:/usr/local/krb5/var/log/kadmin.log

[libdefaults]
    default_realm = metz.prac.os3.nl
    rdns = false

# The following krb5.conf variables are only for MIT Kerberos.
    krb4_config = /etc/krb.conf
    krb4_realms = /etc/krb.realms
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true

[realms]
    metz.prac.os3.nl = {
        kdc = krb-0.metz.prac.os3.nl
        admin_server = krb-0.metz.prac.os3.nl
    }

サービスマシン:

/etc/ssh/sshd config(抽出)

# Kerberos options
KerberosAuthentication yes
# KerberosGetAFSToken no
# KerberosOrLocalPasswd no
# KerberosTicketCleanup yes

# GSSAPI options
GSSAPIAuthentication yes
# GSSAPICleanupCredentials yes

SSH認証中にキャプチャされたログファイル:

debug1: rekey after 4294967296 blocks [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user root service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: PAM: initializing for "root"
debug1: PAM: setting PAM_RHOST to "218.65.30.30"
debug1: PAM: setting PAM_TTY to "ssh"
debug1: userauth-request for user root service ssh-connection method password [preauth]
debug1: attempt 1 failures 0 [preauth]
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: restore_uid: 0/0
debug1: Kerberos password authentication failed: Client '[email protected]' not found in Kerberos database
debug1: krb5_cleanup_proc called
debug1: inetd sockets after dupping: 5, 5
Connection from 145.100.110.115 port 51946 on 145.100.110.116 port 22
debug1: Client protocol version 2.0; client software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 pat OpenSSH* compat 0x04000000
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
debug1: permanently_set_uid: 106/65534 [preauth]
debug1: list_hostkey_types: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519 [preauth]
debug1: SSH2_MSG_KEXINIT sent [preauth]
debug1: SSH2_MSG_KEXINIT received [preauth]
debug1: kex: algorithm: [email protected] [preauth]
debug1: kex: Host key algorithm: ecdsa-sha2-nistp256 [preauth]
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none [preauth]
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none [preauth]
debug1: expecting SSH2_MSG_KEX_ECDH_INIT [preauth]
debug1: rekey after 134217728 blocks [preauth]
debug1: SSH2_MSG_NEWKEYS sent [preauth]
debug1: expecting SSH2_MSG_NEWKEYS [preauth]
debug1: rekey after 134217728 blocks [preauth]
debug1: SSH2_MSG_NEWKEYS received [preauth]
debug1: KEX done [preauth]
debug1: userauth-request for user krbuser service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: PAM: initializing for "krbuser"
debug1: PAM: setting PAM_RHOST to "145.100.110.115"
debug1: PAM: setting PAM_TTY to "ssh"
debug1: userauth-request for user krbuser service ssh-connection method gssapi-with-mic [preauth]
debug1: attempt 1 failures 0 [preauth]
debug1: PAM: password authentication failed for root: Authentication failure
Failed password for root from 218.65.30.30 port 18460 ssh2
debug1: userauth-request for user root service ssh-connection method password [preauth]
debug1: attempt 2 failures 1 [preauth]
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: restore_uid: 0/0
debug1: Kerberos password authentication failed: Client '[email protected]' not found in Kerberos database
debug1: krb5_cleanup_proc called
debug1: PAM: password authentication failed for root: Authentication failure
Failed password for root from 218.65.30.30 port 18460 ssh2
debug1: userauth-request for user root service ssh-connection method password [preauth]
debug1: attempt 3 failures 2 [preauth]
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: restore_uid: 0/0
debug1: Kerberos password authentication failed: Client '[email protected]' not found in Kerberos database
debug1: krb5_cleanup_proc called
debug1: PAM: password authentication failed for root: Authentication failure
Failed password for root from 218.65.30.30 port 18460 ssh2
debug1: userauth-request for user krbuser service ssh-connection method password [preauth]
debug1: attempt 2 failures 0 [preauth]
debug1: temporarily_use_uid: 1001/1001 (e=0/0)
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1001/1001 (e=0/0)
debug1: restore_uid: 0/0
debug1: do_pam_account: called
Accepted password for krbuser from 145.100.110.115 port 51946 ssh2
debug1: monitor_child_preauth: krbuser has been authenticated by privileged process
debug1: monitor_read_log: child log fd closed
debug1: temporarily_use_uid: 1001/1001 (e=0/0)
debug1: ssh_gssapi_storecreds: Not a GSSAPI mechanism
debug1: restore_uid: 0/0
debug1: PAM: establishing credentials
User child is on pid 20617
debug1: SELinux support disabled
debug1: PAM: establishing credentials
debug1: permanently_set_uid: 1001/1001
debug1: rekey after 134217728 blocks
debug1: rekey after 134217728 blocks
debug1: ssh_packet_set_postauth: called
debug1: Entering interactive session for SSH2.
debug1: server_init_dispatch_20
debug1: server_input_channel_open: ctype session rchan 0 win 1048576 max 16384
debug1: input_session_request
debug1: channel 0: new [server-session]
debug1: session_new: session 0
debug1: session_open: channel 0
debug1: session_open: session 0: link with channel 0
debug1: server_input_channel_open: confirm session
debug1: server_input_global_request: rtype [email protected] want_reply 0
debug1: server_input_channel_req: channel 0 request pty-req reply 1
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req pty-req
debug1: Allocating pty.
debug1: session_new: session 0
debug1: SELinux support disabled
debug1: session_pty_req: session 0 alloc /dev/pts/2
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request env reply 0
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req env
debug1: server_input_channel_req: channel 0 request Shell reply 1
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req Shell
Starting session: Shell on pts/2 for krbuser from 145.100.110.115 port 51946 id 0
debug1: Setting controlling tty using TIOCSCTTY.
debug1: userauth-request for user root service ssh-connection method password [preauth]
debug1: attempt 4 failures 3 [preauth]
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: restore_uid: 0/0
debug1: Kerberos password authentication failed: Client '[email protected]' not found in Kerberos database
debug1: krb5_cleanup_proc called
debug1: PAM: password authentication failed for root: Authentication failure
Failed password for root from 218.65.30.30 port 18460 ssh2
debug1: userauth-request for user root service ssh-connection method password [preauth]
debug1: attempt 5 failures 4 [preauth]
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: restore_uid: 0/0
debug1: Kerberos password authentication failed: Client '[email protected]' not found in Kerberos database
debug1: krb5_cleanup_proc called
debug1: PAM: password authentication failed for root: Authentication failure
Failed password for root from 218.65.30.30 port 18460 ssh2
debug1: userauth-request for user root service ssh-connection method password [preauth]
debug1: attempt 6 failures 5 [preauth]
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: restore_uid: 0/0
debug1: Kerberos password authentication failed: Client '[email protected]' not found in Kerberos database
debug1: krb5_cleanup_proc called
debug1: PAM: password authentication failed for root: Authentication failure
Failed password for root from 218.65.30.30 port 18460 ssh2
maximum authentication attempts exceeded for root from 218.65.30.30 port 18460 ssh2 [preauth]
Disconnecting: Too many authentication failures [preauth]
debug1: do_cleanup [preauth]
debug1: monitor_read_log: child log fd closed
debug1: do_cleanup
debug1: PAM: cleanup
debug1: Killing privsep child 20604
debug1: audit_event: unhandled event 12
debug1: inetd sockets after dupping: 5, 5
Connection from 218.65.30.30 port 58146 on 145.100.110.116 port 22
debug1: Client protocol version 2.0; client software version nsssh2_4.0.0032 NetSarang Computer, Inc.
debug1: no match: nsssh2_4.0.0032 NetSarang Computer, Inc.
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
debug1: permanently_set_uid: 106/65534 [preauth]
debug1: list_hostkey_types: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519 [preauth]
debug1: SSH2_MSG_KEXINIT sent [preauth]
debug1: SSH2_MSG_KEXINIT received [preauth]
debug1: kex: algorithm: diffie-hellman-group14-sha1 [preauth]
debug1: kex: Host key algorithm: ssh-rsa [preauth]
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha1 compression: none [preauth]
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha1 compression: none [preauth]
debug1: expecting SSH2_MSG_KEXDH_INIT [preauth]

クライアントマシン:

認証前のkinitおよびklist

$ kinit -p krbuser
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]

Valid starting     Expires            Service principal
06/15/17 00:24:05  06/15/17 10:24:05  krbtgt/[email protected]
    renew until 06/16/17 00:23:56

/etc/ssh/ssh config(抜粋):

    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials yes
#   GSSAPIKeyExchange no
#   GSSAPITrustDNS no

そして最後にSSH認証:

$ ssh [email protected] -vvv
...
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolving "service-0.metz.prac.os3.nl" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to service-0.metz.prac.os3.nl [145.***.***.***] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/client/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
...
debug1: Found key in /home/client/.ssh/known_hosts:3
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug2: set_newkeys: mode 0
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS received
debug2: key: /home/client/.ssh/id_rsa ((nil))
debug2: key: /home/client/.ssh/id_dsa ((nil))
debug2: key: /home/client/.ssh/id_ecdsa ((nil))
debug2: key: /home/client/.ssh/id_ed25519 ((nil))
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-keyex,gssapi-with-mic,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup gssapi-keyex
debug3: remaining preferred: gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-keyex
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug2: we did not send a packet, disable method
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
debug3: send packet: type 50
debug2: we sent a gssapi-with-mic packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: send packet: type 50
debug2: we sent a gssapi-with-mic packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: send packet: type 50
debug2: we sent a gssapi-with-mic packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: send packet: type 50
debug2: we sent a gssapi-with-mic packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
...
debug1: Next authentication method: password
[email protected]'s password: <entering PW of Kerberos user> !!!
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 52
debug1: Authentication succeeded (password).
Authenticated to service-0.metz.prac.os3.nl ([145.***.***.***]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting [email protected]
debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 80
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug3: receive packet: type 91
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug3: send packet: type 98
...
debug3: Ignored env _
debug2: channel 0: request Shell confirm 1
debug3: send packet: type 98
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: Shell request accepted on channel 0
Last login: Thu Jun 15 00:28:57 2017

Connection established

これでklistは次のチケットを表示します:

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]

Valid starting     Expires            Service principal
06/15/17 00:24:05  06/15/17 10:24:05  krbtgt/[email protected]
    renew until 06/16/17 00:23:56
06/15/17 00:27:37  06/15/17 10:24:05  Host/service-0.metz.prac.os3.nl@
    renew until 06/16/17 00:23:56
06/15/17 00:27:37  06/15/17 10:24:05  Host/[email protected]
    renew until 06/16/17 00:23:56

つまり、要約すると、クライアントのKerberosユーザーは、Kerberos(!)パスワードを入力することにより、サーバーへのSSHセッションを確立できます。 UNIXパスワードではありません。 tcpdumpは、クライアントがKerberosユーザーではないrootとして認証されることを示し、なぜkrbuserの代わりにこのユーザー名を使用しているのかわかりません。これは、kinitコマンドで使用したものです。

この認証が正しく機能しない理由を誰かに教えてもらえますか?追加情報が必要な場合はお知らせください。短くしようとした。

4
arne.z

ルートログイン

提供されたログファイルから判断すると、ここでは試行されたルートログインは問題ではありません。 rootとしてのすべての認証試行は218.65.30.30から行われることに注意してください。単純なwhoisコマンドで、これは中国のIPであることがわかります。この認証に正常に関与している他のIP 145.100.110.11{5,6}は両方とも同じ(大学が管理する)ネットブロックからのものです。これらはあなたの興味のあるマシンだと思います。総当たり攻撃を試みているIPをブロックするfail2banのようなものをインストールすることもお勧めします。

SSH

では、Kerberosの問題を解決しましょう。私は最近Kerberos環境をセットアップしましたが、これは困難に満ちていたので、あなたの痛みを感じます! SSH設定は問題ないようですので、除外できます。セキュリティの観点から考えるとよいかもしれませんが、GSSAPIDelegateCredentials yesでの/etc/ssh/ssh_configの設定は実際に必要ですか?このオプションは便利ですが、TGTをSSH接続先の任意のマシンに公開します。

Keberosの警告

Kerberosのセットアップが影響を受ける主なものは、時間のずれと名前解決の2つです。 ここでは時間のずれが問題になる可能性は低いと思います。ただし、これをkerberosログで確認する方が簡単です。最近のGNU/Linuxディストリビューションのほとんどには、ネットワーク時間がすでに設定されています。これはtimedatectlのようなものを使用して確認できます。また、環境内の各ホストに対して、フォワードおよびリバースDNSが正しく設定されていることを確認する必要もあります

レルムについての余談-常に厳密に必要なわけではありませんが、規則はレルムを大文字のままにすることです。これは、GNU/LinuxとWindowsが混在する環境で作業している場合は絶対に必要です。場合によっては、完全に機能しないことがあります。一般的にこれに固執するなら、あなたはあなた自身のために人生を楽にするでしょう。

ホスト名はDNS名およびキータブ名と一致しますか?

ここで最も目立つのは、SPN Host/service-0.metz.prac.os3.nl@からの空のレルムのサービスチケットです。私にとって、これは、ネットワーク設定でファンキーな何かが起こっているようなにおいがしますdefault_realmが正しく設定されているようですエンドホストに問題があると思います。これをデバッグするには、追加のロギング(Sudo /usr/sbin/sshd -p 9001 -D -dd)を使用して、サービスでsshdの新しいインスタンスを開始してから、クライアント(ssh -p 9001 -vv [email protected])から接続することをお勧めします。これにより、認証中に何が起こっているか、実際に使用されているSPNが正確に両側から表示されます。

接続先のサービスが独自のFQDNを知らないために認証が失敗するという問題が最近発生しました(つまり、サービスがHost/service-0@REALMではなくHost/service-0.rest.of.domain@REALMのキータブエントリを見つけようとしました)。これはhostname --fqdnを使用して確認できます。これでシステムの完全なDNS名が返されない場合は、 /etc/hosts を編集できます。 hostname --fqdnの出力がDNSの出力と一致することを確認してください

最後に、正しいSPNを持つ各ホストのキータブファイルがあることを確認します。これはHost/service-0.rest.of.domain@REALMのようになります。 klist -k /path/to/keytabを使用して、キータブファイルの内容を確認できます。幸せなデバッグ!私はKerberosがいかに苛立たしいかを知っています。

核オプション

まだセットアップフェーズの非常に早い段階にある場合は、セットアップを最初から終了してゼロから始める方が簡単かもしれません:)。これらすべてを念頭に置き、適切なガイドに従うことで、長期的には時間を節約できます。

3
rlf

考慮すべき点がいくつかあります。

1.クライアントマシンでサービスチケットを取得できますか?

使用するサービスのチケットを取得できることを確認します。 SSHの場合、これは通常Host/@ REALM、またはあなたの場合はHost/[email protected]です。クライアントマシン(sshも実行している場所)でkvno Host/[email protected]を実行すると、鍵のバージョン番号が通知され、klistにチケットが表示されます。

2.時間同期は正しく行われましたか?

両方のマシンの時刻とタイムゾーンが同じであることを確認してください(そうでない場合、時刻は同じでもタイムゾーンが異なる場合があります)。おそらく、Kerberosを実行するすべてのマシンでNTPを設定するのが最も簡単です。

3.ホストのプリンシパルを/etc/krb5.keytabに追加しましたか?

接続しているマシンには、ホストプリンシパル(Host/@ REALM)のエントリと、正しいキーバージョン番号(手順1で決定したもの)が必要です。ファイルはsshdでも読み取り可能である必要があります

4.基本的なネットワーキングを正しく行いましたか?

Kerberosは、フォワードDNS andリバースDNSを本当に愛しています。実際、これまでデバッグしなければならなかったKerberosの最も奇妙な問題は、DNSの解決の失敗、逆DNSがホストのFQDNを指していない、ホスト名の設定ミスなどに関係していました。

すべてのホストが他のすべてのホストを解決できることを確認してくださいおよび逆。また、すべてのマシンでホスト名が正しく構成されていること(withドメイン名)を確認してください。コマンドhostnamehostname -fhostname -sおよびhostname -iは、適切な結果を返すはずです。


以上のことをすべて言い終えたら、領域の名前を変更することを検討してください。 Kerberosレルムの事実上の標準はALL.CAPSです。したがって、ラボを再構築するとき、または本番環境で開始するときは、ALL.IN.UPPER.CASEである必要があるため、「METZ.PRAC.OS3.NL」となります。これは単なる慣例ですが、多分誰かがそれに依存しています。また、DNSドメインを確認するだけで、ドメインとレルムを区別できます。

1
Andreas Rogge

プリンシパルにクライアントマシン名を追加しましたか?
このコマンドを使用できますlistprincsまたはlist_principalstoこれらの情報を次のようにリストします: enter image description here

また、ユーザーアカウントkrbuserをKDC、client1およびclient2に追加する必要があります。これにより、クライアント1を使用して、Kerberosでクライアント2にsshを実行できます。

これが私のラボです
サーバー:kerberos.example.com
クライアント:client.example.com
client2:client2.example.com

KDCサーバー
/etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 EXAMPLE.COM = {
  kdc = kerberos.example.com
  admin_server = kerberos.example.com
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

/var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 EXAMPLE.COM = {
  master_key_type = aes256-cts
  default_principal_flags = +preauth  
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

/ etc/ssh/sshd_conf

# Kerberos options
#KerberosAuthentication yes
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no

クライアント:

/etc/krb5.confサーバーと同じ、またはサーバーのkrb5.confをこのクライアントにコピーできます。
/etc/ssh/sshd_confサーバーと同じ

client2:

/etc/krb5.confサーバーと同じ、またはサーバーのkrb5.confをこのクライアントにコピーできます。
/etc/ssh/sshd_confサーバーと同じ

結果:

サーバー、クライアント、クライアント2にユーザーアカウントを追加する必要があります。テストでは、user01 toserver、client、client2

サーバ:

[user01@kerberos ~]$ klist
Ticket cache: KEYRING:persistent:1001:1001
Default principal: [email protected]

Valid starting       Expires              Service principal
06/16/2017 07:18:18  06/17/2017 07:18:18  krbtgt/[email protected]

クライアント

[root@client ~]# su - user01
Last login: Fri Jun 16 08:16:28 UTC 2017 from client2.example.com on pts/1
[user01@client ~]$ klist
Ticket cache: KEYRING:persistent:1001:1001
Default principal: [email protected]

Valid starting       Expires              Service principal
06/16/2017 08:16:27  06/17/2017 08:16:27  krbtgt/[email protected]

クライアント2

[root@client2 jason]# su - user01
Last login: Fri Jun 16 08:18:51 UTC 2017 on pts/0
[user01@client2 ~]$ klist
Ticket cache: KEYRING:persistent:1003:1003
Default principal: [email protected]

Valid starting       Expires              Service principal
06/16/2017 08:18:58  06/17/2017 08:18:54  krbtgt/[email protected]

その後、user01からsshをclient2からclientに:

[root@client2 jason]# ssh [email protected]
Password: 
Last login: Fri Jun 16 08:17:59 2017
[user01@client ~]$ 

注:

同時に使用する必要があるkerberosを使用して、[〜#〜] ntp [〜#〜]を設定する必要があります。私のラボでは、彼らはAzureで同じ時間を過ごします。

また、プリンシパルにクライアントマシン名を追加する必要があります。

0
Jason Ye