Unix 文件系统权限可提供安全可靠的计算体验。最好使用权限来为您的工作流程建模,并且只是偶尔提升权限,因为提升的权限是很容易发生问题的时候。遵循最小特权原则将防止许多安全漏洞产生严重后果。
您有一个目录,用于存储静态 Web 内容、可执行 Web 内容(可能还有 Web 日志?)/var/www/
。它不应归 Apache 用户所有,也不应归您的用户帐户所有。root
(或更具体的东西,例如www-content
)是有道理的。
您不希望正在运行的 Web 服务器具有修改其自身内容的能力——许多 PHP 蠕虫以这种方式传播。如果您的 Web 服务器只能写入日志文件,则几乎不可能利用任何特权。如果它还可以写入数据库管道,它就可以做任何数据库权限允许它做的事情——随意读取或写入数据,或者只是以特定方式读取某些数据。如果它可以写入目录来存储图像以供以后使用,它可能会被滥用来托管您不想要的内容,但它至少不会影响更大的站点。如果它可以写入任何内容,攻击者可以使用它来持续修改自己的内容并可能攻击您的用户。
您可能也不希望该/var/www
目录或其任何子目录归您的用户帐户所有——您不希望 Firefox、Evolution、Pidgin 或 Spotify 缺陷对您的 Web 服务器内容具有写入权限。
因此,更好的方法是在您的主目录中的某个地方,在您拥有的文件上完成所有开发工作,并由另一个 Web 服务器提供服务,该服务器在您自己的用户帐户下运行在一个非特权端口上,该端口绑定只接受localhost
连接。将软件开发到您喜欢的状态后,您可以将软件分发到生产Web 服务器。
分发通常是通过一个工具来完成的git
——你git push
将你的开发工作放到一个存储库中,然后当你希望部署一个新版本时,你登录到拥有该/var/www
目录的帐户并使用它git pull
来下载一个新版本。这有点复杂,但拥有一个真正的源代码控制系统非常值得付出额外的努力。
如果您想要更简单的东西,您可以简单地使用sudo(1)
提升www-content
权限并将内容复制过来;它可能看起来像这样:
cd ~/projects/website
sudo -u www-content tar cf - . | (cd /var/www/ && tar xvf -)
这样,实时制作文件归Web 服务器所有,www-content
不能由 Web 服务器写入。您的用户帐户也无权修改它们,除非您sudo
明确运行该命令。(正确设置sudo(8)
可能是一些工作;如果您是单人开发商店,那么执行这些步骤可能root
会很好。)
If you have a few users who want to work on the web content live, and you trust them and the software they run completely, then you can use group ownership to skip some of the steps. (This might be fine for hobbyist use, but I wouldn't want to use this to run a business.) Add each person's user account to a specific group, say www-editors
, and make /var/www
and children group-owned by www-editors
, use the BSD groups behavior (man 8 mount
, look for bsdgroups
, for full details; it requires changing mount options in /etc/fstab
and setting the setgid
bit on the directories). This gives you, and all users in the group, the ability to edit the files without any intermediate steps. This is both convenient and dangerous. Use it wisely.