我在本地挂载点上安装了使用 sshfs 挂载的远程硬盘。此外,我还在同一台计算机上安装了 SD 卡。当我尝试从远程磁盘复制到 SD 卡时,即使具有 sudo 权限,权限也会被拒绝。但是,如果我将远程文件内容复制到 ~,然后将其复制到 SD,则没有任何问题。有人能解释一下可能出了什么问题吗?
命令如下:
sshfs remote:path local/mount/point
sudo mount /dev/mmcblk0p2 /other/local/mount/point
sudo cp local/mount/point/file /other/local/mount/point/directory/
答案1
SSHFS 是保险丝。如果没有allow_other
文件系统,则以运行它的用户的权限运行,并且只有该用户可以访问文件系统。在您的情况下,即使是 root 也无法访问文件系统。
使用allow_other
是不建议。还有allow_root
,查看man 8 fuse
并不要错过其中提到的user_allow_other
配置选项。
另一方面,/dev/mmcblk0p2
它由 root 挂载。不清楚文件系统是什么。可能性:
如果内核支持该文件系统类型,并且该文件系统支持 UNIX 权限和所有权,则适用这些。
如果文件系统类型受内核支持,但不支持 UNIX 权限/所有权,则它们很可能在挂载时为整个挂载而固定。在这种情况下,也许您可以提供一个选项来指定挂载应属于哪个用户。你没有。它很可能属于 root,其他用户都无法写入它。
如果文件系统类型不受内核支持,但用户空间程序支持,则它会被挂载到用户空间(再次是 FUSE)。挂载用户是 root
allow_other
,所以只有 root 可以访问它。
无论如何,只有您的用户可以访问 SSHFS,但您的用户显然无法写入另一个挂载。cp
您的用户或 root 的单次运行将命中permission denied
一端或另一端。可能的解决方案:
- 安装 FUSE
allow_other
(不推荐)。 - 为您的用户安装 SD 卡(情况 2 或 3)。
- 改变所有权/权限(在情况 1 中)。
- 通过中间位置复制,以便您的用户和根用户都可以访问它(您已经尝试过并且有效)。
使用两个进程:一个用于您的用户,一个用于root:
cat local/mount/point/file | sudo tee /other/local/mount/point/directory/file >/dev/null
此命令可以复制多个文件(我的意思是目录):
tar -c -C local/mount/point file1 file2 directoryA … \ | sudo tar -x --no-same-owner -C /other/local/mount/point/directory