使用SQLite为apache用户提供正确的写权限

时间:2017-02-15 21:31:12

标签: php apache sqlite lamp user-permissions

这个问题在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 questionsthe PDO manual了解到,此问题的解决方案是将数据库目录的写访问权限授予www-data用户,但我对权限相对较新以及如何安全地授予他们。有人可以指定应该向www-data用户授予哪些权限级别,以及如何完成此操作?

1 个答案:

答案 0 :(得分:1)

这实际上取决于apache服务器配置(也许你不允许退出虚拟主机目录),但这可以做到这一点

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