SCSI RAIDカードが壊れたサーバ の復旧で、CentOS を4.6から5.1に変更。ついでに一般ユーザー管理をLDAPに移行してしまおうと。以前からLDAPサーバは立ち上げてあったので移行はそれほど苦労しなかったのですが、ProFTPD がPAM+LDAP(pam_ldap.so)で認証してくれず、ログには no such user 'foo'と出る。
どうやらProFTPDは認証以外のユーザー名・UID・GIDといった情報を/etc/passwdから取っているらしい。今回それらの情報はLDAPに入れてあり/etc/passwdにはなかったのがエラーの原因で、/etc/passwdにも情報を入れると認証してくれる(/etc/shadowは不要)。だけどProFTPDのために/etc/passwdを復活させるのは本末転倒。
というわけで、ProFTPDを
./configure --with-modules=mod_ldap
でビルド。設定は/etc/openldap/slapd.conf
access to attrs=userPassword
by self write
by dn="cn=manager,dc=example,dc=com" write
by anonymous auth
by * none
access to *
by self write
by dn="cn=manager,dc=example,dc=com" write
by * read
/usr/etc/proftpd.conf
AuthOrder mod_ldap.c mod_auth_unix.c
LDAPServer ldap.server
LDAPDoAuth on "dc=example,dc=com"
などとします。ProFTPDソースのREADME.LDAPにはLDAPDNInfoの指定も書いてありますが、これではproftpd.confにLDAPのパスワード(何も考えないとmanagerの)を記述してしまうことになりますのでセキュリティ上良くない。上の設定のようにanonymousに
- userPasswordをauthorizeできる
- UID、GID、ホームのパスを読み出せる
ようLDAPサーバを設定したほうがいいでしょう。LDAPDNInfoを指定しなければ、ProFTPDはanonymousでパスワード認証をしにいきます。
Comments