我曾在 Linux Mint 机器上使用 sshfs 挂载了互联网上另一台机器上的目录。这开箱即用。
然后我在 Ubuntu 机器(Ubuntu 22.04.3 LTS)上尝试了完全相同的命令,并收到此错误:
~$ sshfs -v <some machine on the interwebs> ~/fusessh/
fusermount3: mount failed: Permission denied
这些是我的 Ubuntu 机器上的主目录中的权限:
drwx------ 27 my_user group_a 4096 Sep 15 14:36 .
drwx------ 2 my_user group_b 4096 Aug 23 13:06 Desktop
drwx------ 2 my_user group_b 4096 Aug 23 13:06 Documents
drwx------ 2 my_user group_b 4096 Aug 23 13:06 Downloads
drwx------ 2 my_user group_b 4096 Sep 12 14:04 fusessh
my_user 同时在 group_a 和 group_b 中。
~$ groups thsi
my_user : group_b sudo group_a
根据评论进行编辑:
~$ ls -l /bin/fusermount3
-rwsr-xr-x 1 root root 35200 Mar 23 2022 /bin/fusermount3
在沙盒模式下:
~$ unshare --map-root-user
~# ls -l /bin/fusermount3
-rwsr-xr-x 1 nobody nogroup 35200 Mar 23 2022 /bin/fusermount3
答案1
运行id
以仔细检查本地和远程系统上帐户的用户和组 ID。我猜它们是不同的,即使名称相同。在这种情况下,就other
权限而言, FUSE 正尝试以用户身份修改本地挂载点chmod
。因此,您需要chmod o+rx ~/fusessh
。此挂载点的模式(权限)将由您挂载的文件系统的根模式修改,否则如果没有挂载任何内容,目录应该为空,因此授予other
读取和执行权限不会带来太大的安全风险。
为了卸载,每个目录在挂载路径中需要具有执行权限。运行realpath ~/fusessh
,然后确保该路径中的每个目录都已设置执行位other
(仍然假设每个系统上的 UID/GID 不同)。
注意:我现在发布这篇文章是因为我今天遇到了完全相同的问题。老实说,我不知道 FUSE 的底层工作原理。在我的例子中,两个系统上的 UID 相同,但 GID 不同。尽管如此,在我授予权限之前,什么都没有起作用other
。我尝试了uid
、gid
和default_permissions
mount 选项,但这些选项都没有解决问题。在我看来,这些 mount 选项只改变了它们各自的属性后文件系统已挂载,但 FUSE 在远程系统的 UID/GID 下运行前坐骑最终确定。再次强调,这只是推测,但它符合行为。