Let's LDAP
VMが動いたところで、LinuxのPAMでLDAPを使ってみる。ずらっと作業メモ。
@IT "LDAPによるパスワードの一元管理"を読みつつ。
インストール
最近はコマンド一発でインストールできる便利な時代。
さくっと openldap-serversパッケージをインストール。
自動的にldapユーザーとldapグループまで用意される。
/etc/ssl/openldap/にSSLのとりあえず用鍵まで用意されている。
至れり尽くせり。
サーバー起動
/etc/openldap/slapd.confをちらっと見てみると、インストールしただけで dc=example,dc=com なディレクトリが設定済み。
SSL用の鍵も設定してあるので、何も考えずに
/etc/init.d/ldap start
でldapもldapsも両方起動完了。なんだこりゃ。
これだと管理用パスワードとか全然わからないので、再度/etc/openldap/slapd.confをチェック。
rootdn "cn=Manager,dc=example,dc=com"
らしいので、メモメモ。
rootpwがコメントアウトしてある。良くわからないが、とりあえず平分で適当に指定しておく。
rootpw "HogePw"
openldapを再起動。
ログインパスワード連動
コマンド一発で nss_ldapパッケージと pam_ldapパッケージをインストール。
nsswitchとPAMが参照するLDAPの設定ファイルは/etc/ldap.confらしいので、見てみる。
これは検索ディレクトリがdc=example,dc=comでは無かったので、変更。
base dc=example,dc=com
hostはlocalhostになっているので、放っておく。
nsswitchの設定を変更して、LDAPを検索するようにする。
/etc/nsswitch.confを変更。
passwd: files nisplus ldap shadow: files nisplus ldap group: files nisplus ldap
NIS+は使っていないけど、害はなさそうなので放っておいてみる。
ホスト名の名前解決などは、今回はとりあえずそのままにしておく。
続いてPAM認証の元締め、system-authがLDAPを参照するようにする。
/etc/pam.d/system-authは/etc/pam.d/sshやlogin、xdmなども参照しているので、これを設定するだけでsshなども同時に設定される。(参照している、と言っても、参照するようにディストリビューションがうまくやってくれているだけで…)
/etc/pam.d/system-authを編集。
... auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so ... account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] pam_ldap.so account required pam_deny.so ... password sufficient pam_ldap use_authtok password required pam_deny ... session optional pam_ldap.so
設定の意味は良くワカラナイが、とりあえずよしとする。
近ごろのデーモン方々は大方PAMを参照できるので、PAMでLDAPが使えれば、大方のサービスをLDAPで認証できる、と。
LDAPにユーザーを追加
ここからはOpenLDAP構築メモとFreeBSD 5.1-RELEASEにおける新機能の概要と活用例 (2/6)を読みつつ。FreeBSDだろうとアカウントの記述方法は同じだと思う…posixとか書いてあるし。
さくっとldap-clientsパッケージをインストール。
とりあえず動作確認。
ldapsearch -h localhost -x -b '' -s base'(objectclass=*)' namingContexts
これで動作確認ができるらしいので、そうする。
namingContexts: dc=example,dc=com などなどと表示されているので、OKの模様。
最初のエントリ。ドメインのエントリ?要るので作れと。
init.ldifファイルを作成
dn: dc=example,dc=com objectclass: dcObject objectclass: organization o: example.com Hoge dc: example
そしてLDAP追加。
ldapadd -x -d 'cn=Manager,dc=example,dc=com' -W -f init.ldif
パスワードはHogePw
続いて、管理者のエントリ。コレも要るので作れと。
manager.ldif
dn: cn=Manager,dc=example,dc=com objectClass: organizationalRole cn: Manager
そしてLDAPに追加。
ldapadd -x -d 'cn=Manager,dc=example,dc=com' -W -f manager.ldif
ユーザーを格納するエントリ。だんだんわかってきた。
posix-user.ldif
dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People
ldapadd -x -d 'cn=Manager,dc=example,dc=com' -W -f posix-user.ldif
グループを格納するエントリ。
posix-group.ldif
dn: ou=Group,dc=example,dc=com objectClass: organizationalUnit ou: Group
ldapadd -x -d 'cn=Manager,dc=example,dc=com' -W -f posix-group.ldif
そしてユーザーを登録。
user-hoge.nidl
dn: uid=hoge,ou=People,dc=example,dc=com uid: hoge objectClass: account objectClass: posixAccount objectClass: shadowAccount uidNumber: 10000 gidNumber: 10000 gecos: Hoge Hoge Foo Bar homeDirectory: /home/hoge loginShell: /bin/bash cn: Hoge userPassword: {MD5}6nA+eqHv2gBk6qUH2eirfg== shadowLastChange: 10000 shadowMin: 0 shadowMax: 99999 shadowWarning: 14 ShadowInactive: 99999 shadowExpire: -1
userPasswordは
slappassword -h '{MD5}'
で求める。このパスワードは安直に'hoge'
いざ登録。
ldapadd -x-D 'cn=Manager,dc=example,dc=com' -W -f user-hoge.ldif
忘れずにグループも登録。
group-hoge.ldif
dn: cn=hoge,ou=Group,dc=example,dc=com cn: hoge objectClass: posixGroup gidNumber: 10000 memberuid: hoge
ldapadd -x-D 'cn=Manager,dc=example,dc=com' -W -f group-hoge.ldif
objectClass: posixAccountやposixGroup、shadowAccountの宣言はnis.schemaにあるらしい。objectClass: acountはcosine.schema。
使ってみる
hoge用のホームディレクトリを作っておく。
cp -R /etc/skel /home/hoge chown -R hoge:hoge /home/hoge
…いや待て。chown hoge:hogeの時点でLDAPが稼働しているのではないか…。
確認のためSSHでログイン。
ssh hoge@localhost
…ログイン成功。問題なし。
…そんなもんですか…。最近のディストリビューションは凄いですね…。