Я пытаюсь понять, как настроить права доступа к файлам на моем сервере. Я прочитал замечательное руководство https://serverfault.com/questions/357108/what-permissions-should-my-website-files-folders-have-on-a-linux-webserver.

1. посетители моего сайта

В руководстве говорится

Анонимные пользователи - это посетители вашего сайта. Хотя у них нет прав доступа к файлам напрямую, они могут запросить веб-страницу, и веб-сервер действует от их имени. Вы можете ограничить доступ анонимных пользователей, внимательно следя за тем, какие разрешения имеет процесс веб-сервера. Во многих дистрибутивах Linux Apache работает как пользователь www-данных, но может отличаться. Используйте PS Aux | grep httpd или ps aux | grep apache, чтобы увидеть, какой пользователь Apache использует в вашей системе.

Я использую XAMPP на своем ноутбуке. Если я введу ps aux | grep httpd я получаю

adam      6635  0.0  0.0  21292   960 pts/1    S+   15:51   0:00 grep --color=auto apache

Итак, Апач работает как adam . Далее у меня есть файл с именем test2.php со следующим разрешением:

-r-------- 1 adam adam 24 Dez 31 15:20 test2.php

Так что только владелец файла может прочитать его. Но так как Apache является владельцем, я ожидал, что, если я запросю файл в своем браузере, я смогу прочитать его.

Тем не менее, я получаю следующую ошибку

Предупреждение: Неизвестно: не удалось открыть поток: в строке 0 отказано в разрешении Неизвестно

Неустранимая ошибка: неизвестно: не удалось открыть файл '/home/adam/www/site/test2.php' (include_path = '.:/ Opt / lampp / lib / php') в строке "Неизвестно" в строке 0

Но разве приведенная выше цитата не предполагает, что я должен иметь к ней доступ из-за

они могут запросить веб-страницу, и веб-сервер действует от их имени.

2. PHP файлы

Рассмотрим PHP-файл, состоящий из

<?php

 $string = fopen("stuff.txt","r");

Может ли php-файл открывать stuff.txt только если он stuff.txt для чтения other классом разрешений? Или это также будет доступно для чтения, если Apache является владельцем файла и имеет разрешение на чтение, а other класс доступа не имеет разрешения на чтение?

1 ответ1

0

PHP может работать в другом режиме работы, если PHP скомпилирован как модуль Apache(что относится к XAMPP), тогда все, что видит Apache, будет доступно для PHP, и, поскольку PHP является языком интерпретатора, он может запускать то, что видит ( если он содержит <?php ... ?> независимо от типа файла). Если бы вы запускали PHP как автономную службу прослушивания (используя php-fpm), вы можете отделить Apache от PHP. Apache в этом случае будет просто перенаправлять прокси на PHP. Таким образом, вы можете запускать Apache и PHP под разными учетными записями пользователей.

Имейте в виду, что даже если вы установите XAMPP под root/administrator, он потеряет привилегированное разрешение после привязки порта прослушивания к учетной записи пользователя, указанной в конфигурации apache.

Чтобы иметь возможность запускать веб-сервер через порт 80 (привилегированный порт), для запуска Apache необходимы права root/ Администратор, но после запуска он будет работать как обычный (желательно ограниченный) пользователь.

XAMPP/LAMPP обычно не используется в рабочей среде, поскольку по умолчанию имеет очень разрешающие настройки и в основном используется на стадии разработки.

Если вам нужна модель безопасности производства, разделите все роли каждой службы и запустите каждую службу (Apache, PHP, MySQL) под другой, ограниченной (не административной) учетной записью.

Хорошая модель безопасности - это когда все (все доступные Apache), открытые для дикого Интернета, должны иметь разрешения только на чтение, кроме тех файлов или каталогов, которые действительно должны быть доступны для записи, но в таких случаях вам нужно ограничить эти ресурсы в Apache, либо отключив доступ или поворот PHP-движка в таких каталогах в зависимости от варианта использования.

Возвращаясь к вашим вопросам: вы написали, что используете XAMPP, что означает, что вы запускаете его под Windows. Сделайте правый клик на панели задач и запустите диспетчер задач, чтобы определить имя процесса apache и учетную запись пользователя, на котором он запущен, чтобы выяснить, какие разрешения будет иметь PHP.

Но я предполагаю, что вы используете LAMPP, а не XAMPP, поскольку ваш веб-каталог выглядит как среда на основе Unix "/home/adam/www/site/test2.php". Это очень отличается от окон. В зависимости от используемой ОС, служба Apache может работать под другим именем, а не httpd, это может быть apache2 (в debian), поэтому при попытке определить запущенный процесс используйте правильное имя в grep . (Чтобы упростить вашу жизнь, установите htop в системе на основе Unix, чтобы определить активность процесса)

Если я прав, что вы используете LAMPP, проверьте права доступа к веб-каталогу и его подкаталогам, которые принадлежат тому же пользователю, что и пользователь apache. Если вам нужна защита базы файлов для некоторых файлов, приобретите право собственности у пользователя, отличного от пользователя, назначенного для веб-службы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .