Существует много различных вариантов этого вопроса в SO, но я не нашел ни одного, который фактически объяснил бы, какие конкретные разрешения должны быть предоставлены, чтобы позволить apache записывать в SQLite DB безопасно/с минимальными риск. Я задал этот вопрос, потому что есть много информации об общей концепции разрешения доступа на запись для пользователя apache, но нет никаких подробностей о том, как предоставить этот доступ пользователю apache с минимальными требуемыми разрешениями.Правильные права на запись для пользователя apache с SQLite
Учитывая структуру моего веб-приложения с БД 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: ...
Я знаю, что из various SO questions и от the PDO manual, что решение этой проблемы заключается в предоставлении доступа на запись для каталога базы данных в www-data
пользователя, но я относительно новым для р и как их безопасно предоставить. Может ли кто-нибудь указать, какой уровень разрешений должен быть предоставлен пользователю www-data
, и как это сделать?
Спасибо, этого работа - есть какие-либо вопросы безопасности с этим подход? – Marcatectura
У Apache не должно быть разрешения на запись за пределами каталога виртуального хоста. Будьте осторожны при написании вашего PHP, любое нарушение безопасности здесь может привести к тому, что кто-то напишет в вашем каталоге DB. – dsmatilla