使用 SQLite 的 apache 用户的正确写权限

Proper write permissions for apache user with SQLite

这个问题在 SO 上有很多不同的变体,但我发现 none 实际上解释了应该授予哪些特定权限以允许 apache 写入 SQLite DB safely/with 最小风险。我问这个问题是因为有很多关于允许 apache 用户写访问的一般概念的信息,但没有具体说明如何以最少的必需权限向 apache 用户授予该访问权限。

鉴于我的 Web 应用程序的结构与 Web 根目录外的 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 and from the PDO manual 得知这个问题的解决方案是将数据库目录的写访问权限授予 www-data 用户,但我对权限和如何安全授予权限比较陌生他们。有人可以指定应授予 www-data 用户什么权限级别,以及如何实现吗?

这确实取决于 apache 服务器配置(也许您不允许退出虚拟主机目录),但这可以解决问题

chown -R www-data:www-data /var/databases/myapp/
chmod -R u+w /var/databases/myapp/