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" 以下に存在するものとする。
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接続を行い、うまくログインできれば成功。