Я хотел запустить скрипт Perl CGI с обратными кавычками.
ПРИМЕР:
#!/usr/bin/perl -w
use warnings;
use strict;
use JSON;
use CGI;
use CGI::Carp 'fatalsToBrowser';
my $cgi = CGI->new;
my $result = `lpc status all`;
print $cgi->header(-type => "plain/text", -charset => "utf-8");
print $result;
Скрипт запускается без проблем, но возвращает пустую строку.
Когда я использую такую команду, как ls
, она работает отлично.
Я предполагаю, что в этом случае для команды lpc мне нужны повышенные привилегии, потому что, когда я просто запускаю скрипт из bash как root работает нормально.
Вопрос:
Есть ли способ запустить такой скрипт с обратными кавычками через Apache? Есть ли модуль Perl, который может помочь мне достичь этого в противном случае?
Единственным решением, которое пришло мне в голову, было бы написать сервисную программу, которая прослушивает сами TCP-порты, но я не хотел идти по этому пути.
НОВАЯ ПОПЫТКА:
я также пытался создать сценарий bash со следующим содержимым
#!/bin/bash
sudo lpc status all
Я отредактировал /etc/sudoers на это
apache ALL=(ALL) NOPASSWD:/path/to/script/lpcsa.sh
и изменил Perl-скрипт следующим образом
my $result = qx(bash lpcsa.sh);
из командной строки теперь работает, но через HTTP просто не хочет :/
text/plain
(это не является причиной вашей проблемы, я просто подумал, что вы должны знать). - person Dave Cross   schedule 30.08.2017$result = qx(lpc status all 2>&1)
) и вывести статус выхода ($?
). - person mob   schedule 30.08.2017