У меня есть приложение, написанное на php, которое сохраняет и считывает конфиденциальную информацию в файл /sensitive/sensitive.txt
. Файл, который сохраняет и читает конфиденциальную информацию, является user.php
. Все приложение находится в отдельной папке.
В идеале только пользователь root может читать конфиденциальный файл. Я хочу убедиться, что даже если внутри ftp есть какой-то вредоносный файл, созданный пользователем apache или ftp в прошлом, он не сможет прочитать конфиденциальный файл с помощью функции file_get_contents.
Проблема в том, что файл создается и читается с помощью user.php по HTTP-запросу, и в результате владельцем файла становится пользователь apache. Даже если бы я мог изменить владельца этого файла на root, следующая проблема заключается в том, что user.php не сможет прочитать файл при запуске HTTP-запроса, потому что это будет пользователь apache, выполняющий файл user.php и, следовательно, пользователь apache. чтение конфиденциального файла.
Есть ли решение этой проблемы? Как я мог позволить user.php читать / записывать конфиденциальный файл по HTTP-запросу, но не позволять никакому другому файлу читать его?
Можно настроить разрешение на чтение из файла только для определенных экземпляров веб-сервера. Однако настройка довольно сложная:
Это требует настройки веб-сервера nginx и использования PHP-FPM с разными пулами приложений с разными пользователями Unix для управления доступом к ресурсам.
Простой подход заключается в использовании отдельной базы данных MySQL для хранения данных и использовании управления доступом MySQL для ограничения доступа к данным для желаемого пользователя. То есть создайте нового пользователя MySQL, который может иметь доступ только к базе данных, и используйте этого пользователя MySQL в своем сценарии PHP.