パンダのメモ帳

技術系のネタをゆるゆると

CentOS 5.4にOpenSSH-LPKを導入する

CentOS 5.4にOpenSSH-LPKを導入した時のメモ。

2012-12-17 追記:CentOS 6 では標準パッケージのみでLPK対応が可能になった。 → CentOS6.3 に openssh-ldap を導入する - パンダのメモ帳

1. OpenSSH-LPKとは?

LPKは LDAP Public Keys の略で、その名の通りSSHの認証に用いるRSA公開鍵をLDAPで管理する機能の事。
非常に便利な機能なのだが残念ながら標準のOpenSSHでは対応しておらず、パッチ等で提供されているのが現状だ。当然、CentOSのyumでインストールできるパッケージにも含まれていないので、ソースからインストールするかサードパーティ製のrpmを利用するしかない。導入するかどうかは慎重に検討するべきだ。

2. 要件と仮定

今回の要件は以下の通り。

  • LDAPでRSA公開鍵を管理し、そのRSA公開鍵による認証を実現する。

便宜上、設定等について下記の通り仮定する。

  • LDAPサーバーのアドレスは "127.0.0.1" とする。
  • ユーザー情報は "ou=People,dc=example,dc=jp" 以下に存在するものとする。
  • グループ情報は "ou=Group,dc=example,dc=jp" 以下に存在するものとする。

LDAPサーバー(OpenLDAP)の構築については以下の記事で解説している。

上記の手順に従ってLDAPサーバーを構築している場合、LPK対応に際してLDAPサーバーの設定変更は必要ない。

3. 標準パッケージのアンインストール

導入を決定したら、まず標準のOpenSSHパッケージを削除する必要がある。以下のコマンドでインストール済みのOpenSSH関連パッケージを確認する。

[root@localhost ~]# yum list installed | grep openssh
openssh.i386                            4.3p2-36.el5_4.2               installed
openssh-clients.i386                    4.3p2-36.el5_4.2               installed
openssh-server.i386                     4.3p2-36.el5_4.2               installed

以下のコマンドで、上記3パッケージが全てアンインストールされる。

[root@localhost ~]# service sshd stop
[root@localhost ~]# yum -y remove openssh

4. インストール


今回は http://mirror.proserve.nl/repo/centos/5/i386/ にあるLPK対応のRPMからインストールすることにする。複数のバージョンが存在するが、標準に近いバージョンを選ぶのが無難。というわけで今回は 4.3p2-26 を選択した。

[root@localhost ~]# rpm -ivh http://mirror.proserve.nl/repo/centos/5/i386/openssh-4.3p2-26.lpk.i686.rpm
[root@localhost ~]# rpm -ivh http://mirror.proserve.nl/repo/centos/5/i386/openssh-clients-4.3p2-26.lpk.i686.rpm
[root@localhost ~]# rpm -ivh http://mirror.proserve.nl/repo/centos/5/i386/openssh-server-4.3p2-26.lpk.i686.rpm


(2012-02-24 追記)
上記手順で行うと、OpenSSH に依存したパッケージがインストールできなくなる。問題の発生しない手順は次の通り。

4-1. proserve リポジトリを yum に追加する

下記コマンドを実行する。

[root@localhost ~]# rpm -Uvh http://repo.proserve.nl/proserve-repo-latest.noarch.rpm

/etc/yum.repos.d 以下に proserve.repo がインストールされるので、必要に応じて編集する(enabled=0 にするとか pirority を変更するとか)

4-2. インストール

下記コマンドを実行。

[root@localhost ~]# yum --enablerepo=proserve --disablerepo=updates,base install openssh-server openssh-clients

proserve リポジトリで管理されている OpenSSH 関連パッケージはすべて LPK対応なのでこの手順でLPK対応バージョンをインストールすることができる。
(追記ここまで)

5. SSHサーバーの設定

LPKに関する最低限の設定についてのみ記述する。以下の設定を /etc/ssh/sshd_config ファイルに追加することで、LPKによる認証が可能になる。

項目名 設定値 説明
UseLPK yes LPKを使用するか否か。"yes"に設定することでLPKが有効になる。
LpkServers ldap://127.0.0.1 認証に使用するLDAPサーバーの指定。
LpkUserDN ou=People,dc=exmaple,dc=jp ユーザー情報を格納するDN。
LpkGroupDN ou=Group,dc=exmaple,dc=jp グループ情報を格納するDN。
LpkForceTLS no LDAPサーバーとの接続にTLSを使用するか否か。TLSを使用できる場合は"yes"。

その他の設定項目の内、特に重要な部分についてはOpenSSHの設定で解説しているので、必要があれば参照してほしい。
設定を変更したら、sshdを起動する。また、次回から自動的に起動するように設定する。

[root@localhost ~]# service sshd start

6. LDAPサーバーの設定

LDAPサーバーの構築時にOpenSSH-LPK対応を行っていない場合、LDAPサーバーの設定を変更する必要がある。
まずはRSA鍵を格納する ldapPublicKey属性を使用するために必要となるスキーマを導入する。

[root@localhost ~]# wget http://dev.inversepath.com/openssh-lpk/openssh-lpk_openldap.schema
[root@localhost ~]# mv openssh-lpk_openldap.schema /etc/openldap/schema/

次に /etc/openldap/slapd.conf に以下の行を追加する。

include         /etc/openldap/schema/openssh-lpk_openldap.schema

設定を反映させるためにLDAPサーバーを再起動する。

[root@localhost ~]# service ldap restart

7. RSA鍵の登録

すでにLDAPに登録されているユーザーにRSA鍵の情報を追加する。hogeユーザーにRSA鍵を登録する場合、LPK.LDIFを以下のように作成する。

[root@localhost ~]# vim LPK.LDIF
dn: uid=hoge,ou=People,dc=exmaple,dc=jp
changetype: modify
add: objectClass
objectClass: ldapPublicKey
-
add: sshPublicKey
sshPublicKey: hogeユーザーのRSA公開鍵

ファイルを作成したら ldapmodify コマンドを実行する。

[root@localhost ~]# ldapmodify -x -W -D "cn=Manager,dc=exmaple,dc=jp" -f LPK.LDIF
Enter LDAP Password: (管理用パスワードを入力)
modifying entry "uid=hoge,ou=People,dc=exmaple,dc=jp"

試しにhogeユーザーでSSH接続を行い、うまくログインできれば成功。