Консультация разработчика: отправка сигналов демонам через HTTP - PullRequest
2 голосов
/ 14 января 2011

Я использую Apache в Ubuntu.У меня есть сценарий Perl, который в основном читает имена файлов каталога, затем переписывает текстовый файл, а затем отправляет сигнал демону.Как это можно сделать максимально безопасным с помощью веб-страницы?

На самом деле я могу запустить упрощенный cgi в приведенном ниже коде, но только если я удалю комментарии.Я ищу совет с учетом любого из:

  • Использование HTTP-запросов?
  • Как насчет прав доступа к файлам Apache для каталога, показанного в коде?
  • Достаточно ли htaccess, чтобы разрешить пользователю / паролем доступ к cgi?
  • Должен ли я использовать базу данных вместозапись в файл и запуск cron, запрашивающих базу данных с разрешением на запись и отправку сигнала?
  • Предоставление веб-серверу как можно меньших разрешений.
  • Должен ли я установить VPN?

#!/usr/bin/perl -wT
use strict;
use CGI;
#@fileList = </home/user/*>; #read a directory listing
my $query = CGI->new();

print $query->header( "text/html" ),
$query->p( "FirstFileNameInArray" ),
#$query->p( $fileList[0] ), #output the first file in directory
$query->end_html;

1 Ответ

2 голосов
/ 14 января 2011

Предположительно, ошибка, которую вы получаете из закомментированных строк, - это разрешение, запрещенное при попытке прочитать каталог /home/user.Способ исправить это (удивление, удивление) дать пользователю apache [1] возможность читать этот каталог.Для этого существует три основных подхода:

  1. В большинстве сред нет действительно веских причин скрывать все имена файлов в домашнем каталоге пользователя, поэтому вы можете сделать каталог доступным для чтения всем пользователям с помощьюchmod a+r /home/user.Если у вас нет конкретной причины, чтобы не дать широкой общественности узнать имена файлов в домашнем каталоге пользователя, я бы рекомендовал этот подход.

  2. Если вы хотите бытьнемного более ограничительно, вы можете изменить /home/user на группу, к которой принадлежит пользователь apache (или добавить пользователя apache в группу, которой в настоящее время принадлежит /home/user), а затем установить /home/user как группу-удобочитаемый.Это сделает его доступным для всех членов этой группы, но не для широкой публики.

  3. Если вам необходимо применить стандартные разрешения файловой системы для веб-доступа, вы можете посмотреть на настройку suexec чтобы отдельные запросы могли принимать разрешения пользователей, отличных от пользователя apache.Обычно это пользователь, которому принадлежит код, который запускается для обработки запроса (например, в этом случае пользователь, которому принадлежит ваш скрипт листинга каталога), но, если вы используете аутентификацию на основе htaccess, это может бытьМожно настроить suexec, чтобы решить, какие права пользователя использовать, в зависимости от того, каким пользователем вы вошли в систему.(Я сам избегаю suexec, поэтому я не уверен на 100%, можно ли это сделать, и понятия не имею, как это сделать, если это возможно.)

[1]... под которым я подразумеваю пользователя, на котором работает apache;в зависимости от конфигурации вашей системы этот пользователь может быть назван «apache», «httpd», «nobody», «www-data» или чем-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...