这个问题在SO上有很多不同的变体,但我发现没有一个实际上解释了应该授予哪些特定权限以允许apache安全地写入SQLite数据库/风险最小。我之所以问这个问题,是因为有关于允许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和the PDO manual了解到,此问题的解决方案是将数据库目录的写访问权限授予www-data
用户,但我对权限相对较新以及如何安全地授予他们。有人可以指定应该向www-data
用户授予哪些权限级别,以及如何完成此操作?
答案 0 :(得分:1)
这实际上取决于apache服务器配置(也许你不允许退出虚拟主机目录),但这可以做到这一点
chown -R www-data:www-data /var/databases/myapp/
chmod -R u+w /var/databases/myapp/