为了账号安全,请及时绑定邮箱和手机立即绑定

将 www-data 添加到某个组后,仍然无法让 apache 服务器访问数据库

将 www-data 添加到某个组后,仍然无法让 apache 服务器访问数据库

MMMHUHU 2022-10-06 19:46:00
这是将 sqlalchemy 会话连接到数据库文件的代码from sqlalchemy.orm import sessionmakerfrom DB_setup_alchemy import Base,User,Visitor,VisitRecordfrom os import getcwd# link to the DB we are using# pay attention to this part, if without check_same_thread=false, there will be lots of errors# but what is going on behind this part of code# what does engine and session really meansdb_path='sqlite:///'+getcwd()+'/data.db'print(db_path)engine = create_engine(db_path,connect_args={'check_same_thread': False})Base.metadata.bind = engineDBSession = sessionmaker(bind=engine)session = DBSession()我项目的所有文件都在 flaskapp 文件夹中drwxrwxr-x 9 ubuntu ubuntu 4096 Apr 11 20:09 .drwxr-xr-x 3 root   root   4096 Apr 11 04:11 ..drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 11 04:31 .awsdrwxrwxr-x 5 ubuntu ubuntu 4096 Apr 11 20:38 flaskappdrwx------ 2 root   ubuntu 4096 Apr 11 20:11 testflaskapp 文件夹中的文件:drwxrwxr-x 5 ubuntu ubuntu  4096 Apr 11 20:38 .drwxrwxr-x 9 ubuntu ubuntu  4096 Apr 11 20:09 ..-rw-rw-r-- 1 ubuntu ubuntu   345 Apr 11 16:37 AWS_API.pydrwxrwxr-x 2 ubuntu ubuntu  4096 Apr 11 17:37 __pycache__-rw-rw-r-- 1 ubuntu ubuntu   296 Apr 11 16:23 app.wsgi-rwxrwxr-x 1 ubuntu ubuntu 20480 Apr 11 17:37 data.db-rw-rw-r-- 1 ubuntu ubuntu  7426 Apr 11 20:38 flaskapp.py-rw-rw-r-- 1 ubuntu ubuntu     6 Apr 11 04:34 index.htmldrwxrwxr-x 2 ubuntu ubuntu  4096 Apr 11 16:46 templatesdrwxrwxr-x 4 ubuntu ubuntu  4096 Apr 11 16:13 venvdata.db 和文件夹flask 都对ubuntu 组中的用户具有权限,我可以看到用户www-data 也在ubuntu 组中:(venv) ubuntu@ip-172-31-24-93:~/flaskapp$ groups ubuntuubuntu : ubuntu adm dialout cdrom floppy sudo audio dip www-data video plugdev lxd netdev但如果我输入:groups www-data(venv) ubuntu@ip-172-31-24-93:~/flaskapp$ groups www-datawww-data : www-data这是来自浏览器的错误:Internal Server ErrorThe server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.我尝试了简单的打印你好网络应用程序,它正在工作。所以,我想知道我应该怎么做才能更改所有者或文件权限以使我的烧瓶应用程序正常工作?
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您向我们展示了$ groups ubuntu和的输出$ groups www-data。它表示ubuntu具有组写入权限,例如附加到664组中的文件www-data

但是您的网络服务器是以用户身份www-data而不是作为用户运行的ubuntu,所以这无关紧要。重要的是想要www-data属于该ubuntu组以便写入当前数据库文件,但它不在该组中。你可以编辑/etc/groups来解决这个问题。

或者,您可能希望$ sudo chgrp www-data data.db(或 chown)授予 apache Web 用户对该文件的访问权限。


查看完整回答
反对 回复 2022-10-06
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

终于自己弄清楚是什么问题:这个问题背后的错误是apache用户与ubuntu不同。所以当 apache 运行我的 web 应用程序时,它是从不同的工作目录运行的,当然找不到数据库文件。


因此,我首先在代码中更改了数据库 .db 文件的路径以更正绝对路径,如下所示:


engine = create_engine('sqlite:////home/ubuntu/flaskproject/data.db',connect_args={'check_same_thread': False})

然后将项目文件夹和数据库文件的所有者更改为 www-data(apache 用户):


sudo chown www-data .

sudo chown www-data data.db

并确保所有者对项目文件夹和 data.db 文件具有读写权限(在我的情况下已经满足)


解决权限问题的另一种解决方案是将用户 www-data 添加到 ubuntu 组,因此我们不需要更改项目文件夹和 data.db 文件的所有者(但要确保 ubuntu 组中的用户具有读写权限)


usermod -a -G ubuntu www-data

所以总的来说,只要数据库的路径是正确的(建议绝对路径)并且用户 www-data 具有项目文件夹和数据库文件的权限,一切都应该正常。


查看完整回答
反对 回复 2022-10-06
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信