2017-02-15 100 views
0

有关此问题的许多不同变体,但我没有发现实际解释应授予哪些特定权限以允许apache安全地写入SQLite数据库/最小风险。我问过这个问题,因为有大量关于允许apache用户写入访问的一般概念的信息,但没有具体说明如何以最少的必需权限授予对apache用户的访问权限。使用SQLite为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用户写入权限,但我是比较新的为p以及如何安全地授予它们。有人可以指定应授予www-data用户的权限级别,以及如何完成此操作?

回答

0

这真的取决于Apache服务器配置(也许你不能退出虚拟主机目录),但是这可能做的伎俩

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

谢谢,这并工作 - 是否有任何与此安全问题进场? – Marcatectura

+0

Apache不应该在虚拟主机目录之外拥有写权限。在编写你的PHP时要小心,这里的任何安全漏洞都可能导致有人在你的数据库目录中写入数据。 – dsmatilla