.ssh 的最佳实践是什么?我是否应该禁用所有 root 登录和用户密码访问?

.ssh 的最佳实践是什么?我是否应该禁用所有 root 登录和用户密码访问?

我对此很陌生,所以请为我稍微解释一下。

我在本地使用 OSX,在 Linode 上使用 Ubuntu 服务器作为我的远程主机。据我了解,我可以ssh-keygen -b 4096在本地使用它来生成两个文件:

~/.ssh/id_rsa~/.ssh/id_rsa.pub

然后在我的服务器上,我运行mkdir -p ~/.ssh && sudo chmod -R 700 ~/.ssh/创建 .ssh 文件夹,并为“文件所有者”(无论它是什么,根据 chmod wiki)授予其递归读/写/执行权限。

然后我打电话

scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys

我猜测它使用 ssh 协议将公钥上传到我刚刚创建的authorized_key服务器.ssh文件夹中新创建的文件中。

因此,我认为这意味着公共文件位于服务器上,而公共和私有文件都位于我的本地机器上。

现在假设我编辑/etc/ssh/sshd_config文件,其中我可以操作PermitRootLoginPasswordAuthenticationChallengeResponseAuthentication

我的问题:

  1. 我应该禁用 root 登录吗?我应该设置PermitRootLoginno或 吗without-password?我应该禁用所有密码并仅使用密钥吗?那么PasswordAuthentication和 呢ChallengeResponseAuthentication

  2. 将私钥和公钥文件保存在本地机器上安全吗?我是否应该删除公钥文件,只保留私钥文件?

  3. 如果我仅仅依赖密钥,这是否意味着我现在面临一个新的弱点:有人进入我的机器,从而获取我的密钥文件?

答案1

使用 ssh 或任何服务器的“最佳实践”是:

  1. 评估您的资产价值以及您安装和配置 ssh 的服务器上的数据。这是局域网后面的家用计算机吗?还是包含敏感数据、私人信息、财务信息的服务器上的公共 IP 地址?等等。

  2. 阅读所有安全选项。

  3. 然后决定如何平衡安全性、易于访问、易于配置以及资产价值。

关于 ssh 的思考请参见 -http://bodhizazen.com/Tutorials/SSH_security

答案2

将私钥和公钥文件保存在本地机器上安全吗?我是否应该删除公钥文件,只保留私钥文件?

公钥可以从私钥推导出来(但反之则不行)。如何从 SSH 私钥中检索公钥?提供公钥仅仅是为了方便起见,这样您不必在每次需要将密钥添加到新服务器时都生成它。

如果我仅仅依赖密钥,这是否意味着我现在面临一个新的弱点:有人进入我的机器,从而获取我的密钥文件?

Enter这就是为什么您在运行时不要盲目按压ssh-keygen,而是使用强密码(当然,与您的用户密码不同)来加密您的密钥。

我应该禁用 root 登录吗?

它默认是被禁用的,因为默认只允许基于密钥的登录,而 rootauthorized_keys默认不允许。

我应该设置PermitRootLoginno还是 到without-password

之所以设置为,是without-password因为这是安全的默认设置。您可以no根据需要将其设置为。但是,如果您需要以 root 身份使用rsync/ scp,那么您会遇到麻烦。

我是否应该禁用所有密码并仅使用密钥,仅此而已?那么和PasswordAuthenticationChallengeResponseAuthentication

如果您可以坚持这一政策,那么肯定只使用密钥并禁用两者。

相关内容