You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+Flask-Login项目部署VPS遇SQLite只读错误如何安全配置权限

问题根本原因

SQLite写入数据时,除了需要修改.db数据库文件本身,还需要在数据库文件所在目录下自动创建临时事务文件(比如回滚日志.db-journal、预写日志.db-wal等),所以运行Web服务的www-data用户需要同时拥有数据库文件的读写权限、数据库目录的写入和进入权限。

你之前给目录设666无法运行,是因为Linux系统中目录的权限逻辑和普通文件不同:

  • 目录的r权限:允许列出目录内的文件列表
  • 目录的w权限:允许在目录内新增、删除、修改文件
  • 目录的x权限:允许进入目录,访问目录内的文件
    666权限的目录没有x执行位,www-data根本无法进入db目录,自然无法操作里面的数据库文件。

兼顾安全和可用性的权限配置方案

只需要给www-data用户最小必要权限即可,不需要开放777这类全局可写的高风险权限,执行以下命令配置:

# 1. 重置db目录及内部文件的所有者为Web服务运行用户www-data
sudo chown -R www-data:www-data /var/www/mywebsite/db/

# 2. 给db目录设置权限:所有者读写执行、同组读执行、其他用户无任何权限
# 满足www-data进入目录、创建临时文件的需求,其他用户完全无法访问该目录
sudo chmod 750 /var/www/mywebsite/db/

# 3. 给数据库文件设置权限:所有者读写、同组读、其他用户无任何权限
# 仅允许www-data修改数据库文件
sudo chmod 640 /var/www/mywebsite/db/users.db

# 4. 可选:如果站点上层目录归其他运维用户管理,需要确保www-data有进入站点目录的权限
sudo chmod o+x /var/www/mywebsite

如果有其他运维用户需要管理数据库,可以将这些用户加入www-data用户组,然后把目录权限调整为770、文件权限调整为660即可,仍然不会对外开放权限。


额外优化建议

建议将SQLite连接串改为绝对路径,避免相对路径因运行上下文不同导致的路径解析错误,修改config.txt中的配置:

[database]
con = sqlite:////var/www/mywebsite/db/users.db

注意SQLite绝对路径需要写4个斜杠////作为前缀。

内容的提问来源于stack exchange,提问作者erixliechtenstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:54:03