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

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 身份写入文件!即使从 myserver 执行,ls -l也会出现相同的 root 所有权。不过,我可以手动修复它:

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 选项来使新文件归创建它们的用户所有?如果不行,我可以让 sshfs 或 fuser 每次写入文件时调用自定义脚本,以便我可以使用 chown 修复文件的所有权?

编辑:
如果以上两种方法都不可能,有人可以推荐一些替代的远程文件系统软件吗:

  • 可安全地在公共互联网上使用
  • 对用户/脚本透明(设置后)(所以不是普通的 scp)

  • 答案1

    在这种情况下,问题在于你以 root 身份进行连接

    root@myserver:/home /home
    

    对于阅读,它会按原样检索信息,但是当您写入时,系统将使用您拥有的用户进行写入。

    请记住,服务器正在写入数据,因此它将使用连接到它的用户进行写入。解决方案是使用您想要写入数据的用户及其凭据进行连接:

    user1@myserver:/home /home
    

    答案2

    我怀疑您尝试使用 root (sudo) 挂载 sshfs,因此您的文件将以挂载文件系统的用户身份创建。

    答案3

    对于遇到类似问题的任何人来说,我发现 ssh-tunneling nfs 可以解决问题。

    /etc/exports 上myserver

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

    /etc/idmap.conf 上myservermyclient引文):

    ...
    Domain = localdomain
    ...
    

    /etc/modprobe.d/nfsd.conf 开启myserver

    options nfsd nfs4_disable_idmapping=0
    

    /etc/modprobe.d/nfs.conf 开启myclient

    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 上打开,nfs 流量将与 ssh 一样安全。

    编辑:
    这不起作用,但只是看起来起作用了。显然,虽然有人可能认为 idmap 应该映射 ID,但事实并非如此。至少,它只是在高级别上这样做,因此某些操作被忽略了。

    相关内容