【问题标题】:Proper write permissions for apache user with SQLite使用 SQLite 为 apache 用户提供适当的写入权限
【发布时间】: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 questionsthe PDO manual 知道,解决此问题的方法是将数据库目录的写访问权限授予www-data 用户,但我对权限以及如何安全地授予它们相对较新.有人可以指定应授予www-data 用户什么权限级别,以及如何完成此操作?

【问题讨论】:

  • 这里的关键信息是 db 的 目录 需要写入权限,因为 sqlite3 需要在目录中创建新文件(例如“wal”或回滚文件)。我花了几个小时才弄清楚(大多数答案只告诉你确保数据库文件本身是可写的)

标签: php apache sqlite lamp user-permissions


【解决方案1】:

这实际上取决于 apache 服务器配置(也许您不允许退出虚拟主机目录),但这可以解决问题

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

【讨论】:

  • 谢谢,这确实有效 - 这种方法是否存在任何安全问题?
  • Apache 不应该在虚拟主机目录之外拥有写权限。编写 PHP 时要小心,这里的任何安全漏洞都可能导致有人在您的 DB 目录中写入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多