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

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

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

电脑1:

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

电脑2:

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

我在PC2上执行以下操作:

sshfs root@PC1:/dev ~/Desktop/netdisk/

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

sudo dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz

产生错误:

dd: opening `netdisk/sdb': Permission denied

当我检查sdb的权限时:

brw-rw---- 1 root    disk    0, 0 Jan  3 10:47 sdb

因为我 ssh-ed 到 PC1 作为根@PC1这是否意味着我对作为 sshfs 挂载的文件具有 root 访问权限?

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

答案1

sshfs 无法处理块设备。它将把所有内容视为文件。您需要创造性地使用sshdd和命令行重定向,如下所示:

PC2 -> PC1:

dd of=/home/Alan/Desktop/image.iso < ssh root@PC1 "dd if=/dev/sdb"

或从 PC1 -> PC2:

dd if=/dev/sdb | ssh root@PC2"dd of=/home/Alan/Desktop/image.iso"

答案2

您可以使用安装选项allow_other来允许您以任何用户身份访问此设备。如果您使用此选项,请记住Linux 内核有一个未解决的安全错误,影响 FUSE

sshfs -o allow_other root@PC1:/dev ~/Desktop/netdisk/

确保您也加入user_allow_other进来/etc/fuse.conf

这个答案请访问 serverfault.com 了解更多详细信息。

答案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

哪个 (无用的使用dd)简化为

cat ~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz

哪个无用的使用cat简化为

gzip <~/Destkop/netdisk/sdb >~/Destkop/ddbackup/image.gz

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

ssh root@PC1 cat /dev/sdb | gzip >~/Destkop/ddbackup/image.gz

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

ssh root@PC1 'gzip </dev/sdb' >~/Destkop/ddbackup/image.gz

相关内容