我已经锁定了 CentOS Web 服务器,因此 root 无法通过 SSH 登录。我的网站目录和文件归 root 所有。因此,当我上传文件时,这是一个两步过程。我使用 WinSCP 将它们上传到我的 /home 目录。然后我通过 SSH 登录并将文件移动到需要的位置。
有一个更好的方法吗?网站文件应该由非 root 用户拥有吗?
在看其他问题时,这个似乎表明我应该让我的用户成为网络用户组的一部分,并且该组拥有所有网站文件。这是典型情况吗?这在安全方面有什么问题吗?
答案1
长话短说: root:root rwxr-xr-x
,除非您需要对该目录的写访问权限,在这种情况下root:www-data rwxrwxr-x
,除非您需要保护Web目录中的机密(例如数据库密码),在这种情况下root:www-data rwxr-x---
,除非您需要写访问权限和你需要保护秘密,在这种情况下root:www-data rwxrwx---
。
是的,理想情况下,您的网站文件应归 root 所有。这是因为最小权限原则:就权限而言,root 无论如何都可以做任何事情,因此 root 拥有某些东西实际上并不会赋予 root 任何额外权限 - 它只是剥夺了其他帐户的权限。这是一件好事™。
如果您不知道最小权限的原则是什么,它基本上是:为进程提供它们所需的最低权限,仅此而已,因为您希望在进程获得 pwd 并且攻击者获得权限时限制损害使用他刚刚从 pwd 进程继承的任何闪亮的新权限。这就是动机SELinux,守护进程有能力放弃特权,Linux 功能,chroot 监狱1 - 所有这些都是为了限制进程被攻击者接管时可能造成的损害。
在典型场景中,您希望每个人都拥有读取权限,而只授予 root 写入权限。在这种情况下,是否将 Web 目录设置为由www-data
2r-x
组拥有实际上并不重要,因为无论哪种方式它都会获得权限。
不过,还有更复杂的场景,需要您区分 Apache 可以访问哪些内容,以及普通人在目录树上查看可以访问哪些内容。这就是www-data
-as-group 的用武之地。它可以让您授予 Apache 的写权限,但不能授予普通用户。或者,如果您需要保护数据库密码,那么您可以拒绝每个人的读取权限,但仍然让 Apache 看到内容。
1:这是一个轻微的误传。系统chroot()
调用实际上从未被设计为安全功能,并且 chroot Jail 是在chroot()
最初出现后才被发明的。因此,它们有一些限制 - 例如,如果你是 root,你可以冲出 chroot 监狱。同样的事情也适用于Linux容器(Docker,systemd-nspawn
我正在看着你)。像BSD 监狱和Solaris 区域基本上采用了 chroot 监狱的概念并使其实际上工作安全地 - 以便排除内核安全漏洞,例如不能冲出 BSD 监狱,即使你是其中的根。
2:网络服务器的组名可能因发行版而异。它www-data
在 Debian 及其衍生版本上,但我不知道 RHEL 系列是做什么的。
答案2
我很快就能想到至少两个理由不是让您的网站内容归 root 所有:
- 一些工具,例如苏执行程序旨在在拥有该文件的用户下运行脚本等。如果你不使用它,那么你不应该打开它,而且我相信 suexec 拒绝在 root 等特殊用户的权限下运行东西,但作为深度防御,你不应该拥有 root 拥有的文件首先。
- 您需要 root 访问权限才能维护网站。没有必要让维护网站需要比您拥有的更多的权限。每次维护网站时成为 root 会增加 root 帐户的暴露程度,并增加您在维护网站时因犯错误而造成意外损坏的可能性。
答案3
拒绝 root 登录是一个不错的决定,root 是暴力 ssh 攻击的热门目标。
Root 似乎是网页内容所有者的常见选择,我使用普通用户帐户。在共享开发工作的情况下,webdeveloper
小组是有意义的,在只有一个开发人员的情况下,或者在多个开发人员之间共享开发人员帐户的情况下,不需要特殊的小组。 。