哪个选项更好:使用 su 切换到 root 还是启用 sudo?如果不使用 sudo,入侵者需要知道允许使用 ssh 的用户的密码(或密钥),然后还需要 root 密码。使用 sudo,非特权用户的密码就足够了。
我建立了一个新的网络服务器(Debian 8.2),并想知道最佳做法是什么,以便通过 SSH 安全地连接它,并且仍然可以轻松使用它。
到目前为止,我已经禁用了 SSH 上的 PermitRootLogin 并切换了端口。此外,iptables 还阻止了我不需要的所有内容。现在我必须以非特权用户身份登录,然后切换为
su root
但是我听说以 root 身份工作并不是最好的选择...所以我考虑授予我的非特权用户 sudo 权限。
再次,入侵者只需要知道一个密码,因为 sudo 要求输入当前用户密码,而不是 root 密码。因此,我通过禁用 SSH 中的 PermitRootLogin 来增加攻击者难度的计划不再有效。
那么:su root 还是 sudo?
答案1
到目前为止,我已经禁用 SSH 上的 PermitRootLogin 并切换了端口。
我不太喜欢在非标准端口上运行服务;这会让你自己和他人的互操作性变得更加困难,而且没有任何实际好处。使用合适的密码(或更好的密码:密钥),随机 SSH 扫描无论如何都不可能成功,而且有针对性的攻击不会被其他端口阻止。
但是我听说以 root 身份工作并不是最好的选择...所以我考虑授予我的非特权用户 sudo 权限。
这是个人偏好;选择任一方法都有正当理由。
就我个人而言,我更倾向于避免使用 sudo,主要是因为它比 su 复杂得多。而且这种复杂性带来了更高的安全风险,无论是在 sudo 的配置中,还是在 sudo 本身中(已经出现一些安全警告)。但是,sudo 在允许非特权用户无需密码即可执行非常特定的命令方面非常有用。
也就是说,切换到 root 并以您描述的方式使用 sudo 几乎是可以互换的,除了以下几点:
Sudo 可以记录通过它执行的每个命令。使用 su 时,您必须依靠 root 的 shell 历史记录进行记录。(攻击者可以轻易地规避这一点,例如只需执行
sudo su
)使用 sudo 时,您通常需要用户密码,而使用 su 时则需要 root 密码。
使用 sudo 可以更轻松地交错特权命令和非特权命令。
但是,我通常发现自己要么执行需要大量 root 权限的管理任务,要么执行不需要 root 权限的非管理任务。为了避免混淆,我会将 shell 提示符涂成不同颜色,以区分 root(红色)和用户(蓝色)。
默认情况下,sudo 仅限于某些账户。
pam_wheel.so
对于 su,可以通过使用将 su-to-root 限制为某个组的成员来实现类似的效果。(addgroup --system wheel
,,adduser YOU wheel
取消注释中的 pam_wheel 行/etc/pam.d/su
)
我是否应该禁用通过密码进行的 SSH 身份验证并仅使用密钥?如果我没有使用自己的笔记本电脑,那么我将很难访问服务器。
是的,这可能是最大的安全收益之一。
您可以授予多台(受信任的)机器上您账户的 SSH 密钥的访问权限。
如果这些机器不受信任,您应该考虑不要从它们登录;它们可能会注入命令或让键盘记录器嗅探您的密码。
其他一些建议:
考虑将 SSH 访问限制为需要 SSH 访问的用户帐户。
我喜欢通过 来做到这一点
addgroup --system allowssh
,然后在/etc/ssh/sshd_config
设置中PubkeyAuthentication no
,添加一个Match Group allowssh\n PubkeyAuthentication yes
节。我确信这也可以通过 PAM 来完成,使用类似的
auth required pam_succeed_if.so quiet_success user ingroup allowssh
东西/etc/pam.d/sshd
。考虑安装一个报告异常的日志检查器。为了减少邮件量,你可以考虑成功的通过电子邮件发送登录尝试,而不是不成功的登录尝试。
答案2
我的想法:
- 设置
PasswordAuthentication
并PermitRootLogin
no
- 或者,为您的 SSH 密钥设置密码(尽管没有办法强制执行)
- 使用 MFA 作为 Tim 的回答建议进一步限制 SSH 访问(就我个人而言,我会通过以下方式做到这一点PAM 的 Google Authenticator 插件)
- 不要启用无密码 sudo,并确保为您的用户设置强密码。
- 更改 SSH 的端口实际上并不是必要的,任何专用的端口扫描器最终都会找到您的开放端口。
- 使用失败禁止防范暴力 SSH 攻击
- 通过设置禁用端口转发
AllowTcpForwarding no
- 关于 iptables,使用“默认拒绝”规则系统地删除不在端口白名单上的所有内容。
- 如果您非常偏执,请使用 iptables 将 SSH 访问限制到已知良好的 IP 地址(请注意,如果您从家里或从可能发生变化的 IP 地址访问,这不是一个好主意)。