使用SSHFS挂载远程文件系统

5

好的,设置有点复杂。别怪我,我不是系统管理员。

这是情况。有一台机器可以从网络外部通过SSH登录。我只能使用我的私钥作为root远程登录(是的,你没听错)。我知道通常是先用用户登录再提高权限,但在这种情况下,我必须反过来做。

问题是,我想使用SSHFS远程挂载文件系统。我已经完美地解决了这个问题。然而,我不想每个我修改的文件都反映出root权限。我想先取消提权(su到一个用户账户)。

有人知道我如何在SSHFS中做到这一点吗?


如果我理解正确的话,您可以通过sshfs进入远程系统的root,但是无法(由于sysadmin;也是root)通过sshfs进入权限较低的帐户? - Inshallah
我曾经遇到过类似的问题,发现我试图编辑的文件夹实际上是一个符号链接。现在我直接通过sshfs连接到该文件夹(实际的真实路径,而不是跟随符号链接)。这对我有用。 - Rick
如果您可以作为root进行ssh,则可以创建第二个用户帐户。如果由于组织政策而不被允许这样做,则表示您有一个组织问题。 - Lie Ryan
2个回答

8
您可以创建一个脚本来拦截远程机器上sftp子系统的调用。将以下脚本放置在远程服务器的某个位置,比如说/root/bin/sftp_intercept:
#!/bin/sh
exec sudo -u less_privileged_user /usr/lib/openssh/sftp-server

然后像这样进行调用:

sshfs root@remote:dir mountpoint -o sftp_server=/root/bin/sftp_intercept

这样就可以得到所需的结果。

您需要一个适当的sudoers条目,以使sudo在不提示密码的情况下工作,并且不要忘记“chmod 755 ~/bin/sftp_intercept”。

此外,请确保/usr/lib/openssh/sftp-server确实是sftp-server的路径。如果不是,则可能是/usr/lib/sftp-server。


1
什么,使用 sudo 之后,没人再记得 su 了吗?一般情况下,su less-privileged_user -c '/usr/lib/openssh/sftp-server' 不需要 root 密码。 - ephemient
1
非常感谢...sudo由于某些未知原因引起了问题...最终我使用了-o sftp_server="su user -c 'exec /usr/libexec/openssh/sftp-server'" - Jonathan Hawkes

1

sshfs的手册建议传递

-o uid=$YOURUID -o gid=$YOURGID

在你的sshfs调用中,应该将你创建的文件的用户/组设置为该uid/gid。显然,你需要在远程系统上找到它们。


这些选项仅影响本地文件,而不是远程机器上的文件。从问题中并不完全清楚是否需要这样做;我认为他可能想更改远程机器上的文件所有权。 - Inshallah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接