Я очень плохо знаком с Apache в Ubuntu. Я недавно установил Apache2 на Ubuntu, и я пытаюсь настроить CGI. Я добавил следующие строки в apache2.conf файле:
ScriptAlias /cgi-bin/ /home/router/cgi-bin/
<Directory /home/router/cgi-bin/>
Options ExecCGI
AddHandler cgi-script cgi pl
</Directory>
И я сохранил и перезапуск apache2, но когда я ввожу следующее в браузере:
http://192.168.1.1/cgi-bin/file1.cgi
Я получаю следующую ошибку:
You don't have permission to access /cgi-bin/file1.cgi on this server.
Во-первых, я не выполнил бы CGI от Вашего /home/
каталог. Полномочия не настраиваются для этого, для веб-серверов, и могут время от времени приводить к некоторым головным болям, и с конфигурациями полномочий и с другими проблемами.
Во-вторых, я предложил бы *создание специализированного каталога в /var/www/
(такой как cgi-bin
) куда Ваши сценарии CGI помещаются, и используйте это в конфигурации Apache.
sudo mkdir -p /var/www/cgi-bin/
sudo chown $USER:www-data /var/www/cgi-bin/
Вышеупомянутые команды создадут каталог и настроят полномочия так, чтобы можно было записать в каталог, и веб-сервер может прочитать каталог и иметь доступ, чтобы сделать вещи в каталоге.
Оттуда, отбросьте свой CGI там, удостоверьтесь, что он принадлежит похожим способом (sudo chown $USER:www-data /var/www/cgi-bin/*
) и затем набор Ваша конфигурация Apache для использования /var/www/cgi-bin
вместо /home/router/cgi-bin
.
Если по некоторым причинам необходимо использовать /home/router/cgi-bin
, затем необходимо сделать несколько вещей: www-данные разрешения и все пользователи для пересечения до cgi-bin
каталог, и дает www-доступ-к-данным самому каталогу.
sudo chgrp www-data /home/router/cgi-bin
sudo chmod +rx /home/
sudo chmod +rx /home/router/
sudo chmod 750 /home/router/cgi-bin/
Проблема с этим - Вы, должны открыть Ваш корневой каталог как раз так, чтобы 'другая' категория пользователей могла достигнуть структуры каталогов и пересечь ее. Это - дыра в системе безопасности, потому что любому другому пользователю нельзя разрешить пересечь файловую систему в Ваш корневой каталог таким образом, поскольку это могло привести к утечке данных или краже персональных данных. (Поэтому большинство руководств для веб-серверов предлагает не использовать корневые каталоги и вместо этого выделенные каталоги в /srv/
или /var/www/
для каталогов документа веб-сервера)
Я только что настроил новый сервер ЛАМПЫ с помощью Ubuntu 18.04.01, которая устанавливает или обновления (я не уверен который) к Apache2 v 2.4.29. Это немного плохо мне знакомо, поскольку конфигурационные файлы Apache изменились снова, но я думаю, что процедура ниже является правильной.
cgi загрузочный модуль не был включен так, я должен был сделать это сначала путем выполнения a2enmod. (Проверьте доступные модули на корректное имя.) Это настраивает символьную ссылку от включенной папки до файла в доступной папке.
cgi модуль конфигурации был уже включен - я думал это немного нечетное, но это - каково это было. Модуль конфигурации имеет условный оператор, который проверяет, доступен ли загрузочный модуль и раз так устанавливает Scriptalia на/usr/bin/cgi-bin. Я считал, что это не хорошая идея, как в предыдущем ответе, и лучше сделать/var/www/cgi-bin каталог для Ваших сценариев, таким образом, я сделал это.
Затем, я поместил свой сценарий PHP в новый каталог, в котором я создал/var/www/cgi-bin. Это только должно было быть только для чтения - я chmod'ed это к 444, и это работало.
За эти годы apache2.conf файл имеет меньший и, как объяснено в документах, разработчики попытались сделать его более легко настраивающимся, заставив его звонить в другие биты.