sshd
如果用户的主目录是组可访问的,即使~/.ssh
设置为 700,也会拒绝接受公钥身份验证?如果 上的权限~/.ssh
是可以接受的,那么 上的权限为什么~
重要?
答案1
我猜测原因是如果您的主目录可由其他人写入,那么恶意用户可以创建~/.ssh
、添加所需的密钥,然后将其权限更改为 700。
即使您已经有一个~/.ssh
,也可以简单地将其重命名为其他名称并创建一个新的。
然而,在现代系统上,这种技巧通常是不可能的,因为chown
它只对超级用户有效,但情况并非总是如此:
在早期版本的 UNIX 中,所有用户都可以运行 chown 命令将其拥有的文件所有权更改为系统上任何其他用户的所有权。(http://www.diablotin.com/librairie/networking/puis/ch05_07.htm)
chmod 的行为取决于libc 编译选项,并且为了安全性,OpenSSH服务器稍微有点偏执。
答案2
好的,要解决这个问题,您可以采用不安全的路线并StrictModes no
按照/etc/ssh/sshd_config
前面提到的方式进行设置,或者您可以采用复杂的方式,将所有用户的 ssh 密钥存储在只有 root 可以访问的目录中。下面是后者的步骤:
创建一个目录来保存新密钥。这里我们将使用
/usr/share/sshkeys
,这可能不是最好的地方,但却是我能想到的最好的地方。sudo mkdir /usr/share/sshkeys
编辑
/etc/ssh/sshd_config
以包含行AuthorizedKeysFile /usr/share/sshkeys/%u
将旧的授权密钥文件从您的用户(此处称为“exampleuser”)复制到新目录
mv /home/exampleuser/.ssh/authorized_keys /usr/share/sshkeys/exampleuser
(可选但建议这样做,因为 exampleuser 希望能够以通常的方式添加密钥)将新密钥文件链接到旧密钥文件的位置,并允许用户访问新密钥文件
sudo chown exampleuser /usr/share/sshkeys/exampleuser sudo chmod 600 /usr/share/sshkeys/exampleuser ln -s /usr/share/sshkeys/exampleuser /home/exampleuser/.ssh/authorized_keys
重新启动 ssh 守护进程
sudo service sshd restart