使用 SQLite 为 apache 用户提供适当的写入权限

Mar*_*ura 4 php apache sqlite lamp user-permissions

这个问题有很多不同的变体,但我发现没有一个变体能够真正解释应该授予哪些特定权限以允许 apache 安全/以最小的风险写入 SQLite DB。我问这个问题是因为有大量关于允许 apache 用户写入访问的一般概念的信息,但没有详细说明如何以所需的最小权限向 apache 用户授予该访问权限。

\n\n

鉴于我的网络应用程序的结构,其中 sqlite 数据库位于网络根目录之外:

\n\n
/var/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 databases/\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myapp/\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db.sqlite3 (PERMISSIONS)\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 www/html/ (web root)\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.php\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 includes/ \n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 include1.php\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我调用尝试在数据库上执行写入操作的 PHP 脚本时,我在 apache2's 中收到以下错误error.log

\n\n
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: ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我从各种 SO 问题PDO 手册中知道,此问题的解决方案是向用户授予数据库目录的写访问权限www-data,但我对权限以及如何安全授予权限相对较新。有人可以指定应授予什么权限级别www-data以及如何实现这一点吗?

\n

小智 5

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

chown -R www-data:www-data /var/databases/myapp/
chmod -R u+w /var/databases/myapp/
Run Code Online (Sandbox Code Playgroud)