我试图了解直接与 root 进行 ssh 或在维护服务器的上下文中创建辅助 sudo 用户之间的技术论点/安全含义。为了澄清,我们谈论的是由单个管理员拥有的服务器。对于在机器上工作的多人来说,很明显,每个真实的人都有唯一的用户和细粒度的权限有审计跟踪的好处。
我的想法是,如果这是一个桌面站,这是有道理的,建议使用非 root 用户进行日常工作,但在服务器上,您通常登录来维护它,并且 99% 的时间您的所有活动都需要 root权限。
那么创建一个“代理”用户是否有任何安全优势,您无论如何都要 sudo 到 root,而不是直接提供对 root 的 ssh 访问?
我能想到的唯一好处是通过默默无闻的安全性,即机器人通常会尝试探测“root”用户。但是从我的角度来看,如果sudoers的用户被盗用了,就和盗用root用户一样,所以游戏结束。
此外,大多数远程管理框架、NAS 系统、管理程序都鼓励使用 root 用户进行 Web 登录。
需要考虑的一件事:如果使用 SSH 密钥进行远程身份验证,如果私钥被泄露会发生什么?
如果是 root:root 访问受到损害。希望您没有在多台机器上使用该密钥进行 root 访问。
如果用户:该用户受到威胁。但是,攻击者可能无法运行 sudo,因为用户的密码没有泄露。然而。(假设使用 sudo 需要密码)
仍然是一个糟糕的情况,但可能会更好。(如果您对 SSH 密钥使用密码短语也会更好)
其他用户已经提到了非常好的观点。我想回顾一下我认为最重要的那些……
...为什么要使用 sudo
/etc/ssh/sshd_config
还是通过SUDOers文件。(不要使用其他编辑器visudo
!)Defaults targetpw
在我的台式机和服务器上使用-。所以一个人必须知道两个不同的密码才能成为root用户)最后一点:我个人为我的服务器上的每项任务使用单独的用户(我是唯一的管理员):例如,一个用户用于备份。它可以访问要备份的文件和单独的 ssh 访问异地服务器。我有一个监控用户,他对日志文件和监控 API 的访问权限非常有限。仅举几个例子...
但对我个人而言,最重要的一点是我们都是人。你会犯错误。必须
sudo
在每个命令之前输入,这可能会改变您的系统行为,至少会增加一个障碍,让您过度思考您的命令。所以我强烈建议:使用 sudo 而不是 root 用户
从技术角度来看:root用户有两种常用的使用方式。以 root 身份直接通过 ssh 登录,或者通过 ssh 登录并键入
sudo su
或su -
(...) 作为第一个命令。这两种方式都不会让我感到舒服。ssh root 登录
LoginGraceTime
和MaxAuthTries
以限制 BruteForce 攻击。PermitRootLogin
)苏
sudo
在每个命令之前都键入,这使您更容易出错对于所有用途,我强烈建议您不要使用root;如果可能的话,甚至禁用它。我经常在 Linux/UNIX 服务器上禁用 root。根用户不能被隔离,其操作不会被记录。至少,将记录一个 sudo 命令,这在管理员处理不当的情况下非常有用。您还可以对用户进行细粒度权限,仅授予一些权限。当然,在禁用 root 的情况下,无法使用 root 进行 ssh 日志记录。
根据经验,只有在您需要以单用户启动或紧急启动时才会错过 root;服务器无法正常启动的罕见情况。但如果是这种情况,您可以启用它,更改其密码并继续进行恢复。
另一种情况是使用 sftp(或 ftp,当然应该避免,除非仅在内部网络中)复制文件,您只需要直接复制到/从具有 root 权限的目录。在这种情况下,您可以使用 ACL 将权限授予另一个用户并继续。
我想对此提出异议。有许多例行任务只是查找任何用户都可以看到的信息。“top”、“ps”、“df”、查看日志等
养成只运行需要 root 作为 root 的命令的习惯。并三重检查这些命令,以确保您没有拼错任何内容。
如果您以 root 身份运行所有内容,您将变得草率。它发生在每个人身上。
当马虎时,你会犯错误。它发生在每个人身上。
不要养成这种习惯。
(我也同意其他几个人所说的关于成为今天唯一的管理员并不意味着您将成为明天唯一的管理员)
安全顾问在这里。
所有应用程序、系统、解决方案、操作系统和您能想到的任何其他东西的最佳实践是仅使用 root 帐户进行设置然后禁用它。
一定要创建一个具有管理员权限的个人用户帐户以进行日常管理,但是一旦设置完成,应该禁用 root 帐户,无论它可能是什么。
混淆帐户仍然不是一个坏主意,即不要将您的管理员帐户命名为 admin,但它的实际价值非常低。大多数“黑客”发生在数周和数月内,而不是像媒体/电影/电视节目那样呈现的几秒钟和几分钟,任何人都会具备“黑客”的技能,您也将具备检查诸如 Windows 管理员 SID 之类的技能(对于内置的 Windows 管理员,它始终是 S-1-5-32-544)。
对于大多数公司来说,一个重大的安全问题是您需要审计跟踪和个人问责制。
root
根据定义,默认(管理员)帐户(如帐户)不是个人帐户。让它们保持开放会导致(相当于)共享密码的不良安全实践,并且没有个人/个人责任。通常,当同事离开公司时,您想禁用他们的帐户并知道这会锁定他们的访问权限。
您不希望他们的离开需要重置离开者(可能)有权访问的每个 root 和其他共享帐户的密码(和 ~/.ssh/authorized_keys 文件)。那是经常不会发生的 PITA 管理工作,因此您需要首先防止它成为问题。
因此,即使在一个人的 IT 部门,请为您设置一个个人帐户作为管理员,授予自己
sudo
权限或其他管理员角色,并且不要直接以 root 或任何可用的默认超级用户/管理员帐户登录。因此,当您的公司发展壮大并成为两个人的 IT 部门时,或者无论何时离开,您都不会留下需要清理的过多特权的不确定混乱。
在一份新工作中,您不希望在第一个工作日内清理前任留下的“后门访问”,作为离职者,您也不需要冒您的访问权限未被取消而导致安全的风险违规行为。
像所有安全问题一样,这是一个风险偏好问题。正如其他人所说,使用密钥作为非 root 用户进行 SSH,然后升级为 root 意味着还有第二个因素在起作用(您拥有密钥,您知道密码),它可以限制妥协的爆炸半径. 还有其他人提到的审计方面。
如果您对没有额外的保护层感到满意(无论它可能多么轻微),那么就按照您的意愿去做。
大多数安全指南建议禁用 root SSH,主要是因为它会强制您将用户权限列入允许列表以执行某些操作。您需要采取积极的行动来授予用户 sudo 权限。您可以进一步控制用户可以执行的操作,因此您甚至可以让单独的用户执行单独的任务。或者可以运行某些 sudo 命令但不能运行其他命令的自动化用户。
无论如何 - 许多安全基准建议禁止 SSH,甚至禁止来自控制台本身的 root。如果我可以确定我的备份/重建/不可变基础设施工具,我只会自己执行此操作,否则如果不做一些 live-CD 引导技巧,就无法返回服务器。
如果您使用的是 ssh 密钥,那么直接通过 ssh 访问 root 而不是让“代理”用户感到困惑通常是相当安全的。
这纯粹是安全与便利的问题。
以 root 身份登录总是更方便,但安全性明显降低。因此,如果您同意这些警告,您可以以 root 身份登录。
但是,您的公司越大,他们就越重视安全。
例如,我目前的雇主是一家在 5 个国家拥有 50,000 多名员工的公司。获得ROOT登录是绝对不可能的。获得 SUDO 访问权限也需要大约 2 周的时间,需要得到 Director 级别的批准。