授予对www-data组的写权限


21

我正在创建一个网站,部分功能是用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中读取,写入和执行?

Answers:


44

第一, useradd 创建一个新用户。当你(iain)已经存在时,你想要打电话 usermod 代替。那就是:

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

(注意 -a 在基于Debian的服务器(包括Ubuntu)上,它会将您添加到该组,并将您的成员身份保留给其他组。忘了它,你将只属于www-data组 - 如果其中一个是轮子,可能是一个糟糕的经历。在SUSE类型的服务器上,选项是 -A 代替 -aG 好看 man usermod 小心翼翼地把它弄好。)

其次,你不希望apache拥有完整的rw访问权限 /var/www:这可能是一个重大的安全漏洞。作为一般规则,只允许你需要的东西,仅此而已( 最小特权原则 )。在这种情况下,你需要apache( www-data ) 你呢 ( www-data group)写入(和读取)in /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 = read + exec)。但是因为你没有使用过 -R 开关,仅适用于 /var/www,而不是它包含的文件和子目录。现在,他们是否可以写作是另一回事,而且取决于他们的群体 /var/www,你没有设置。我想这通常是 root:root,所以不,他们(可能)不能写。

编辑于2014-06-22 :补充说明 -aG 选项在基于Debian的服务器上有效。它显然随着分布而变化,所以请阅读 man 在执行前仔细。


好的我明白了。 / var / www组确实是root:root。谢谢你的链接。在习惯中给予所需要的东西而不是为了方便起见似乎更明智。感谢您的指导。
duff

2
好的,所以我刚刚尝试写入/var/www/example.com/public_html cp -r php /var/www/example.com/public_html 我被许可拒绝了。我在拥有rwxrwx ---这个目录的权限的www-data组中。为什么是这样?
duff

这里可能有很多东西。例如,你没有权限读取php中的某些内容,或者你没有在usermod之后退出并注册(我用addgroup更新了我的答案以避免这种情况,并预先确定了在哪里使用sudo)。
Calimo

从所有的答案 www-data:www-data,这个解决了缺少权限的问题。谢谢。
Eugene
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.