【发布时间】:2017-07-04 18:25:08
【问题描述】:
关于 SO,这个问题有很多不同的变体,但我发现没有一个可以真正解释应该授予哪些特定权限以允许 apache 安全/以最小风险写入 SQLite DB。我问了这个问题是因为有很多关于允许 apache 用户写访问的一般概念的信息,但没有关于如何以最少的所需权限向 apache 用户授予该访问权限的具体信息。
鉴于我的 web 应用程序的结构以及 web 根目录之外的 sqlite db:
/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 用户什么权限级别,以及如何完成此操作?
【问题讨论】:
-
这里的关键信息是 db 的 目录 需要写入权限,因为 sqlite3 需要在目录中创建新文件(例如“wal”或回滚文件)。我花了几个小时才弄清楚(大多数答案只告诉你确保数据库文件本身是可写的)
标签: php apache sqlite lamp user-permissions