Как сказал Пропустить, но не запускайте CGI от имени пользователя root. Вместо этого пусть CGI вызывает sudo. Вы можете дать своему веб-серверу разрешение на запуск /etc/init.d/tomcat restart
только в файле sudoers.
Я действительно сделал это на работе; соответствующая часть 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, если хотите.