Skipが言ったように、CGIをルートとして実行しないでください。代わりに、CGI に sudo を呼び出してもらいます。/etc/init.d/tomcat restart
sudoers ファイルでのみ実行する許可を Web サーバーに与えることができます。
私は実際にこれを仕事で行いました。CGI の関連部分は次のようになります。
#!/usr/bin/perl
use CGI;
use IPC::Run3;
my $CGI = new CGI;
my $output;
if (defined $CGI->param('go') && 'restart' eq $CGI->param('go')) {
run3 [ qw(sudo /etc/init.d/tomcat5.5 restart) ], \undef, \$output, \$output;
}
print <<EOF
Content-type: text/html
Blah, blah, blah, HTML form, displays $output at some point.
EOF
/etc/sudoers の行の例を次に示します (もちろん、visudo を使用して編集します)。
ALL ALL=(root) NOPASSWD: /etc/init.d/tomcat5.5 restart
これにより、誰もが tomcat を再起動できます。必要に応じて、Apache に限定することもできます。