在拥有一个网站的私有服务器上,/var/www 内的文件/目录不能由 www-data 组拥有,有什么原因吗?
我的理解是,只有在同一台机器上运行多个网站时,才会出现 www-data 具有写访问权限的安全风险。
答案1
适用最小特权原则。仅授予用户所需的权限,不授予更多权限。
在这种情况下,如果 Apache 仅提供页面,则不授予用户帐户编辑权限。可能的风险包括:更改文件内容或上传新内容;向文件添加可执行代码等。无论是单个站点还是多个站点,这些风险都存在。如果应用程序需要编辑特定文件,请限制对该文件的权限更改。
答案2
我为我的 WordPress 网站编写了一个简单的脚本。此脚本仅授予 Apache 对需要写入的内容的写入权限。webroot 下的其他所有内容都是只读的。我认为这是迈向更安全网站的良好一步,应该加以实践。
#!/bin/bash
PATH=/bin:/usr/bin
WEBROOT="/var/www/www.example.com"
UPLOADS="${WEBROOT}/wp-content/uploads"
chown -R nobody:nogroup ${WEBROOT}
find ${WEBROOT} -type d -exec chmod 0555 {} \;
find ${WEBROOT} -type f -exec chmod 0444 {} \;
chown nobody:www-data ${WEBROOT}/sitemap.xml ${WEBROOT}/sitemap.xml.gz
chmod 0464 ${WEBROOT}/sitemap.xml ${WEBROOT}/sitemap.xml.gz
chown -R nobody:www-data ${UPLOADS}
find ${UPLOADS} -type d -exec chmod 2575 {} \;
find ${UPLOADS} -type f -exec chmod 0464 {} \;
答案3
/var/www
即使您只有一个网站,如果该文件夹可由 apache 用户写入,那么危害 apache 用户也将使黑客能够更改其下的文件。
答案4
我不明白为什么不行。如果有一个网站,这应该没问题。但请注意,您可能希望授予某些文件的只读权限。(如果他们需要写权限,请将其列入白名单 :) )