以什么用户身份访问 sshfs 挂载文件夹?

The*_*eer 5 ssh mount sshfs

我正在尝试对驱动器进行网络备份。这个过程有两台机器。

电脑1:

  • 带有 2 个硬盘 sda 和 sdb 的远程机器
  • sdb 是需要备份的驱动器
  • 存在两个用户,root和user

电脑2:

  • 我在的机器
  • 以用户 Alan 身份工作,需要时可以转到 root

我在 PC2 上执行以下操作:

sshfs root@PC1:/dev ~/Desktop/netdisk/
Run Code Online (Sandbox Code Playgroud)

安装得很好。我在 ~/Destkop/netdisk/ 中有可用的 sdb。下一步:

sudo dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)

产生错误:

dd: opening `netdisk/sdb': Permission denied
Run Code Online (Sandbox Code Playgroud)

当我检查 sdb 的权限时:

brw-rw---- 1 root    disk    0, 0 Jan  3 10:47 sdb
Run Code Online (Sandbox Code Playgroud)

由于我以root@ PC1 的身份通过 ssh 连接到 PC1,这是否意味着我对作为 sshfs 挂载的文件具有 root 访问权限?

从这个例子看来它没有,这里有我遗漏的概念吗?

Gil*_*il' 3

远程文件以您登录的远程用户(即 root)的身份进行访问。真的没有其他办法了。

您收到的错误是由于本地权限所致。这对于 SSHFS 所基于的 FUSE 来说是一个奇怪的现象。默认情况下,只有进行挂载的用户才能访问 FUSE 文件系统。即使 root 也无法访问它。阻止 root 用户访问并不是安全限制,因为 root 可以 su(1)/setuid(2) 到挂载文件系统的用户,这是 FUSE 内部架构的限制。由于您以非 root 用户身份进行了安装,因此也以该非 root 用户身份访问文件系统。无论如何,在 sudo 下运行dd不会给你带来任何东西,所以只需运行

dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)

(无用的使用dd)简化为

cat ~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)

哪个无用的使用cat简化为

gzip <~/Destkop/netdisk/sdb >~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)

如果sdb是块设备而不是远程端的常规文件,则它无法通过远程文件系统工作(如果设备条目是设备条目,则它将是本地设备,这是不可取的)。使用 ssh 访问它:

ssh root@PC1 cat /dev/sdb | gzip >~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)

无论如何,您可以通过在远程端进行压缩来节省带宽:

ssh root@PC1 'gzip </dev/sdb' >~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)