Назад | Перейти на главную страницу

Надлежащие права и владелец исполняемого веб-файла для сохранения / чтения конфиденциальной информации

У меня есть приложение, написанное на 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.