雑記帳
2014-10-01 (Wed) [長年日記]
■ [Linux] sshでGSSAPIを使ったシングルサインオン(SSO)
Linuxで、Active Direcotryを使った認証ができるようになったので、次はsshのシングルサインオン(SSO)をやってみた。
認証基盤の構成は、以前のエントリ RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (2)を参照のこと。
サーバの設定
sshdでGSSAPIを使うには、GSSAPIAuthenticationをyesにする。デフォルトでは有効になっているはず。 また、AuthenticationMethodsに、gssapi-keyex, gssapi-with-micを追加する。これまでの設定で、keyboard-interactiveのみになっていたので、追加すると、下記のようになる。
AuthenticationMethods gssapi-keyex gssapi-with-mic keyboard-interactive
設定が追記できたら、sshd -tで確認の上、sshdを再起動する。
DNSの設定
Linuxのホストの場合、Active Directoryに登録しただけでは自動的にDNSにレコードが登録されていない可能性がある。その場合は、GSSAPIを使った認証が失敗してしまう(Kerberosは名前がとても重要なのだ)。そのため、きちんと名前解決ができるようにDNSの設定をする。正引きだけでなく、逆引きについても登録が必要となる。
せっかくなので、PowerShellで登録してみた。
PS> Add-DnsServerResourceRecordA -ZoneName example.local -IPV4Address 10.0.128.195 -Name server01 PS> Add-DnsServerResourceRecordPtr -ZoneName 0.10.in-addr.arpa -Name 195.128 -PTRDomainName server01.example.local
クライアントの設定
今回の対象はOS X(10.9.5)とする。
コンピュータ名の変更
Active Directoryのドメインに参加させる必要があるので、その準備として、ホスト名を適切なものに変更する。
% sudo scutil --set HostName test01.example.local % sudo hostname test01
ドメインへの参加
MacをActive Directoryのドメインに参加させる。
% dsconfigad -add example.local -username <domain_administrator>
時間が掛かるので、少し待つ。問題なければなにも出力されないはず。 これで、ADのアカウントでMacにログインできるようになる。
ADアカウントでログイン
Macに対して、ADアカウントでログインした状態で、sshでサーバにログインする。 その際、GSSAPIAuthentication=yesを指定する(または、~/.ssh/configに設定を追記する)。
$ ssh -v -o GSSAPIAuthentication=yes isobe@server01.example.local OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011 debug1: Reading configuration data /etc/ssh_config debug1: /etc/ssh_config line 20: Applying options for * debug1: Connecting to server01.example.local [10.0.128.195] port 22. debug1: Connection established. (snip) debug1: Authentications that can continue: gssapi-keyex,gssapi-with-mic,keyboard-interactive debug1: Next authentication method: gssapi-keyex debug1: No valid Key exchange context debug1: Next authentication method: gssapi-with-mic debug1: Authentication succeeded (gssapi-with-mic). Authenticated to server01.example.local ([10.0.128.195]:22). debug1: channel 0: new [client-session] debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: Sending environment. debug1: Sending env LANG = ja_JP.UTF-8 Last login: Wed Oct 1 20:39:04 2014 from test01.example.local [isobe@server01 ~]$
GSSAPIを使ってログインしていることを示すため、-vオプションを付与して、debug1ログを出力している。"Authentication succeeded (gssapi-with-mic)."と出力されている通り、GSSAPIを使って認証が成功している。
これで、パスワードや公開鍵を使わずにログインすることができた。
ちなみに、GSSAPIが使えない場合は、前回までの設定のとおり、パスワードとワンタイムパスワードの認証が有効になる。
■ [Linux] GSSAPIとGoogle Authenticatorを連動させる
GSSAPIを使って、認証情報をユーザが入力せずにログインできるようになったのだが、天から声が聞こえてきた。
サーバにログインするためには、必ずどこかでワンタイムパスワードを必須にせよ。
むむ。そうすると、Macにログインするときに、ワンタイムパスワードを使うことはできないので、サーバにログインするタイミングで必須にしないといけない。
ということで、sshdの設定を下記のように変更した。
/etc/pam.d/sshd
以前は、auth substackとして、password-authを入れていたのだが、それを削除する。
#%PAM-1.0 auth required pam_sepermit.so auth substack google-auth auth include postlogin account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth session include postlogin
/etc/ssh/sshd_config
前回は、gssapi-with-micまたはkeyboard-interactiveとしていたが、gssapi-with-micおよびkeyboard-interactiveと変更する。
AuthenticationMethods gssapi-with-mic,keyboard-interactive
この設定でログインしてみよう。
$ ssh -v -o GSSAPIAuthentication=yes isobe@server01.example.local Authenticated with partial success. Verification code: Last login: Wed Oct 1 22:10:08 2014 from test01.example.local [isobe@server01 ~]$
最初に"Authenticated with partial success."と出力されているのが、GSSAPIで認証の一部が成功していることを表している。その後、"Verification code:"の箇所で、ワンタイムパスワードを入力して成功すると、ログインできる。