土曜日, 4月 12, 2008

LDAPでSSHの鍵認証を利用してみる

sshでOpenLDAPのユーザでログインするときにパスワード認証が嫌だったんですが、
鍵で認証するには従来のユーザーホーム配下に.sshディレクトリを作ってauthroized_keysを用意すればいいってもんじゃないらしい。sshにパッチを当てていろいろとしないとダメみた
い。。。

参考にしたのは
普段はyumでパッケージを入れてるんであんまりmakeとかしないんですけど、
せっかくなので、挑戦してみた。

手順1:まず必要なものをそろえる
とりあえず、OpenSSH-Serverのソースがないと始まらないので
yumdownloder --source openssh-server
でソースのrpmを持ってきます。

あわせて、LDAPで鍵認証を可能にするパッチを
wget http://dev.inversepath.com/openssh-lpk/openssh-lpk-4.6p1-0.3.9.patch
で拾ってきます。
※sshとパッチのヴァージョンが若干違いますが、とりあえず動きます。
同じところにあるLDAPのスキーマファイルも拾ってきます。
wget http://dev.inversepath.com/openssh-lpk/openssh-lpk_openldap.schema

現時点では
openssh-4.7p1-4.fc8.src.rpm
がダウンロードできます。
rpm -Uvh openssh-4.7p1-4.fc8.src.rpm
でとりあえず。ソースを/usr/src/redhatに展開します。
(kojibuilderユーザを作っておくと警告が出ないです。)
中身を見てみるといろいろとパッチがあったりしますが、
openssh-4.7p1-noacss.tar.bz2
を解凍します。

とりあえず、必要なものは一通りそろいました。

おまけにyumでopenssh-serverも入れときます。

手順2:LDAPの設定ファイルを修正・エントリーの変更
slapd.confでさっき拾ってきたopenssh-lpk_openldap.schemaをincludeします。
※selinuxを使っている場合にはラベルが違う場合があるのでラベルを変えてあげる必要があります。
僕の場合は
chcon -t etc_t /etc/openldap/schema/openssh-lpk_openldap.schema
としました。(ラベルが違うとLDAPが起動してくれません。。。)
エントリーは変更したいユーザのldifをldapsearchで持ってくればいいかと思います。
そのファイルに
  • objectClass: ldapPublicKey
  • sshPublicKey: ssh-dss (長いんで省略)
を追加して、ldapmodifyで変更してあげればユーザーの準備はOKです。

手順3:SSHにパッチを適用そしてmake
まずはソースのあるディレクトリに移動します。僕はFedora8を使っているので、他のディストリビューションだと若干違うのかもしれませんが。。。
cd /usr/src/redhat/SOURCES/openssh-4.7p1
まずはパッチを当ててみましょう。
※selinuxを利用しているときはラベルの確認をしてください。
僕の場合はchcon -t src_t openssh-lpk-4.6p1-0.3.9.patchとしました。
patch -p2 < ../openssh-lpk-4.6p1-0.3.9.patch
これでOKです。
まずは、configure をします。
./configure --with-ldap -prefix=/usr --sysconfdir=/etc/ssh --with-pam
ここで、僕の場合はyumで入れたsshを上書きするようにしてしました。
あとは、何も考えることなく
make
make install

手順4:確認
ldd /usr/bin/ssh | egrep '(ldap|lber)'
で確認してみます。
libldap-2.3.so.0 => /usr/lib64/libldap-2.3.so.0 (0x00002aaaab00f000)
liblber-2.3.so.0 => /usr/lib64/liblber-2.3.so.0 (0x00002aaaac223000)
こんな具合にリンクが取れていればOKです。
で、あとはmake install時のメッセージを見てもらえればわかるんですが、sshd_configファイルが上書きされて、LDAP関連の設定がコメントで入っています。
僕が変えたのは
  • UseLPK yes
  • LpkLdapConf /etc/ldap.conf
  • LpkServers ldap://127.0.0.1
  • LpkUserDN ou=Users,dc=gradhin,dc=org
  • LpkGroupDN ou=Groups,dc=gradhin,dc=org
  • LpkForceTLS no
こんな具合に設定してあげます。
あとはservice sshd restartとしてあげれば無事に起動します。

あとは鍵認証で接続できるか確認してみましょう。
.sshディレクトリがなくても接続できるはずです。

0 件のコメント:

failed to read qemu headerのときのメモ

かなり久々。。。 忘れないようにここに書きこんでおく。 ちょっとした手違いで libvirtでイメージを起動しようとすると failed to read qemu header なんておっしゃられて起動しない。。。 vmwareserverを使って...