2013-09-16 13:33:11 +0000 2013-09-16 13:33:11 +0000
27
27

授予www-data组的写入权限。

我正在创建一个网站,其中一部分功能是用php写出用户生成的数据。我在Ubuntu 13.04上使用nginx。目前我只是在测试,所有的东西都是通过locahost上的nginx提供的。

我的php脚本无法写入文本文件(尽管我可以手动完成),我认为是权限问题,因为我的/var/www/example.com/public/html目录的写入权限。

目前我(iain)拥有这个目录,但似乎将/var/www目录和里面所有东西的所有权转移给www-data用户(或者应该是组?),并将我自己加入www-data组会更合理。下面的方法正确吗?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

那么这是否意味着www-data组中的任何人现在都可以在/var/www中读、写和执行?

答案 (1)

53
53
53
2013-09-16 13:53:44 +0000

首先,useradd创建一个新用户。由于你(iain)已经存在,你要调用usermod来代替。所以这将是

sudo usermod -aG www-data iain
addgroup www-data

(注意基于Debian的服务器上的-a(包括Ubuntu),它将把你加入该组,并保留你在其他组的成员资格。忘了它,你将只属于www-data组–如果其中一个是轮子,可能会是一个糟糕的体验。在SUSE类型的服务器上,这个选项是-A而不是-aG,所以要仔细阅读man usermod才行)。)

其次,你不希望apache对/var/www有完全的rw访问权:这有可能是一个重大的安全漏洞。作为一般规则,只允许你需要的东西,而不是更多最小权限原则)。在这种情况下,你需要apache(www-data)和你(www-data组)在/var/www/example.com/public_html中写(和读),所以

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html
  • *

编辑 : 回答你原来的问题,是的,www-data的任何成员现在都可以读和执行/var/www(因为你权限的最后一位是5=读+执行)。但因为你没有使用-R开关,所以只适用于/var/www,而不适用于它所包含的文件和子目录。现在,它们是否能写是另一回事,取决于/var/www的组别,你没有设置。我想它通常是root:root,所以不,它们(可能)不能写。

编辑于2014-06-22:添加了一个说明,-aG选项在基于Debian的服务器上有效。显然它随发行版不同而变化,所以在执行前要仔细阅读man