我的 .ssh 目录位于加密的稀疏映像中。例如 ~/.ssh 是指向 /Volumes/VolumeName/.ssh 的符号链接
问题是,当我尝试使用公钥通过 ssh 进入该机器时,我在 /var/log/secure.log 中看到以下错误消息:
Authentication refused: bad ownership or modes for directory /Volumes
有什么方法可以干净利落地解决这个问题吗?
更新:
~/.ssh 和 authorized_keys 上的权限正确:
> ls -ld ~
drwxr-xr-x+ 77 vitaly staff 2618 Mar 16 08:22 /Users/vitaly/
> ls -l ~/.ssh
lrwxr-xr-x 1 vitaly staff 22 Mar 15 23:48 /Users/vitaly/.ssh@ -> /Volumes/Astrails/.ssh
> ls -ld /Volumes/Astrails/.ssh
drwx------ 3 vitaly staff 646 Mar 15 23:46 /Volumes/Astrails/.ssh/
> ls -ld /Volumes/Astrails/
drwx--x--x@ 18 vitaly staff 1360 Jan 12 22:05 /Volumes/Astrails//
> ls -ld /Volumes/
drwxrwxrwt@ 5 root admin 170 Mar 15 20:38 /Volumes//
错误消息表明问题出在/Volumes,但我没有看到问题。
是的,它是 o+w,但它也是 +t,这应该没问题,但显然不是。
问题是我无法更改 /Volumes 权限(或者更确切地说不应该更改),但我确实希望公钥登录能够正常工作。
一开始我考虑将镜像挂载到 /Volumes 以外的其他地方,但标准 OSX 挂载会在登录时自动完成。我在这里询问了这个问题:如何在 osx 上更改磁盘映像的默认挂载目录 我得到的唯一答案是“你不能”;)
我可以通过编写一些 shellscript 来手动将卷安装在非标准位置,但这将是一种严重的黑客攻击,我仍在寻找一种更干净的方式来做我需要的事情。
答案1
$ man sshd_config
;答案就在这里
StrictModes
Specifies whether sshd(8) should check file modes and
ownership of the user's files and home directory before
accepting login. This is normally desirable because
novices sometimes accidentally leave their directory or
files world-writable. The default is ``yes''.
$ sudo emacs /etc/sshd_config
;关闭模式检查
- #StrictModes yes
+ StrictModes no
$ /usr/sbin/sshd
; 重新启动 sshd
只是不要忘记保持你的.ssh 文件权限正确。
答案2
现在,我不确定如何在 OS/X 上具体执行此操作,但由于 OS/X 是 BSD 系统,它应该与 FreeBSD 类似。
以下是在 FreeBSD 上执行的操作。
sshd
不会跟踪其密钥文件的符号链接。这样做是为了安全。因此,您需要更改sshd
尝试查找密钥文件的位置。
您需要修改/etc/ssh/sshd_config
文件并查找AuthorizedKeysFile
条目。默认为.ssh/authorized_keys
(相对于用户的主目录)。
将条目更改为 authorized_keys 文件实际位置的完整(绝对)路径。有一定数量的令牌可用 - 最有用的是使用%u
登录用户的用户名进行替换。
例如:
AuthorizedKeysFile /Volumes/EncryptedData/%u/.ssh/authorized_keys
会给你/Volumes/EncryptedData/vitaly/.ssh/authorized_keys
如果只有一个用户使用该系统,那么省略 %u 扩展并只使用单个路径是相当安全的 - 但请注意:如果你添加更多用户,他们都使用相同的密钥文件因此,最好从一开始就使用用户名扩展以防万一(您不想在 6 个月后添加用户并忘记您已经这样做了)
因此,如果您的系统上有一个 /etc/ssh/sshd_config 文件,那么此方法应该有效。
答案3
确保权限正确。请参阅这里