ssh 和主目录权限

ssh 和主目录权限

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 可以访问的目录中。下面是后者的步骤:

  1. 创建一个目录来保存新密钥。这里我们将使用/usr/share/sshkeys,这可能不是最好的地方,但却是我能想到的最好的地方。

    sudo mkdir /usr/share/sshkeys
    
  2. 编辑/etc/ssh/sshd_config以包含行

    AuthorizedKeysFile /usr/share/sshkeys/%u
    
  3. 将旧的授权密钥文件从您的用户(此处称为“exampleuser”)复制到新目录

    mv /home/exampleuser/.ssh/authorized_keys /usr/share/sshkeys/exampleuser
    
  4. (可选但建议这样做,因为 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
    
  5. 重新启动 ssh 守护进程

    sudo service sshd restart
    

相关内容