У меня есть Perl CGI, который должен позволить пользователю выбирать некоторые файлы из файловой системы, а затем отправлять их через Rsync на удаленный сервер. Весь HTML создается сценарием Perl, и я использую строки запроса и временные файлы, чтобы создать иллюзию транзакции с отслеживанием состояния. Часть Rsync представляет собой отдельный сценарий оболочки, который вызывается с именем файла в качестве аргумента (скрипт также отправляет электронные письма и кучу других вещей, поэтому я просто не переместил его в сценарий Perl). Я хотел использовать sudo без пароля и настроил sudoers, чтобы пользователь apache мог запускать скрипт без пароля и отключил requiretty, но в журнале все равно появляются ошибки об отсутствии tty. Затем я попытался использовать su -c scriptname, но это тоже не помогло.
TD;DR Является ли ужасной практикой использование сценария Perl CGI для вызова сценария Bash через sudo, и как вы справляетесь с повышением привилегий для сценариев Perl CGI? Perl 5.10 на ядре Linux 2.6.
Соответствующий код: (LFILE — это файл, содержащий индексы для массива всех файлов в файловой системе)
elsif ( $ENV{QUERY_STRING} =~ 'yes' ) {
my @CMDLINE = qw(/bin/su -c /bin/scriptname.sh);
print $q->start_html;
open('TFILE', '<', "/tmp/LFILE");
print'<ul>';
foreach(<TFILE>) {
$FILES[$_] =~ s/\/.*\///g;
print "Running command @CMDLINE $FILES[$_]";
print $q->h1("Sending File: $FILES[$_]") ; `@CMDLINE $FILES[$_]` or print $q->h1("Problem: $?);