sshfs文件写入不尊重UID / GID映射

我使用sshfs远程挂载我的/ home目录。 由于UID和GID在服务器和客户端上不一样,所以我使用的是idmap=file 。 此外,由于应用程序的要求,我必须挂载所有的/ home而不是个人用户目录。

sshfs_uids:

 user1:1001 user2:1000 

sshfs_gids:

 user1:1001 user2:1000 

挂载的命令:

 sudo sshfs -o nonempty -o transform_symlinks -o hard_remove -o allow_other -o nomap=ignore -o idmap=file -o uidfile=/root/sshfs_uids -o gidfile=/root/sshfs_gids root@myserver:/home /home 

在阅读文件时,一切都按预期工作(user1:user1所拥有的文件确实如此)。 但是,当我写为user1时,会发生这种情况:

 user1@myclient:~$ touch foo user1@myclient:~$ ls -l foo -rw-r--r--. 1 root root 0 Jun 13 13:54 foo 

我的用户以root身份写入文件! 即使从服务器执行ls -l也会产生相同的所有权。 我可以手动修复它,但是:

 user1@myclient:~$ chown user1:user1 foo user1@myclient:~$ ls -l foo -rw-r--r--. 1 user1 user1 0 Jun 13 13:54 foo 

是否有可能使用sshfs或fuser选项使新文件由创build它们的用户拥有? 如果没有,我可以让sshfs或fuser每次写入文件时调用一个自定义脚本,以便我可以使用chown修复文件的所有权?

编辑:
如果上述两个都不可能,任何人都可以推荐一些替代的远程文件系统软件:

  • 确保通过公共互联网使用
  • 透明(设置后)给用户/脚本(所以不是普通的scp)
  • 对于有类似问题的任何人,我发现ssh-tunneling nfs做了诡计。

    / etc / exports在myserver

     /home localhost(insecure,rw,sync,no_subtree_check,no_root_squash) 

    myserver和myclient上的myclient ( 引用 ):

     ... Domain = localdomain ... 

    myserver /etc/modprobe.d/nfsd.conf:

     options nfsd nfs4_disable_idmapping=0 

    myclient /etc/modprobe.d/nfs.conf:

     options nfs nfs4_disable_idmapping=0 

    以上两个文件在启动( 引用 )时将/sys/module/nfsd/parameters/nfs4_disable_idmapping/sys/module/nfs/parameters/nfs4_disable_idmapping为“N”。

    重新启动,或在两台机器上重新启动nfs / idmap相关服务,然后运行nfsidmap -c 。 然后, 隧道连接 :

     user1@myclient:~$ ssh -fN -L 3049:localhost:2049 user1@myserver user1@myclient:~$ sudo mount -t nfs4 -o port=3049 localhost:/home /home 

    此时, myserver的防火墙只能在端口22上打开,nfsstream量将与ssh一样安全。

    编辑:
    这不起作用,但只是似乎工作。 显然,虽然有人可能认为idmap应该映射ID,但它不会。 至less,它只是在高水平,所以某些操作滑过去了。