Ошибка при запуске сценария perlbrew, хотя apache+suexec
У нас есть сервер под управлением Centos 5.11, Apache 2.2 и Perl по умолчанию. Запуск сценариев через suexec работает "просто отлично", но я установил perlbrew, чтобы я мог установить множество дополнительных модулей, не мешая им.
Я создал простой Perl-скрипт для тестирования:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "perl: ". $^X . "\n";
При запуске через apache + suexec выводит, как и ожидалось:
Hello, world! perl: /usr/bin/perl
Но когда я изменяю строку Шебанга на:
#!/root/perl5/perlbrew/perls/perl-5.22.1/bin/perl
и запустить тот же путь, я получаю внутреннюю ошибку сервера, и журнал ошибок Apache показывает:
suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: test.cgi
но работает в командной строке нормально:
# ./test.cgi
Content-type: text/html
Hello, world!
perl: /root/perl5/perlbrew/perls/perl-5.22.1/bin/perl
Я пробовал все виды вещей. Я действительно задавался вопросом, является ли это проблемой "ПУТИ", но документы Apache говорят: "На 2.2 переменная окружения ПУТИ не может быть установлена с помощью Setenv".
Ошибки suexec обычно кажутся вызванными кодировкой dos / unix, но здесь это не проблема.
Может быть проблема в том, как я установил perlbrew? Должен ли он быть другим пользователем (как apache)? другое место (под /var/www)?
Любые другие предложения приветствуются!
1 ответ
Решил это - ваш толчок заставил меня в правильном направлении.
Это была подсказка:
# suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
Я переустановил perlbrew, изменив рут:
# export PERLBREW_ROOT=/usr/local/bin/perlbrew
# perlbrew install perl-5.22.1
затем изменил скрипт на:
#!/usr/local/bin/perlbrew/perls/perl-5.22.1/bin/perl
и бинго:
Привет, мир! путь: /usr/local/bin/perlbrew/perls/perl-5.22.1/bin/perl