如何设置apache2的权限,让用户在/ var/www /中创建或编辑文件

Kid*_*ddo 1 apache permissions ubuntu

我正在使用DO的Ubuntu 14服务器,安装了LAMP堆栈,我按照这里的说明在ubuntu上安装flask,因为我的主要目的是在我的网站上使用Flask.

https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps

在测试期间,当用户连接到"http:/ myvpsip/createfile /"并在当前文件夹/ var/www /上创建新文件时,我从Apache收到错误,说无法创建文件,"权限被拒绝".

我再次尝试使用PHP脚本在同一目录/ var/www /上创建一个新文件,但遇到了同样的问题.两个试验均使用root帐户完成.我试图将www文件夹chmod到755或777,但它们无法正常工作.

我的问题是,如何设置apache2的权限,当用户浏览网站时,他们将能够在当前目录中创建/编辑文件?

谢谢

Ker*_*shi 9

这是因为在安装应用程序时,您以root用户身份执行此操作.您的所有应用程序文件和目录都归root所有.

如果您在/ var/www上查看并查看FlaskApp文件夹结构,您可能会看到如下设置的权限:

-rw-r--r--  1 root     root
Run Code Online (Sandbox Code Playgroud)

当Apache运行时,它代表用户root拥有的主进程和用户www-data拥有的几个子进程运行.基本上,Apache的运行就像用户www-data一样登录.

当您的应用程序需要执行文件或文件夹操作(它代表Apache www-data用户运行)时,将使用public/world权限位,因为Apache子进程不是以root用户身份运行而不是以root用户身份运行.

从上面看,我们看到只为公共/世界权限设置了读取位 - 没有写入.这就是问题所在.

解决此问题的一种方法是使用户root和组www-data拥有/ var/www/mywebsite下的所有内容.这样就可以设置为只有root用户才能拥有完全权限,而www-data(其他人)只能读取和执行(不写入).

设置网站时,应将其设置为位于其自己的单独文件夹下.这样,您可以在以后添加多个虚拟域(即更多网站).假设'mywebsite'是您的域所在,并且您已经在其中安装了应用程序软件(Flask):

cd /var/www/mywebsite
chown -R root:www-data /var/www
Run Code Online (Sandbox Code Playgroud)

然后,您作为系统管理员,需要了解应用程序并通过文件夹和文件设置权限.通常应用权限,然后根据具体情况.

对于大多数目录(750)

- Only root can rwx directory
- www-data can only read and execute directory
- no public/world bits set as it makes no sense (*)
Run Code Online (Sandbox Code Playgroud)

对于可以通过Web应用程序更改的目录(770)

- Root can rwx directory
- www-data can rwx directory
- no public/world bits set as it makes no sense (*)
- for uploading files, creating images, documents, etc by the users of the site
Run Code Online (Sandbox Code Playgroud)

对于大多数文件(640)

- Never set the execute bit to avoid execution of misplaced shell or executable files
- PHP, Perl, etc. are just text files. They have nothing to do with exec permission
- No group write bit set
- Read must be set for owner and group else they cant see the web document
Run Code Online (Sandbox Code Playgroud)

对于需要更改文件的特殊情况(660)

- Set group write bit if you want www-data users to create things
Run Code Online (Sandbox Code Playgroud)

(*)因为访问Apache的所有用户都代表www-data运行