即使root用户也拒绝sshfs权限

我使用sshfs将远程文件夹从另一台服务器安装到本地服务器。 安装远程文件夹可以毫无问题地使用以下命令:

sshfs -o allow_other someServerFromSSHConfig:/home/data/somefolder/ /some/local/folder 

问题是我不能使用chown更改文件的所有者(不piperoot权限)我总是得到:

 chown: changing ownership of '/somefolder/file.img': Permission denied 

访问该文件夹的用户是保险丝组的成员。 即使我在sshfs中添加额外的挂载选项来将所有者设置为userx:groupx我无法使用userx更改权限,并使用chown -R userx:groupx [...]

我希望能够设置安装文件夹中的文件的用户权限,但事实并非如此。

正如你在评论中所说,你连接作为data @ remote_server这意味着你不能chown 。 sshfs只是一个粗略的抽象,你只允许你在sftp data@remote_server内执行的操作。所有的抽象都是漏洞,也是这个。

只有root @ remote_server可以在remote_server上显示。 local_server上的用户无关紧要。

请注意,对于sftp root@remote_server您通常需要在远程的/etc/ssh/sshd_config PermitRoot yesPermitRoot without-password这是有风险的。

PS。 默认情况下,由于PermitRoot no选项,sshd根本不允许rootlogin。 所以通常你不能sshfs root @ remote_host。 如果你想通过roottestingchown行为,我会build议设置PermitRoot without-password 。 这意味着当公钥添加到/root/.ssh/authorized_keys时,root可以login。 使用此设置,root不能单独通过提供root密码来login,因此它有点安全。

PS2。 如果你需要更多的安全性,你可以为这个文件共享设置另外一个sshd实例。 使用ForceCommand internal-sftpchroot会大大提高根安全性,但是需要使用新的TCP端口和新的防火墙例外。

如果要为sshfs挂载的文件夹设置特定的文件所有权,则需要使用uid=USER_ID_N,gid=USER_GID_Nidmap=user选项来执行此操作。

  • uid,gid – set将文件的所有权报告给定值; uid是用户的数字用户ID,gid是用户的数字组ID。
  • idmap – 使用带有用户值的idmap选项来转换连接用户的UID。 # sshfs -o idmap=user sessy@mycomputer:/home/sessy /mnt/sessy -C -p 9876他将把远程用户“sessy”的UID映射到运行这个进程的本地用户(“root”上面的例子)和GID保持不变。

有一件事要注意的是,你的UID(用户ID,系统上用户的唯一号码)在两台主机上不一定是相同的。 当ls -l时,与每个文件关联的用户名称将打印在第三列中。 但是,在文件系统中,只有UID被存储,并且只是查询UID并find与其相关联的用户名。 在Unix中,UID是重要的,而不是用户名。 因此,如果您在本地主机上是1000,而在远程主机上是1003,则sshfs挂载的目录将为您的文件显示不同的用户名。 但是,这不是问题,因为远程机器上的ssh服务器实际上是读取和写入文件。 所以,即使它在ls -l中显示为不同的UID,任何更改都将通过远程主机上的ssh服务器完成,远程主机将使用正确的UID。 如果您尝试使用查看文件UID的程序(例如ls输出错误的用户名),则可能会出现问题。

idmap = user选项可确保远程用户拥有的文件由本地用户拥有。 如果您不使用idmap = user,则挂载的目录中的文件可能显示为由其他人拥有,因为您的计算机和远程计算机对与每个用户名关联的数字用户标识有不同的意见。 idmap = user不会为其他用户转换UID。

引自: https : //help.ubuntu.com/community/SSHFS