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 ...\nRun Code Online (Sandbox Code Playgroud)\n\n当我调用尝试在数据库上执行写入操作的 PHP 脚本时,我在 apache2's 中收到以下错误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: ...\nRun Code Online (Sandbox Code Playgroud)\n\n我从各种 SO 问题和PDO 手册中知道,此问题的解决方案是向用户授予数据库目录的写访问权限www-data,但我对权限以及如何安全授予权限相对较新。有人可以指定应授予什么权限级别www-data以及如何实现这一点吗?
小智 5
这实际上取决于 apache 服务器配置(也许不允许您退出虚拟主机目录),但这可以解决问题
chown -R www-data:www-data /var/databases/myapp/
chmod -R u+w /var/databases/myapp/
Run Code Online (Sandbox Code Playgroud)