2007-11-02 相変わらず壊れている
洗濯機。なんじゃろうなあ。
◆ [情報][ネタ] シーゲイト、ディスク容量をめぐる訴訟で払い戻しを実施へ
ドライブの容量が表記より少ないとして訴えられていた
まぁ、確かに気になるところではありますが(^^;
750GのHDDはWindows上からだと、698Gに見えるからなぁ。結構この差はでかいとオモタ。
関連:シーゲイトが過去6年間のHDD購入者に対する5%の払戻しを提案
1Tのディスクが910G位に見えるらしい。注意しよう。
◆ [ネタ] インディーズ業界に初音ミク旋風!
と言うわけでちょっと面白かったので。
◆ [情報] Adobe製品の脆弱性突くトロイの木馬、ピーク時はウイルスメールの3分の2
そういえば蔓延してましたねぇ。
英語オンリーで添付ファイル有りのメールは直ゴミ箱なワシはゴミ箱を漁って気づいた(笑)
◆ [ネタ] 中日新聞があの捏造語「アベする」を流行語大賞にと主張
アサヒる もごく一部でしか使われていませんが、それ以上に使われていないと思います。
んでもって、この記事(&関連記事)のおかげで、ググるさんで「アベする」の検索ヒット数が増えている矛盾(笑)
◆ [ネタ] 魔人探偵脳噛ネウロ×ドクロちゃんの手書きアニメ作品→ニコニコ動画(RC2)‐撲殺魔人ネウロちゃん
ネウロがなにげに可愛い件。
◆ [日記][FreeBSD] サーバセットアップ続き
と思ったが、起動タイミングでのバックアップ順序に不安があるのでちょっと確認してから。
→予想通り順序の逆転が起きていた。
/usr/local/etc/rc.d/* startしてから/etc/rc.d/jail startしていた。これだとバックアップがうまく動かない事があるため(というか、間違ったバックアップイメージを取ってしまう可能性があるため)、対策案を考える。
問題となる現象は簡単な話で、svscan経由で立ち上がっているバックアップスクリプトが、jailが動いていたらDB止めてsnapshotを取ってからDBリスタートするのに対し、jailが動いていなかったら、そのままコピーするようになっている。svscan.shの後にjail startをかけられると、svscanが立ち上げているバックアップスクリプトと、jailの実行が、どっちが先に実行されるかが不定となってしまう(ほとんどの場合は、バックアップスクリプトが先に実行されるが、負荷次第で入れ替わる可能性がある)
問題は、バックアップスクリプトが動き出してからjailを実行する場合である。この場合、ディスクのイメージをコピーしている最中にDBMSが起動される可能性があり、その場合、バックアップしたイメージが(バックアップ中にDBMSにより書き換えられる可能性があるため)完全である事が保証できない。
というわけで、jailはsvscanが実行される前に立ち上がっていてもらわないといけないのだ。
どうしようかと悩んだあげく、rc.localが/usr/local/etc/rc.d/*より先に実行される模様なので、rc.localからjailを実行してしまう事にした。
/etc/rc.d/jail startという行をrc.localに書き込む。
起動時に、2回目の(本来のタイミングであるjailスタート時には)jail start時には「ほげほげ(jail名) already running」というメッセージが出るが気にしない事にする。
これで再起動をかけたところ、無事、DBを終了させてから再起動する設定になっている事が確認できた。よしよし。
起動時には、mysqlを起動して、次の瞬間に終了させられる事があるが、そこは気にしない事にする(笑)
注意項目として、将来的に、/etc/rc.d/jailの二重起動対策が変わったり、rc.localが先に実行されない場合はちょっと問題になってしまう事を追記しておこう。
もうちょっとまともな解は無いかと、rcスクリプトを追いかけ回した結果、rcorderがスクリプト実行順序を決定している事が分かった。
どうやら、
# REQUIRE:
この行を見つけて来て、ここにあるスクリプトを先に実行する仕様の模様。
/usr/local/etc/rc.d/svscan.shは標準では
# PROVIDE: svscan
# REQUIRE: LOGIN
となっている。REQUIREにjailを追加
# PROVIDE: svscan
# REQUIRE: LOGIN jail
これで並び順が入れ替わった事を確認。
再起動したらうまくいった。妙なエラーも出なくなったので、この方法を採用する事にした。
◆ [日記][FreeBSD] SASL (SASLv2)の設定
ライブラリとしては組み込み済みなので、ひたすら設定をする。
とりあえず/usr/local/lib/sasl2/smtpd.confをつくって、こんな感じの行を追加
pwcheck_method: auxprop
mech_list: cram-md5 digest-md5
これで、SASLパスワードをcram-md5とdigest-md5で使えるようになる(ハズ)
次にSASL用のアカウントを追加。
saslpasswd2 -c -u ホスト名 ユーザ名
これで、パスワードを2回入れると、/usr/local/etc/sasldb2.dbが更新される。
ちなみに、ユーザを消す時はこんな感じ
saslpasswd2 -d -u ホスト名 ユーザ名
もいっちょおまけで、ユーザ一覧はこんな感じで出す
sasldblistusers2
んでもって、postfix側の設定をする。
SASLの有効化
smtpd_sasl_auth_enable = yes
broken_sasl_auth_client = yes
こんな行を/usr/local/etc/postfix/main.cfに追加。
smtpd_sender_login_maps = pcre:/usr/local/etc/postfix/sasl_mailuser_map
smtpd_sender_restrictions = reject_sender_login_mismatch, permit
を使えばSASLログインIDとFromユーザのマッピングが出来るらしい。マッピング規則がどうも怪しいので、submissionでのみSMTP-AUTHを使えるようにする。
というわけで、smtpd_sender_login_maps = pcre:/usr/local/etc/postfix/sasl_mailuser_mapとか追加して、/usr/local/etc/postfix/sasl_mailuser_mapに/.*/ ユーザ名 を書き込む(笑) 後で制限したくなったらこのファイルを書き換えれば良い。
んでもって、受け取りメールの許可を出す。
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
これでpostfix側の設定は一応終わりなので、postfix reloadとすれば、もうSMTP AUTHが使える。いや、楽だねぇ。
ん?localhostからのメールを拒否るのってsmtpd_recipient_restrictions からpermit_mynetworksを外せばいいのか? それっぽいなー。
暗号化は意味無い(どうせそこからのSMTPは暗号化されてないし、やるならPGP使え)って事で、postfixの設定はこれで終了。
おおっと、submissionの設定を忘れていた。
master.cfの次の行の#を外す
#submission inet n - n - - smtpd
# -o smtpd_enforce_tls=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
とと、# -o smtpd_enforce_tls=yesはTLS強制する気はないのでコメントのまま残しておく。
これでpostfix reload。
submittion(587)で動いている事を確認。ついでに認証無しではメールを受け取らない事も確認。
色々テストした結果、最終的にはこんな感じになった。
main.cf
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# smtpd_sender_restrictions = reject_sender_login_mismatch, permit
# smtpd_sasl_auth_enable = yes
broken_sasl_auth_client = yes
smtpd_sender_login_maps = pcre:/usr/local/etc/postfix/sasl_mailuser_map
master.cf
smtp inet n - n - - smtpd
submission inet n - n - - smtpd
# -o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_restrictions=reject_sender_login_mismatch,permit
smtp(25番ポート)ではSMTP-AUTHを行わず、submission(587)ではSMTP-AUTHを行う(smtpでやらないのは、なんか下手にfrom制限を設定したら認証無しではメールが受け取らない設定に簡単にできるため(^^;;
というわけで、これでやっとpostfixの設定終了。
あとはメールユーザの設定と、pop3サーバだだだだだーーー……orz
◆ [日記][FreeBSD] 何かめんどくさくなってきたのでpop3サーバにdovecotを使う事にする。
/usr/ports/mail/dovecotでmake
IPv6とLDAはカット。kqueueとssl、pop3を有効にしてmake install
/usr/local/etc/dovecot-example.confをdovecot.confとしてコピー。設定をいじる。
imapとかpop3sとかimapsとかは使わないので、protocols = pop3と勢いよく設定。メールボックスは一カ所(/mail/host/userに統一されているのでmail_location = maildir:/mail/%d/%nときわめていい加減に設定。ついでにfirst_valid_uid、last_valid_uid、first_valid_gid、last_valid_gidを全部メールユーザの物にする(明らかにやる気がない設定)。
pamを使う気もないので、passdb pamを全部コメントアウト。システムアカウントも使う気が無いのでuserdb passwdもコメントアウト。
んで、今回はuserdbにstaticを使う。
こんな感じの行をauth default {の中に追加
userdb static {
args = uid=UID gid=GID home=/mail/%d/%n
}
あと、APOPも使うので、mechanisms = apop plainと変更。
ついでにdovecotをtcpserver経由で起動するように変更。
とここまでやってtcpserverが入っていない事に気づく。
/usr/ports/sysutils/ucspi-tcp/でmake install。終わり。
なんかエラーが出る。Fatal: Can't connect to master UNIX socket /var/run/dovecot/master: Permission deniedだそうだ。
とりあえず怪しい事はせずにdovecotと入力してみる。
Error: Can't use SSL certificate /etc/ssl/certs/dovecot.pem: No such file or directory
Fatal: Invalid configuration in /usr/local/etc/dovecot.conf
怒られた。そういえば/usr/local/etc/dovecot.confにssl_disable = yesを追加するのを忘れていた。追加。
mail.err: Nov 2 21:14:41 dovecot: auth(default): No passdbs specified in configuration file. PLAIN mechanism needs one
mail.err: Nov 2 21:14:41 dovecot: Auth process died too early - shutting down
mail.err: Nov 2 21:14:41 dovecot: child 41182 (auth) returned error 89
消しすぎたらしい。
とりあえず
passdb passwd-file {
args = /usr/local/etc/dovecot.passwd
}
と追加。中身は、ユーザ名:{PLAIN}パスワード の形式。
ここまでやってコマンドラインからdovecotと入力。おぉ、起動したようだ。
さっそくtelnetでpop3を叩く。
+OK Dovecot ready.(以下略)
まて。ソフト名をそのまま出すのかこいつは。
というわけで、再度dovecot.confをいじる。
login_greeting = POP3 ready.
こんな感じの行を追加して、kill&restart。OK、+OK POP3 ready.と帰ってきた事を確認。
とりあえず、killして、tcpserver経由にする。
/usr/service/dovecot/runに
#!/bin/sh
exec 2>&1
exec /usr/local/bin/tcpserver \
-x /usr/tcpserver/pop3.cdb \
-vpR \
IPアドレス 110 \
/usr/local/libexec/dovecot/pop3-login
として、ちゃんと動く事を確認。
ついでなので、/usr/service/dovecot/log/runに
#!/bin/sh
exec /usr/local/bin/setuidgid 他で使ってないユーザ名 /usr/local/bin/multilog t s1024000 n8 /var/log/dovecot
としてログを取る。cd /service; ln -s ../usr/service/dovecot .として起動を確認。pop3,apopともちゃんと動いている事を確認。
次の課題は、smtp-authとpop3/apopの認証を共通に出来ないかという事だ(笑)
→どうもdovecotをtcpserver経由で立ち上げると、最初にPOP3コネクションがあった後、dovecotが(pop3サーバ抜きで)立ち上がるようだ。
で、どうも、共通化できたくさい。
portsでpostfixをコンパイルする前の設定(make config)でDOVECOT Dovecot SASL authentication methodにチェックを入れて、make clean; make install。
こんな感じの内容をdovecot.confのauth default {の中に追加
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
んで、/usr/local/etc/postfix/main.confに次の内容を追加
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
んでもってpostfix reload。
で、はまったのが、mechanisms = apop plainと書いていたのだが、どうやらEHLOの返信で250-AUTH ほげほげ という回答があるのだが、このほげほげの部分が、mechanismsに書いた内容そのものになる模様。これで30分くらいはまった。
AUTH CRAM-MD5するために、mechanisms = cram-md5 apop plainと変更。
何故かpostfis reloadをしないと、この新しい設定を認識しないので(笑)リスタートする。
これでみんなが/usr/local/etc/dovecot.passwdを見に行くようになる……っぽい(笑)
後の問題は、dovecotが立ち上がってないと認証エラーになると言う事だ。一度popをつつけば勝手に立ち上がるのだが……。はて、どうしたものか。
dovecot.confのprotocols = でからっぽにすればエラー無く立ち上がるんじゃね? と思ったがダメだった。
困った時のソースコード頼み。早速開いて読んでみる。
……なんか、DOVECOT_INETDって環境変数がついてればフォアグラウンド&余計な(?)pop3dとか立ち上げない……と思ったらエラー終了してただけだ(笑)
login_processes_count=0にすると、1以上にしろと文句を言われる。むぅ。
色々試してみたがラチがあかん。
とりあえず分かった事は、/usr/local/libexec/dovecot/pop3-loginを実行すると、dovecotとdovecot-authが起動して、POP3認証&SMTP-AUTHが出来るという事までは分かった。
卑怯技として、起動スクリプト(親環境なら/etc/rc.local。jail環境ならjail内で実行されるスクリプト)に
/usr/local/libexec/dovecot/pop3-login
という行を追加した。
おぉ、求めていた動きになった(笑)
ここまでに6時間ほどかかってます(苦笑
さぁ、今日はこれくらいにして寝よう……orz
◆ [日記][FreeBSD] そういえば、postfixのvirtual domain周りの設定いじったんだった
サーバはシャットダウンしてしまって再起動するのがめんどくさいので、詳細は明日。忘れてなければ。