OpenLDAPでSSH公開鍵を管理

リンクバル技術部の川畑です。サーバーのログインユーザーのSSH公開鍵についてOpenLDAPで管理できないか調査しました。OpenSSHをソースからコンパイルしてとかいろいろ情報がありましたが、Ubuntu 14.04.1 LTSではOpenSSH 6.6.1p1がapt-getで入手できるのでスキーマファイルをダウンロードしてincludeするだけで簡単に設定できそうなので検証してみました。

検証環境

  • OS:Ubuntu 14.04.1 LTS
  • OpenSSH:6.6.1p1
  • OpenLDAP:2.4.31

LDAPサーバ側の設定

まずLDAPサーバでの設定手順

1.OpenLdapサービス停止

[bash] sudo su –
service slapd stop
[/bash]

2.スキーマファイルをダウンロード

[bash] cd /usr/local/src
wget https://openssh-lpk.googlecode.com/files/openssh-lpk_openldap.schema
[/bash]

3.スキーマディレクトリにコピー

[bash] mv openssh-lpk_openldap.schema /etc/ldap/schema
[/bash]

4.slapd.conf編集

[bash] vi /etc/ldap/slapd.conf
————————————————————
include /etc/ldap/schema/openssh-lpk_openldap.schema
————————————————————
[/bash]

5.ConfigDB削除

[bash] rm -rf /etc/ldap/slapd.d/*
[/bash]

6.ConfigDB再作成

[bash] slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/
chown -R openldap:openldap /etc/ldap/slapd.d
[/bash]

7.OpenLdapサービス起動

[bash] service slapd start
[/bash]

※これでLDAPのAttributeに「sshPublicKey」が表示され公開鍵が追加可能に

LDAPクライアント側の設定

sshdがLDAPサーバのSSH公開鍵を取得するようにする設定手順

1.LDAPサーバからSSH公開鍵を取得するスクリプト

※やっていることはLDAPサーバに接続して「ldapsearch」の結果から公開鍵だけ抽出

[bash] vi /opt/ssh-command/LdapGetSSHKey.sh
————————————————————
#!/bin/bash

uri=ldap://<LDAP-SERVER>
binddn="<BIND-USER>"
bindpw=<PASSWORD>
base="<BASE>"
uid=$1

ldapsearch -LLL -H ${uri} -w "${bindpw}" -D "${binddn}" -b "${base}" "(& (objectClass=posixAccount) (uid=${uid}))" "sshPublicKey" | sed -ne ‘2,$p’ | sed -e ‘s/sshPublicKey: //g’ | sed -e ‘s/^ //g’ | tr -d ‘\n’
————————————————————
[/bash]

2.sshdに認証コマンドの設定

[bash] vi /etc/ssh/sshd_config
————————————————————
AuthorizedKeysCommand /opt/ssh-command/LdapGetSSHKey.sh
AuthorizedKeysCommandUser root
————————————————————
[/bash]

おわりに

今回の検証で、SSH公開鍵をOpenLDAPで管理できることを確認できました。まだまだ課題はありますが、本格的に運用できればと考えております。

リンクバルでは エンジニアを積極募集中 です。興味のある方のご応募お待ちしております。