由于某些原因,我需要某个特定用户的主目录是可组写的。但是,当尝试使用 ssh 密钥登录该用户时,sshd 拒绝身份验证,因为它要求主目录只能由所有者写入。如果它是组可写或全局可写的,sshd 会拒绝身份验证,并使用(不知名的)消息“身份验证被拒绝:目录/home/user 的所有权或模式不正确”。
即使主目录是组可写的,是否有任何方法(重新编译 sshd 除外)强制它接受密钥身份验证?也许将 ssh 密钥放在用户主目录之外的不同目录中,并告诉 sshd 使用这些密钥?
由于某些原因,我需要某个特定用户的主目录是可组写的。但是,当尝试使用 ssh 密钥登录该用户时,sshd 拒绝身份验证,因为它要求主目录只能由所有者写入。如果它是组可写或全局可写的,sshd 会拒绝身份验证,并使用(不知名的)消息“身份验证被拒绝:目录/home/user 的所有权或模式不正确”。
即使主目录是组可写的,是否有任何方法(重新编译 sshd 除外)强制它接受密钥身份验证?也许将 ssh 密钥放在用户主目录之外的不同目录中,并告诉 sshd 使用这些密钥?
自己找到了解决方案:) 实际上有两种不同的可能性。
首先是在文件中将选项设置
StrictModes
为no
(默认为yes
)/etc/ssh/sshd_config
。使用该设置,sshd 不会对用户主目录强制执行权限。这种方法的缺点是它对所有用户都是全局的。第二种方法是使用
AuthorizedKeysCommand
选项。我们需要编写一个简单的脚本,对于那个特定的用户名(它作为第一个参数传递给脚本)将输出该用户的授权密钥文件 - 无论它位于何处 - 对于第一个参数的其他值,它将简单没做什么。就像是:例如,如果脚本放置在 中
/usr/local/libexec/listkeys
,那么我们需要将以下行放入/etc/ssh/sshd_config
文件中:使用该解决方案,
/home/user
目录可以是组可写的,而对于其他用户,仍然强制执行主目录的权限。