nixp.ru v3.0

18 октября 2017,
среда,
21:45:24 MSK

DevOps с компанией «Флант»
grisha написал 27 октября 2008 года в 16:05 (5883 просмотра) Ведет себя как мужчина; открыл 34 темы в форуме, оставил 202 комментария на сайте.

Научите разобарться… Не могу запустить скрипт. Такой httpd.conf

ScriptAlias /cgi-bin/ /home/user/cgi-bin/  это переменная говорит что при обращении к директории cgi-bin (которая у меня пустая) надо искать скрипты в моей директории user
  
AllowOverride None
Options ExecCGI   опция разрешает выполнение скриптов
Order allow,deny
Allow from all
</Directory>

Если в браузере набираю localhost/cgi-bin то в браузере выводится ошибка Forbidden You don’t have permission to access /cgi-bin/ on this server.В логах апаче — [Mon Oct 27 22:45:19 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /var/www/cgi-bin/

// Тему переместил(а) Dmitry Shurupov из форума «UNIX FAQ: вопросы по UNIX/Linux».

Дмитрий Шурупов

У вас ExecCGI прописан для каталога /var/www/cgi-bin, а ScriptAlias — для /home/user/cgi-bin/. Не хватает единства :-)

Вероятно, вам нужно изменить блок:


... </Directory>

На:


... </Location>

Это если вы собираетесь запускать скрипты из /home/user/cgi-bin/. Если наоборот — то и заменять надо ScriptAlias.

grisha

С таким конфигом

ScriptAlias /cgi-bin/ /home/user/cgi-bin/
#AllowOverride None Options ExecCGI Order allow,deny Allow from all </Location>

Все то же самое

Дмитрий Шурупов

Вы путаете Location и Directory.

Для Location нужно указывать относительный для Web-сервера путь — в моем примере я указал /cgi-bin (а не «/home/user/cgi-bin»), что и было правильным вариантом в данном случае.

Для Directory — абсолютный путь в файловой системе.

Anarchist

А ещё в секции httpd.conf, описывающей mime_module есть такой абзац

# To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    AddHandler cgi-script .cgi
Дмитрий Шурупов
Anarchist
А ещё в секции httpd.conf, описывающей mime_module есть такой абзац

# To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    AddHandler cgi-script .cgi

Отсутствие этой записи не может привести к «Forbidden» в данном случае. Но пожелание на перспективу — да, полезное :-)

grisha
Вы путаете Location и Directory.

Наверное так, но с конфигом

ScriptAlias /cgi-bin/ /home/user/cgi-bin/
#AllowOverride None Options ExecCGI AddHandler cgi-script .cgi эта опция наверное все равно лишняя, т.к. у меня в папке /home/user/cgi-bin/ один единственный скрипт (да и проблема вроде заключается в доступе к папке а не к файлу) Order allow,deny Allow from all </Directory>

Опять все то же.

Дмитрий Шурупов

Так увлекся другим взглядом на проблему, что совсем забыл про изначальную постановку задачи…

Возможно, нужно добавить в опции FollowSymLinks.

А вообще, что вы ожидаете увидеть, обращаясь просто к /cgi-bin ? Нужно обращаться к конкретному скрипту, который там находится…

grisha

И вообще что это за хрень? attempt to invoke directory as script: /var/www/cgi-bin/ Попытка выполнить директорию как скрипт? Это как понимать?

Дмитрий Шурупов

Про FollowSymLinks я, пожалуй, пошутил…

Это так и понимать. У вас все, что относится к /var/www/cgi-bin/, воспринимается как CGI-скрипты. Каталоги тоже. Вот он и пытается их выполнить.

В общем, пора уже попробовать зайти на http://localhost/cgi-bin/ваш-скрипт.cgi (не забудьте, что ваш-скрипт.cgi должен быть исполняемым, т.е. иметь +x).

grisha
А вообще, что вы ожидаете увидеть, обращаясь просто к /cgi-bin

Я ожидаю увидеть типа список файлов как это обычно бывает (например строку в браузере Index of /cgi-bin)

Нужно обращаться к конкретному скрипту, который там находится…

The requested URL /cgi-bin/squidGuard.cgi was not found on this server. это в окне браузера, а в логах [error] [client 127.0.0.1] script not found or unable to stat: /var/www/cgi-bin/squidGuard.cgi

С опцией FollowSymLinks результат прежний.

Anarchist
grisha
в логах [error] [client 127.0.0.1] script not found or unable to stat: /var/www/cgi-bin/squidGuard.cgi

А что говорит

# ls -l /var/www/cgi-bin/squidGuard.cgi

ЗЫ: Есть мнение, что твоя ошибка связана с тем, что ты не обозначил прав доступа к каталогу файловой системы.

Нах Location! Directory — наше фсё!!!

grisha
Anarchist
А что говорит

# ls -l /var/www/cgi-bin/squidGuard.cgi

Ничего, игнор и молчание :)

grisha
ЗЫ: Есть мнение, что твоя ошибка связана с тем, что ты не обозначил прав доступа к каталогу файловой системы.

Это в смысле к каталогу /proc? (dr-xr-xr-x 143 root root 0 2008-10-28 04:42 proc) Не понял, можно подробнее, зачем?

grisha
grisha
Ничего, игнор и молчание :)

Ой, тоже пошутил, оно говорит что

ls -l /var/www/cgi-bin/squidGuard.cgi
ls: невозможно получить доступ к /var/www/cgi-bin/squidGuard.cgi: No such file or directory
Anarchist
grisha
Ой, тоже пошутил, оно говорит что

ls -l /var/www/cgi-bin/squidGuard.cgi
ls: невозможно получить доступ к /var/www/cgi-bin/squidGuard.cgi: No such file or directory

И чему ты удивляешься?

Что тебе говорит

# find /usr -name squidGuard.cgi
Дмитрий Шурупов
Я ожидаю увидеть типа список файлов как это обычно бывает (например строку в браузере Index of /cgi-bin)

Вообще-то для этого надо еще включать опцию Indexes. По умолчанию ее быть не должно…

А теперь — еще раз: где в файловой системе находится CGI-файл (полный путь) и какой сейчас конфиг для CGI?

grisha

Ура, заработало. Создал другую папку /var/www/cgi/ , соответственно изменил ScriptAlias на /cgi/ в результате при наборе в строке браузера localhost/cgi/squidGuard.cgi скрипт заработал.

ЗЫ: все-таки в чем проблема с /cgi-bin/?

Anarchist
Dmitry Shurupov
Вообще-то для этого надо еще включать опцию Indexes. По умолчанию ее быть не должно…

Смотря где.

Для public_html в домашнем каталоге пользователя ЕМНИП допускается.

grisha
где в файловой системе находится CGI-файл (полный путь)

Здесь /home/user/cgi-bin/squidGuard.cgi

какой сейчас конфиг для CGI?

Не знаю :(, подскажите как посмотреть.

Насчет /cgi-bin/… А может быть дело в папке /usr/lib/cgi-bin/ (может ее удалить с самого начала следовало или переместить а не создавать еще одну в /var/www/?

grisha

Все равно хочу знать почему нет доступа к папке /cgi/, хотя указал в опциях Options ExecCGI Indexes.

Дмитрий Шурупов

> Не знаю :(, подскажите как посмотреть.

Уже неактуально, раз разобрались :-) Я имел в виду ту часть httpd.conf, где речь идет о CGI.

> Насчет /cgi-bin/… А может быть дело в папке /usr/lib/cgi-bin/ (может ее удалить с самого начала следовало или переместить а не создавать еще одну в /var/www/?

Не надо ничего удалять. Подозреваю, что где-то в другом месте конфига у вас перезаписывается правило для /cgi-bin (значение /usr/lib/cgi-bin — это по умолчанию такое).

> Все равно хочу знать почему нет доступа к папке /cgi/, хотя указал в опциях Options ExecCGI Indexes.

Доступа нет, потому что для CGI, надо полагать, Indexes не допустимы. Угроза безопасности, видимо. Во всем этом я не уверен, но легко поверю, если так.

Можно придумать что-нибудь типа mod_rewrite на /cgi-bin/, который будет пересылать на /cgi-bin/index.pl, который в свою очередь будет генерить подобие Indexes от Apache. Стоит ли оно того? ;-)