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

这是将 sqlalchemy 会话连接到数据库文件的代码


from sqlalchemy.orm import sessionmaker

from DB_setup_alchemy import Base,User,Visitor,VisitRecord

from 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 means

db_path='sqlite:///'+getcwd()+'/data.db'

print(db_path)

engine = create_engine(db_path,connect_args={'check_same_thread': False})

Base.metadata.bind = engine


DBSession = 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 .aws

drwxrwxr-x 5 ubuntu ubuntu 4096 Apr 11 20:38 flaskapp

drwx------ 2 root   ubuntu 4096 Apr 11 20:11 test

flaskapp 文件夹中的文件:


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.py

drwxrwxr-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.html

drwxrwxr-x 2 ubuntu ubuntu  4096 Apr 11 16:46 templates

drwxrwxr-x 4 ubuntu ubuntu  4096 Apr 11 16:13 venv

data.db 和文件夹flask 都对ubuntu 组中的用户具有权限,我可以看到用户www-data 也在ubuntu 组中:


(venv) ubuntu@ip-172-31-24-93:~/flaskapp$ groups ubuntu

ubuntu : 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-data

www-data : www-data


这是来自浏览器的错误:


Internal Server Error

The 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.

我尝试了简单的打印你好网络应用程序,它正在工作。所以,我想知道我应该怎么做才能更改所有者或文件权限以使我的烧瓶应用程序正常工作?


MMMHUHU
浏览 113回答 2
2回答

富国沪深

您向我们展示了$ 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 用户对该文件的访问权限。

阿波罗的战车

终于自己弄清楚是什么问题:这个问题背后的错误是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 具有项目文件夹和数据库文件的权限,一切都应该正常。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python