SSO; Single Sign-On
一回承認を通れば、他のコンピュータに認証なしでログインできる。

ここでは研究室内のADドメインに参加したwindowsPCに一端ログインすれば、
そこから計算マシンへのログイン認証が不要になる設定を取り上げる。

また研究室内限定のWebコンテンツに、ADドメイン内からのアクセスなら認証不要で、
それ以外からのアクセスの場合は認証をと止める仕組みも取り上げる

2015y12m01d_232839751.png

1./etc/krb5.keytabの準備

* Linuxマシンをmember serverに仕立てる際、sssdによる方法とwinbindによる方法の2つを取り上げた。ここでの対象は前者のsssdです
「net join」でドメインに参加した際、keytabファイルは各マシンに存在する。
SSOを行うにはこのkeytabファイルにサービス記述子hostとなるサービスプリンシパルの存在が必要となる。

現行のkeytabファイルにサービス記述子hostであるサービスプリンシパルが存在するかは
「klist -ke <keytabファイル>」にて調べられるが、存在しなければ発行元であるドメインコントローラにて再発行する

[root@c ~]# rm /etc/krb5.n1.keytab
[root@c ~]# /opt/samba/bin/samba-tool domain exportkeytab /etc/krb5.n1.keytab --principal=n1$
[root@c ~]# /opt/samba/bin/samba-tool domain exportkeytab /etc/krb5.n1.keytab --principal=host/n1.sybyl.local
[root@c ~]#
[root@c ~]# klist -ke /etc/krb5.n1.keytab
Keytab name: FILE:/etc/krb5.n1.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 n1$@SYBYL.LOCAL (des-cbc-crc)
   1 n1$@SYBYL.LOCAL (des-cbc-md5)
   1 n1$@SYBYL.LOCAL (aes128-cts-hmac-sha1-96)
   1 n1$@SYBYL.LOCAL (aes256-cts-hmac-sha1-96)
   1 n1$@SYBYL.LOCAL (arcfour-hmac)
   1 host/n1.sybyl.local@SYBYL.LOCAL (des-cbc-crc)
   1 host/n1.sybyl.local@SYBYL.LOCAL (des-cbc-md5)
   1 host/n1.sybyl.local@SYBYL.LOCAL (aes128-cts-hmac-sha1-96)
   1 host/n1.sybyl.local@SYBYL.LOCAL (aes256-cts-hmac-sha1-96)
   1 host/n1.sybyl.local@SYBYL.LOCAL (arcfour-hmac)
[root@c ~]#

*サービスプリンシパルサービス記述子(host)は小文字で
このkeytabファイルを再度n1サイトに送り上書きする。

[root@c ~]# scp /etc/krb5.n1.keytab root@n1:/etc

n1サイト側では、この /etc/krb5.n1.keytab/etc/krb5.keytabにリンクを張る。
*もしくはドメインコントローラからのコピーの際に/etc/krb5.keytabとしてもいいかも

[root@n1 ~]# ln -s /etc/krb5.n1.keytab /etc/krb5.keytab
[root@n1 ~]# ls -l /etc/krb5.keytab
lrwxrwxrwx. 1 root root 19 12月 12 11:03 /etc/krb5.keytab -> /etc/krb5.n1.keytab
[root@n1 ~]#

2./etc/krb5.confの調整

kerberosサーバはドメインコントローラですよと定義します

[root@n1 ~]# vi /etc/krb5.conf
[libdefaults]
  default_realm = SYBYL.LOCAL
  dns_lookup_realm = false
  dns_lookup_kdc = true
[realms]
 SYBYL.LOCAL = {
  kdc = c.sybyl.local
  admin_server = c.sybyl.local
 }
[domain_realm]
  .sybyl.local = SYBYL.LOCAL
   sybyl.local = SYBYL.LOCAL
[root@n1 ~]#

3.sshdの設定を調整

/etc/ssh/sshd_configGSSAPIAuthenticationGSSAPICleanupCredentials を有効にして、sshdを再起動する

[root@n1 ~]# egrep "^GSSAPIAuthentication|^GSSAPICleanupCredentials" /etc/ssh/sshd_config
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
[root@n1 ~]#
[root@n1 ~]# systemctl restart sshd

4.GSSAPI対応ターミナルソフトの入手とインストール

windows端末にGSSAPI対応ターミナルソフトをインストールします。ここでは PuTTY を使用します。

本家様 http://www.chiark.greenend.org.uk/~sgtatham/putty/
ダウンロードページ http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html から
putty.exeをクリックしてダウンロード。
2014y06m17d_230432788.png
これを例えば C:\Program Files(x86)\PuTTY\ に置く
2014y06m17d_231231117.png
*putty.exeのショートカットを作成して、C:\Users\Default\Desktopに配置すれば、初回ログイン時にディスクトップにショートカットが配置される

5.PuTTY設定

windowsマシンにドメインログインして、PuTTYを起動する
左側のツリーで「Session」を開き、パスワードなしでアクセスしたいLinuxサーバを指定します。
2015y03m21d_225810642.png
次に、「Connection」->「Data」にて、「Use system username(illya)」を選択します。これでログインユーザでのアクセスとなる。
2015y03m21d_225844378.png
最後に「Connection」->「SSH」->「Auth」->「GSSAPI」にて「Allow GSSAPI credential delegation」を有効にする。
2015y03m21d_225909866.png

このように定めた設定を保存します。
左側のツリーの「Session」から「Saved Sessions」として「gssapi_N1」と定義して「Save」ボタンをクリックします。
2015y03m21d_230019569.png

6.接続テスト

接続設定名「gssapi_N1」を引き出して、アクセスを試みます。
左側のツリーの「Session」から保存した設定「gssapi_N1」を選び「Load」ボタンをクリックします。
2015y03m21d_230419946.png
そして、PuTTY画面下部の「Open」ボタンをクリックします。
2014y06m17d_234847788.png
初回にマシンキーの登録が求められるが「はい」を押します。
すると、パスワードなしでLinuxメンバサーバにログインできる。
2015y03m21d_231007378.png

7.ショートカットの作成

上記のままだと、機動の度に接続設定名を再読み込む必要があり面倒です。それを簡略化する方法としてショートカットを作成します。
C:\Program Files(x86)\PuTTY\ に配置したPuTTY.exeのショートカットをディスクトップらに作ります。
2014y06m18d_002623359.png

作ったショートカットの「プロパティ」を開いて、「リンク先」入力欄のPuTTY.exeに保存したセッション名を引数として加えます。

"C:\Program Files (x86)\PuTTY\putty.exe"  -load gssapi_N1

「作業フォルダ」入力欄は、そのままでもいいが、ホームディレクトリ(%HOMEPATH%)でも宜しいかと。
2015y03m29d_114800463.png
これで、このショートカットをダブルクリックすれば、パスワードの入力なしに、Linuxメンバサーバにアクセスできます。
*なのでこのショートカットの名称を N1 とかマシン名にすればいいのかな

8.メモ

留意 設定が完了したら[save]する事。しないとその場限りです。

  • [Ctl-D]で警告なしでPuTTYの画面を閉じるには
    PuTTYのトップウインドウ枠を右クリックして「Change Settings...」から「PuTTY Reconfiguration」を呼び出す。
    そしてCategoryで「Window」->「Behaviour」を選択して、「Warn before closing window」チェックを外す
    2015y03m29d_115518545.png
  • 画面に表示されているフォントを変更するには
    「PuTTY Reconfiguration」のCategoryで「Window」->「Appearance」を選択してFont setting欄の「Font used in the terminal window」で「Change...」ボタンをクリックして使用するフォントを変更する。
    2015y03m29d_115957250.png
    *上図は、MSゴシックで9pointのフォントを選択している
  • 画面配色を変更するには
    「PuTTY Reconfiguration」のCategoryで「Window」->「Colours」の「Adjust the precise colours PuTTY displays」にて行う。
    Default Foregroundは画面上の文字色で、ここではRGB値で(0,0,128)[青]を指定している
    2015y03m29d_120329018.png
    Default Backgroundは画面の背景色で、ここではRGB値(255,255,255)[白]を指定している
    2015y03m29d_120549442.png
  • Loggingして「Event Log: GSSAPI authentication request refused」と言われる
    接続相手先のkeytabファイルに、サービス記述子hostサービスプリンシパルがないかもしれない。
    klistやsamba-toolで確認してください

ログインしたLinuxマシンからsso経由で別のLinuxマシンへ

経路的には windowsPC --> LinuxA --> LinuxB へとパスワードなしで渡り歩きたい。
Hostbase認証やら .ssh/authorized_keys 方式を施せば、パスワード認証なしで LinuxA --> LinuxB は行けます。
ここでは、これらの方法を使わず、あくまでも sso 経由で行きたい場合を記す

ssh先となるサーバ側の設定は前述のとおり/etc/krb5.keytab/etc/ssh/sshd_configそれと/etc/krb5.confの調整を済ませておく。
ssh接続を行うクライアント側では /etc/ssh/ssh_config もしくは .ssh/ssh_config に下記のようにする

Host *
  GSSAPIAuthentication yes
  GSSAPIDelegateCredentials yes

こうすれば、 LinuxA --> LinuxB もsso経由で渡り歩ける

不明な点

windowsPC(出発点, windows login) --> LinuxA において、

  • windowsPC(putty,GSSAPI) --(パスワード無し)-> Linux(ADDC)はTicket cacheも作成される(/tmp/krb5cc_1001_xxxxxとか)
  • windowsPC(putty,GSSAPI) --(パスワード無し)-> Linux(DM)はTicket cacheは作れない
  • windowsPC(teraterm) --(パスワード入力)--> Linux(ADDC)は、Ticket cacheも作成される(/tmp/krb5cc_1001_xxxxxxとか)
  • windowsPC(teraterm) --(パスワード入力)--> Linux(DM)は、Ticket cacheも作成される(/tmp/krb5cc_1001_xxxxxxxとか)
  • windowsPC(teraterm) --(秘密鍵)--> Linux(ADDC)は、Ticket cacheは作れない

当然なのだが、Ticketがないと、そのままでは次へ(-->LinuxB)にパスワードなしログインは出来ない。
「kinit」を実行してTicketを用意する必要がある

ssh接続

ホストベース接続も有効にしていると、ssoでログインできたのか確認が難しい。「-v」を付与して実行すればわかるのだが、、
もっと明示的に確認するにはsshに「-o」を付与して接続を試みる

(チケットを破棄する)
[illya@n1 ~]$ kdestroy
kdestroy: No credentials cache found while destroying cache
 
(破棄の確認)
[illya@n1 ~]$ klist
klist: No credentials cache found (filename: /tmp/krb5cc_1002)
 
(チケットを取得)
[illya@n1 ~]$ kinit
Password for illya@SYBYL.LOCAL:
 
(取得したチケットの確認)
[illya@n1 ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_1002
Default principal: illya@SYBYL.LOCAL
 
Valid starting       Expires              Service principal
2017-07-09T18:14:03  2017-07-10T04:14:03  krbtgt/SYBYL.LOCAL@SYBYL.LOCAL
        renew until 2017-07-16T18:14:00
[illya@n1 ~]$
 
[illya@c ~]$ ssh -o HostbasedAuthentication=no -o GSSAPIAuthentication=yes n1 -v
 :
debug1: Authentication succeeded (gssapi-with-mic).
 :
Last login: Sun Jul  9 18:13:41 2017 from c.sybyl.local
[illya@n1 ~]$

Authentication succeeded (gssapi-with-mic)」とあれば、チケットを使ってssoがうまく行った
ホストベースでの接続を確認するには

[illya@c ~]$ ssh -o HostbasedAuthentication=yes -o GSSAPIAuthentication=no n1 -v
 :
debug1: Authentication succeeded (hostbased).
 :
Last login: Sun Jul  9 18:18:33 2017 from c.sybyl.local
[illya@n1 ~]$

と「Authentication succeeded (hostbased)」と表記される


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-07-09 (日) 18:21:37 (105d)