«前の日記(2014-09-29 (Mon)) 最新 次の日記(2014-10-03 (Fri))» 編集

雑記帳


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:"の箇所で、ワンタイムパスワードを入力して成功すると、ログインできる。