私はApache経由またはコマンドラインで呼び出されるPerlスクリプトを持っています。cgi-binとして使用するとsetuid()でPerlスクリプトをうまく実行するには?
テスト目的のために、私はPerlスクリプトが動作するようにするユーザ名を渡します。を使用してuid
を設定します。
私は、コマンドラインからスクリプトを実行する場合uid
が適切に設定され、その後:
use CGI::Pretty qw/:standard/;
use POSIX qw(setuid getuid);
...
my ($pwName, $pwCode, $pwUid, $pwGid, $pwQuota, $pwComment,
$pwGcos, $pwHome, $pwLogprog) = getpwnam($username);
if ((defined $pwUid) && (getuid() == $pwUid)) {
setuid($pwUid);
print header;
print Dumper $<;
}
else {
print header(-status => 401);
print "Could not setuid to correct uid (currently:)".getuid()."\n";
}
コマンドライン出力は、指定された$username
の正しいuid
を示し、代わりのテストアカウントのuid
スクリプトの実行を開始しました。
私がApache経由でスクリプトを呼び出すと、uid
はapache
ユーザーのIDに設定されたままになり、変更されません。
、ドキュメントを読んだ後ので、私は、私はここにsuExec
を使用することができるとは思わない:
私はすべての
$username
ためhttp://www.example.com/~username
には、このスクリプトのコピーを置くことができません。スクリプトは1か所から実行する必要があり、スクリプト内からuid
を指定する必要があります。スクリプトを実行時に指定したユーザー名として実行する必要があり、Apache構成ファイルの仮想ホスト・ディレクティブで1回指定したユーザー名ではありません。新しいユーザーがこのスクリプトを実行するたびにこの設定ファイルを変更し、Apacheを再起動することは現実的ではありません。
setuid()
を使用しているとき、私は、CGI-binに正しくuid
を変更すると実行しているPerlスクリプトを取得するにはどうすればよい
?
あなたのコマンドラインユーザーはおそらくそのUIDを変更する権利を持っています。あなたのWebサーバーユーザーはおそらくそうではありませんか? – Konerak