Php 具有SQLite的apache用户的正确写入权限

Php 具有SQLite的apache用户的正确写入权限,php,apache,sqlite,lamp,user-permissions,Php,Apache,Sqlite,Lamp,User Permissions,关于这个问题,有许多不同的变体,但我没有发现任何一个能够真正解释应该授予apache什么样的特定权限,以允许apache安全地/以最小的风险写入SQLite DB。我之所以提出这个问题,是因为有很多关于允许apache用户进行写访问的一般概念的信息,但没有详细说明如何以所需的最低权限授予apache用户该访问权限 鉴于我的web应用程序的结构,sqlite db位于web根目录之外: /var/ ├── databases/ │ └── myapp/ │ └── db.sqlit

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

鉴于我的web应用程序的结构,sqlite db位于web根目录之外:

/var/
├── databases/
│   └── myapp/
│       └── db.sqlite3 (PERMISSIONS)
│
├── www/html/ (web root)
│   ├── index.php
│   └── includes/ 
│       ├── include1.php
│       └── ...
当我调用试图在DB上执行写入操作的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: ...

我从中了解到,这个问题的解决方案是向
www-data
用户授予数据库目录的写访问权,但我对权限以及如何安全地授予权限还比较陌生。是否有人可以指定应授予
www-data
用户的权限级别,以及如何完成此操作?

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

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

谢谢,这确实有效-这种方法有任何安全问题吗?Apache不应该在虚拟主机目录之外有写权限。编写PHP时要小心,这里的任何安全漏洞都可能导致有人在您的DB目录中写入。这里的关键信息是,DB的目录需要写访问权限,因为sqlite3需要在目录中创建新文件(例如“wal”或回滚文件)。我花了几个小时才弄明白(大多数答案只告诉您确保DB文件本身是可写的)