我使用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修复文件的所有权?
编辑:
如果上述两个都不可能,任何人都可以推荐一些替代的远程文件系统软件:
对于有类似问题的任何人,我发现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,它只是在高水平,所以某些操作滑过去了。