![以什么用户身份访问 sshfs 挂载的文件夹?](https://linux22.com/image/44344/%E4%BB%A5%E4%BB%80%E4%B9%88%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%BF%E9%97%AE%20sshfs%20%E6%8C%82%E8%BD%BD%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我正在尝试对驱动器进行网络备份。这个过程有两台机器。
电脑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 无法处理块设备。它将把所有内容视为文件。您需要创造性地使用ssh
、dd
和命令行重定向,如下所示:
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