有没有办法设置 sshd 接受的 RSA 公钥的最小大小?
我想限制用户使用 ssh-keygen -b 8196 或更高版本生成的 RSA 密钥。
我在 sshd_config 中没有看到任何选项。有一个 ServerKeyBits 选项,但似乎仅适用于 SSHv1。
答案1
在现代 sshd 版本中(比提出问题时更新),您可以使用 AuthorizedKeysCommand 来获取用户的公钥。使用它的通常原因是从某些中央存储(ldap、mysql……)获取密钥。但您也可以使用它来过滤用户的密钥。您还应该将 AuthorizedKeys 文件设置为 none,以避免回退到未过滤的密钥。
答案2
我同意 CodeInChaos 和 Brad 的观点。他们就你为确保 ssh 安全而采取的可疑方法提出了一些有效的观点。
不管怎样,您可以研究一下 PAM。如果您检查 /etc/pam.d/sshd,您可以看到 sshd 使用哪些安全模块。您可以编写自己的模块以确保用于身份验证的公共 RSA 密钥是使用 8196 位生成的,然后将模块放在 /lib/security 中。然后在 /etc/pam.d/sshd 中添加一行,如下所示:
account required /lib/security/<my_fancy_security>.so
我承认我不确定你会使用什么机制来检查所使用的密钥。例如,你可以尝试检查正在使用的公钥的字符长度。在我的计算机上,生成公私 RSA 密钥对总是会产生一个长度为 1424 个字符的公钥和一个长度为 6446 个字符的私钥。类似地,生成一个 2048 位的 RSA 密钥总是会产生一个长度为 400 个字符的公钥和一个长度为 1766 个字符的私钥。请注意,这似乎与操作系统有关;我的笔记本电脑会生成不同长度的密钥。这不是一个微不足道的限制。
这是我马上想到的最好的办法。如果 sshd 不能为您提供解决方案,您可能需要发挥创造力并开始编码。
答案3
8196?!?!?
我自己还没有尝试过,但也许可以在修改 ssh.h 后从源代码进行编译:
/* Minimum modulus size (n) for RSA keys. */
#define SSH_RSA_MINIMUM_MODULUS_SIZE 768
达到您想要的模量大小吗?
答案4
OpenSSH 9.1提供了一个RequiredRSASize
配置选项,man 5 sshd_config
详情见:
必需的RSA大小
指定 sshd(8) 将接受的最小 RSA 密钥大小(以位为单位)。小于此限制的用户和基于主机的身份验证密钥将被拒绝。默认值为 1024 位。请注意,此限制只能从默认值提高。