有什么更好的select:使用su切换到root或enabeling sudo? 如果没有使用sudo,入侵者就需要知道被允许ssh的用户的密码(或者密钥),然后还需要知道root密码。 用sudo,非特权用户的密码就足够了。
我build立了一个新的web服务器(Debian 8.2),并且想知道通过SSH安全连接到它的最佳实践是什么,并且仍然很容易使用它。
到目前为止,我已经在SSH上禁用了PermitRootLogin并切换了端口。 另外iptables是在阻止我不需要的一切。 现在我必须login一个非特权用户,然后切换
su root
但是,以root身份工作并不是我所听到的最好的事情……所以我想到了授予我无特权的用户sudo权利。
然后再入侵者只需要知道一个密码,因为sudo是要求当前用户密码而不是根密码。 因此,我计划通过在SSH中禁用PermitRootLogin来使攻击者更难以继续工作。
所以:su根或sudo?
到目前为止,我已经在SSH上禁用了PermitRootLogin并切换了端口。
我不是在非标准端口上运行服务的忠实粉丝; 你使自己和他人的互用性更难,因为没有真正的收益。 用一个体面的密码(或更好的:密钥),随机的SSH扫描没有成功的机会,有针对性的攻击不是由不同的端口分阶段。
但是,以root身份工作并不是我所听到的最好的事情……所以我想到了授予我无特权的用户sudo权利。
这是个人偏好; 有select任何一种方法的正当理由。
就个人而言,我宁愿避免sudo,主要是因为它比su复杂得多。 而且这种复杂性在sudo的configuration和sudo本身(有几个安全build议 )中都有更高的安全风险。 不过,sudo在允许非特权用户执行非特定命令而非密码方面非常有用。
这就是说,切换到root并使用sudo按照你所描述的方式是非常可交换的,除了一些事情:
Sudo可以logging通过它执行的每个命令。 在使用su时,您必须依赖root的shell历史logging。 (攻击者可以轻易地绕过这个,例如通过简单的做sudo su )
用sudo,你通常需要用户的密码,你需要root用户的密码。
使用sudo,交错特权和非特权命令更容易。
但是,我通常会发现自己要么执行需要很多根的pipe理任务,要么执行不需要root的非pipe理任务。 为了避免混淆,我使用shell提示来区分根(红色)和用户(蓝色)。
默认情况下,sudo仅限于某些帐户。
对于su,通过使用pam_wheel.so将su-to-root限制到某个组的成员,可以实现类似的function。 ( addgroup --system wheel , adduser YOU wheel ,取消/etc/pam.d/su的pam_wheel行注释)
我应该通过密码禁用SSH身份validation,只使用密钥? 那么如果我不在我自己的笔记本电脑上,我将很难访问服务器。
是的,这可能是最大的安全收益之一。
您可以在多台(可信赖的)机器上为您的帐户的SSH密钥授予访问权限。
如果机器不受信任,则应考虑不要从它们login; 他们可以注入命令或有一个键盘logging嗅探您的密码。
一些额外的提示:
考虑将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 auth required pam_succeed_if.so quiet_success user ingroup allowssh 。
考虑安装一个报告exception的日志检查器。 为了减less邮件的数量,你可以考虑邮寄成功的login尝试,而不是失败的login尝试。
我的想法:
PasswordAuthentication和PermitRootLogin设置为no AllowTcpForwarding no禁用端口转发 我们所做的(ops公司)是禁用密码login,只允许密钥。 使用cryptostick (新名称, NitroKey )或只是一个智能卡 ,但这意味着你还需要一个读者。 这样你就有了双重身份validation,你拥有的东西(棒子或卡片)以及你知道的东西(sudo的密码)。
除非你确实需要切换到根目录,否则认为这是不好的做法,总是花时间考虑是否真的需要切换。