“身份验证被拒绝:目录 /home/user 的所有权或模式错误” - 尽管权限“错误”,如何强制 sshd 接受身份验证?

“身份验证被拒绝:目录 /home/user 的所有权或模式错误” - 尽管权限“错误”,如何强制 sshd 接受身份验证?

由于某些原因,我需要某些特定用户的主目录是组可写的。但是,当尝试使用 ssh 密钥登录该用户时,sshd 拒绝身份验证,因为它需要主目录只能由所有者写入。如果它是组可写或全局可写,则 sshd 会拒绝身份验证,并显示(臭名昭著的)消息“身份验证被拒绝:目录 /home/user 的所有权或模式错误”。

有什么办法(除了重新编译 sshd 之外)力量即使主目录是组可写的,它也接受密钥身份验证吗?也许将 ssh 密钥放在用户主目录之外的不同目录中,并告诉 sshd 使用这些密钥?

答案1

我自己找到了解决方案:) 事实上有两种不同的可能性。

首先是在文件中将选项设置StrictModesno(默认为yes) 。/etc/ssh/sshd_config通过该设置,sshd 不会对用户主目录强制执行权限。这种方法的缺点是它对于所有用户来说都是全局的。

第二种方法是使用AuthorizedKeysCommand选项。我们需要编写一个简单的脚本,对于该特定用户名(它作为第一个参数传递给脚本)将输出该用户的授权密钥文件 - 无论何时找到 - 对于第一个参数的其他值,它只会简单地输出没做什么。就像是:

#!/bin/sh
if [ "$1" = "user" ]; then
  cat /usr/local/etc/users_authorized_keys
fi

例如,如果脚本放置在 中/usr/local/libexec/listkeys,那么我们需要将以下行放入/etc/ssh/sshd_config文件中:

AuthorizedKeysCommand /usr/local/libexec/listkeys

通过该解决方案,/home/user目录可以是组可写的,而对于其他用户,主目录的权限仍然强制执行。

相关内容