我想知道当多个开发人员/管理员需要访问同一个 Web 服务器时什么被视为最佳实践。
是否应该有一个非 root 用户,并且该用户具有一个安全的用户名和密码,该用户名和密码对于每个人都可用于登录的 Web 服务器是唯一的,或者是否应该为每个人都设置一个用户名。
我倾向于为每个人设置一个用户名以帮助登录等,但是同一个用户是否会在多个服务器上保留相同的凭据,或者至少他们的密码是否应该根据他们所在的服务器而更改?
是否应将系统的任何非 root 用户添加到 sudoers 文件中,或者最佳做法是让所有人都远离该文件并仅让 root 执行某些任务?
任何帮助将不胜感激。
答案1
最佳实践:所有特权操作都具有可追溯性。这意味着在正常情况下,不能以 root 身份登录;人们使用自己的 ID 和权限登录。他们采取的操作是可追溯的。如果某个帐户被盗用,则可以修复它,而不会影响其他帐户或整个系统。
最佳实践:最小权限。人员和应用程序获得执行其授权活动所需的权限,但仅此而已。
遵循这两条原则就是您问题的答案。具体如何遵循则取决于您。这取决于您的站点策略建议的内容、服务器设置的复杂性、连续性计划等。请注意,遵循这些原则会使您的系统更难受到恶意攻击,但更重要的是,它可以限制善意错误造成的后果。
对于 Web 服务器维护之类的事情,大多数功能都可以通过适当的用户/组所有权和权限启用,而无需 root 访问权限(请注意,原始问题有 linux/unix 标签)。例如,Web 服务器配置文件可以由“wserver”、组“wsgroup”和权限 664 拥有。这将允许任何用户读取配置,并允许“wsgroup”中的任何人编辑文件(不一定是您想要的)。Web 内容可以位于不同的组中,只要 Web 服务器进程具有读取或执行权限,就可以提供内容。这将允许不同的(可能重叠的)组维护 Web 服务器和内容。
您还可以设置sudo
让特定用户以特定用户身份运行特定命令。最佳实践是,您应该将 root 访问权限限制在那些实际上需要 root 权限的少数项目(例如,启动监听特权端口的进程)。根据需要设置其余权限,授予尽可能少的权限 - 这有助于限制错误造成的后果。例如,如果您想允许某个组编辑 Web 服务器配置文件,请允许他们以配置文件所有者的身份执行 {vim、emacs、gedit}。
答案2
我们是一家拥有少量服务器的小型网络开发公司。
每个管理员在每台服务器上都有自己的帐户,通常通过证书登录。但是,他们也可以通过密码登录,因为他们可能需要从远程位置登录,而他们可能没有随身携带证书。
仅允许通过证书以 root 身份直接登录。我们并未完全禁止远程 root 登录,因为它对于通过 rsync 和 scp 在服务器之间传输文件非常有用,但只有最受信任的管理员才会将其证书添加到 root 的 authorized_keys 文件中。
管理员通过 sudo 获得超级用户权限,并使其成为 wheel 组的成员。
这无法防范恶意管理员,但它确实提供了一些日志记录,以及在管理员离开时禁用个人帐户的功能。它的扩展性也不好,但对于少量服务器来说还算不错。
需要超级用户权限的脚本(例如我们用来将网站从版本控制部署到网络服务器的 Capistrano)拥有自己的用户帐户,并且可以使用 sudo 执行超级用户操作。但是,它们只能通过 sudo 的 Cmnd_Alias 执行所需的命令。
我正在考虑设置 Likewise Open,以便我们可以将身份验证绑定到我们的 Active Directory 域。这将使集中身份验证、管理密码和提供细粒度权限变得更加容易。