使用sshfs自动更改远程用户

我有两个远程服务器, foobar 。 在两台服务器上,我有一个用户git (与不同的uid和gid)。 两台服务器都在运行Debian发行版。 两台服务器都在authorized_keys中拥有彼此的root ssh公钥,所以所有与ssh相关的命令已经像一个魅力一样工作了。

git帐户已经被正确的configuration – 默认的shell被设置为/ usr / bin / git-shell,仓库在foo上工作( bar在这个问题上还没有被configuration)。

我正在尝试使用sshfsfoobar之间创build一个“共享目录”。 在foo上我有一个目录/ home / git。 该目录属于用户git (在这种情况下uid / gid 1000)。 假设我想在/ mnt / foo-git的bar上使用sshfs来挂载这个文件夹。

在正常情况下,我只是使用sshfs git @ foo / mnt / foo-git(在栏上 )来挂载目录(或者使用fstab,这是我打算在系统工作后做的事情)。 但是,git-shell有效地阻止了我以最简单的方式调用sftp-server并使用sshfs。

经过一段时间的摆弄后,我决定使用root用户login(通过ssh),用su -l更改有效的用户,然后启动sftp-server。 为了达到这个目的,我创build了一个简单的脚本(在foo上 )/ sbin / git-sftp-server:

#!/bin/bash /bin/su -l git -s /bin/bash -c /usr/lib/openssh/sftp-server 

并使用sshfs( bar )的以下选项:

 sshfs root@foo /mnt/foo-git -o sftp_server=/sbin/git-sftp-server 

该命令似乎工作,但它并没有真正改变会议的权限。 当我在上创build一个文件时,在foo文件出现与所有者的 。 这成为一个严重的问题,当git命令无法更改存储库的内容时,仅仅是因为基本的Linux文件访问控制。

现在,我看到两个可能的方向:

  1. 尝试强制与用户git的 sshfs会话。 这可能需要我摆弄git-shell,但可能不是不可能的
  2. find一种方法来修复从根会话到用户git中

无论哪种方式,到目前为止我找不到解决问题的好方法,但我依靠你的build议。

编辑:好的,在阅读@AlexStragies评论(和testing其他一些事情)后,事实certificate,我的解决scheme是有点工作。 如果我通过sshfs或fstab使用+/-以下选项挂载文件系统:

 root@foo:/home/git /mnt/foo-git fuse.sshfs defaults,_netdev,uid=998,gid=998,IdentityFile=/root/.ssh/id_rsa,allow_other,sftp_server=/sbin/git-sftp-server" 0 0 

然后用“普通”shell将su -l转换成git用户并创build一个文件,文件的uid / gid被正确设置为git @ foo。 然而 ,假设我用root @ foo和权限644创build了一个/ home / git / cat文件。用户git @ foo显然不能修改这个文件(权限被拒绝,但是我很惊讶他可以删除这个文件,但是我想这是可能是因为他有写入权限的文件夹)。 在bar计算机上,该文件似乎由用户git拥有,具有权限644,尽pipe它是真正的所有者是root @ foo。 现在,在foo处的用户gitroot都可以修改文件cat(具有在机器foo上反映的更改),尽pipe该文件仍然由具有权限644的root拥有。

这看起来好像是一个奇怪的特权升级案例,或者是一个不真实的解决方法。 所以,我现在的问题是:哪一个? 如果是后者,那我能做些什么来正确地尊重远程用户的权限?