Существует множество различных вариантов этого вопроса для SO, но я не нашел ни одного, который бы на самом деле объяснял, какие конкретные разрешения должны быть предоставлены, чтобы позволить apache безопасно / с минимальным риском писать в БД SQLite. Я задал этот вопрос, потому что есть много информации об общей концепции разрешения доступа на запись для пользователя apache, но нет подробностей о том, как предоставить этот доступ пользователю apache с минимально необходимыми разрешениями.
Учитывая структуру моего веб-приложения с базой данных sqlite вне корневого веб-каталога:
/var/
├── databases/
│ └── myapp/
│ └── db.sqlite3 (PERMISSIONS)
│
├── www/html/ (web root)
│ ├── index.php
│ └── includes/
│ ├── include1.php
│ └── ...
Когда я вызываю PHP-скрипт, который пытается выполнить операцию записи в БД, я получаю следующую ошибку в apache2 error.log
:
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in /var/www/html/includes/include1.php:xx\nStack trace:\n#0 /var/www/html/includes/include1.php(xx): PDOStatement->execute()\n#1 {main}\n thrown in /var/www/html/includes/include1.php on line xx, referer: ...
Я знаю из различные вопросы SO и из руководство по PDO что решение этой проблемы заключается в предоставлении доступа на запись для каталога базы данных в www-data
пользователь, но я относительно новичок в разрешениях и способах их безопасного предоставления. Может кто-то указать, какой уровень разрешений должен быть предоставлен www-data
пользователь, а как это сделать?
Это действительно зависит от конфигурации сервера Apache (возможно, вам не разрешено выходить из каталога виртуального хоста), но это может помочь
chown -R www-data:www-data /var/databases/myapp/
chmod -R u+w /var/databases/myapp/
Других решений пока нет …