システム開発上、ユーザがブラウザからメールマガジンを作成した時に、同時にエラーメール処理用のアドレスも作成されるようにする、逆にメルマガを削除したらそのアドレスも削除される必要があったためメモ。
今回のMTAはqmailを使うとのことで、アカウントの管理は必然的にvpopmailとなる。
しかし、qmailadminを使わないで新規アカウント作成(vadduser)・削除(vdeluser)を行うためには、基本的にrootでの操作となる。
単純にスクリプト内で
system("/home/vpopmail/bin/vadduser hoge@hoge.jp hogepass");
とやっただけでは、もちろんうまくいくはずがない。
というわけで、Cと連携して上手いことやってくれるモジュール様がないかと、CPANを探してみたらありました。
その名も「vpopmail.pm」。
呼び出す関数名もまさにvpopmailコマンドとほぼ同じ。
しかし、最終リリースは2001年・・・やばいんじゃないの?
かろうじてCPAN.pmをからインストールできたものの、説明も短すぎて、当然
use vpopmail;
vadduser(引数いろいろ);
とかやれば新規にアカウントを作ってくれると思いきや全然ダメ。
vpopmailのバージョンを見てきてくれる関数だけはなぜか動いた(笑)
まあ、関数名も最近のvpopmailのコマンドといまいち合ってないし。
というわけでさんざん悩んだ結果、sudoを使うことで決定。
以下手順。
1.新規バーチャルアカウントを作成する簡単なスクリプト(vadduser.cgi)を作成しCGIの動くディレクトリに置く。
vadduser.cgi
-----------------------------------------------------------------------------------------
#!/usr/bin/perl
use strict;
# コマンド発行
`sudo -u root /home/vpopmail/bin/vadduser hoge@hoge.jp hogepass`;
exit;
1
-----------------------------------------------------------------------------------------
2.sudoの設定ファイルに許可コマンドを追記
# visudo
(以下を追記)
apache ALL=(root) NOPASSWD: /home/vpopmail/bin/vadduser,/home/vpopmail/bin/vdeluser
同時に、以下の行をコメント化
Defaults requiretty
↓
#Defaults requiretty
※これをコメント化しないと、最近のLinuxでは、
sudo: apache : sorry, you must have a tty to run sudo ; TTY=unknown ;......
と怒られる。
このエラーは、/var/log/secure を見ればわかる。
保存して終了
:wq
3.vadduser.cgiをブラウザから実行してみる。
4.確認
popアカウント一覧に、「hoge」が追加されているのを確認
同時に、/home/vpopmail/domains/hoge@hoge.jp 内に、ディレクトリ「hoge」が作成されているのでOK!!
ああ疲れた今回も。
実務的には、このvadduser.cgiをAPIとしてドキュメントルート外に置いて、第三者からは直接アクセスされないようにし、他のCGIからシステムコールで呼んだりした方がセキュアかなと。
参考URL:
http://hibari.2ch.net/test/read.cgi/php/1024741312/l50
http://d.hatena.ne.jp/kakurasan/20100512/p1
http://old.ikoinoba.net/index.php?UID=1188143501
http://search.cpan.org/~sscanlon/vpopmail-0.08/