FreeBSD 6.3-Rlease を使っていますが...
ports/openldap24-server が腐ってて一日つぶしました。
- 起動はできる
- ldapsearch で検索もできる
- SIGTERM, SIGINTで死なない
- SIGKILLでなら死ぬ(当然)
- だから /usr/local/etc/rc.d/slapd stop じゃ止まらない
デバッガで追いかけてみたところ、どうやらシグナルが受信できてないようです。
しょうがないので今回は openldap23 を使って構築。
こちらはインストールしたらすぐに動きました。やったね。
で、問題は現状の FreeBSD デフォルトの /etc/passwd, group からの移行方法。
ググると MigrationTool なるものがあって、Perl スクリプトで変換してくれる模様。
http://www.padl.com/OSS/MigrationTools.html
ところが。
Linux の /etc/shadow 用に作ってあるため、FreeBSD の /etc/master.passwd とは
フォーマットが微妙に異なってきちんと変換できない。
こんな適当なパッチで一応動いたので備忘録代わりに公開。
diff -u MigrationTools-47/migrate_group.pl MigrationTools-new/migrate_group.pl --- MigrationTools-47/migrate_group.pl 2006-01-25 13:18:16.000000000 +0900 +++ MigrationTools-new/migrate_group.pl 2008-07-01 23:21:43.000000000 +0900 @@ -67,12 +67,7 @@ print $HANDLE "dn: cn=$group,$NAMINGCONTEXT\n"; print $HANDLE "objectClass: posixGroup\n"; - print $HANDLE "objectClass: top\n"; print $HANDLE "cn: $group\n"; - if ($pwd) { - print $HANDLE "userPassword: {crypt}$pwd\n"; - } - print $HANDLE "gidNumber: $gid\n"; @members = uniq($group, @members); @@ -80,6 +75,7 @@ print $HANDLE "memberUid: $_\n"; } + print $HANDLE "memberUid: $group\n"; print $HANDLE "\n"; } diff -u MigrationTools-47/migrate_passwd.pl MigrationTools-new/migrate_passwd.pl --- MigrationTools-47/migrate_passwd.pl 2006-01-25 13:18:16.000000000 +0900 +++ MigrationTools-new/migrate_passwd.pl 2008-07-01 08:34:14.000000000 +0900 @@ -75,7 +75,7 @@ s/哲Ae/g; s/絲ae/g; - local($user, $pwd, $uid, $gid, $gecos, $homedir, $shell) = split(/:/); + local($user, $pwd, $uid, $gid, $n1, $2, $n3, $gecos, $homedir, $shell) = split(/:/); if ($use_stdout) { &dump_user(STDOUT, $user, $pwd, $uid, $gid, $gecos, $homedir, $shell); @@ -135,7 +135,7 @@ } print $HANDLE "objectClass: posixAccount\n"; - print $HANDLE "objectClass: top\n"; + print $HANDLE "objectClass: shadowAccount\n"; if ($DEFAULT_REALM) { print $HANDLE "objectClass: kerberosSecurityObject\n";
これで変換するとこんな感じに整形されます。
dn: uid=hossy,ou=Users,dc=padl,dc=com uid: hossy cn: hossy objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword: {CRYPT}$1$HOGEHOGE$FOOBARFOOBAR loginShell: /bin/tcsh uidNumber: 10000 gidNumber: 10000 homeDirectory: /home/hossy gecos: hossy
dn: cn=hossy,ou=Groups,dc=padl,dc=com objectClass: posixGroup cn: hossy gidNumber: 10000 memberUid: hossy
おっと。dn が padl.com のままだ。migrate_common.pl の書き換えも忘れぬよう。
それと、FreeBSD のパスワードって、/etc/master.passwd には $1$[SEED]$[MD5HASH] の形式で書いてあるから
OpenLDAP に変換したときにどうすればいいのかいろいろ探してみたけど、普通に {CRYPT}$1$[SEED]$[MD5HASH] で動いてます。
最近の FreeBSD はデフォルトではパスワードを seed 付き MD5 でハッシュしますが、/etc/auth.conf がデフォルトのままの場合、
crypt(3) の salt 引数が $1$ で始まっていればそれと同じ seed を使って MD5 ハッシュをしてくれるので問題ないみたいです。