我正在创建一个网站,部分功能是使用 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
首先,useradd
创建一个新用户。由于您(iain)已经存在,因此您想usermod
改为调用。因此,应该这样:
sudo usermod -aG www-data iain
addgroup www-data
(请注意,-a
基于 Debian 的服务器(包括 Ubuntu)会将您添加到该组,并保留您对其他组的成员身份。忘记它,您将只属于 www-data 组 - 如果其中一个是 wheel,可能会是一次糟糕的体验。在 SUSE 类型的服务器上,选项是-A
而不是,-aG
因此请仔细阅读man usermod
以确保正确。)
其次,您不希望 Apache 拥有完全的 rw 访问权限/var/www
:这可能是一个重大的安全漏洞。一般来说,只允许您需要的内容,不要再允许其他内容了(最小特权原则)。在这种情况下,您需要 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
在执行前请仔细阅读。