我有一个 zpool,它来自一个系统,该系统的用户与我要从中复制数据的机器不同。因此,我需要导入并以读取权限挂载 zpool。但是,由于 UID 不匹配,我对许多文件没有权限。
我不想更改 zpool 上的权限,只想从中读取。我可以以 root 身份读取文件并将本地副本的所有权转让给所需的本地用户,但我没有此(多用户)系统的权限sudo cp
。sudo chown
不过我确实有sudo mount
和sudo zpool
/sudo zfs
权限。使用非zfs系统,我会
sudo mount -o uid=$UID,gid=$GID,umask=0770[,ro] <device> <mountpoint>
或类似的东西,cp <mountpoint>/<source> <target>
我需要的文件,以及sudo umount <mountpoint>
我如何才能在 zfs 系统上实现同样的功能?
我找不到任何类似的选项zpool import
。我已经尝试过
sudo zpool import -N <pool>
,sudo zfs set mountpoint=legacy <pool>
,sudo mount -t zfs -o uid=$UID,gid=$GID,umask=0770[,ro] <pool> ,<mountpoint>
cp <mountpoint>/<source> <target>
我需要的文件,sudo umount <mountpoint>
,- `sudo zfs set mountpoint= ,并且
sudo zpool export <pool>
,
但mount.zfs
也不支持这些选项。
答案1
使用非 zfs 系统
不,只有一小部分文件系统传统上不存储与 POSIX 兼容的权限。您也无法使用 ext4、XFS 或 ReiserFS 来做到这一点。
我确实有 sudo mount
如果你使用 Linux 并且恰好有 FUSE,请安装绑定文件系统覆盖文件系统(例如,在您的主目录中编译)并使用以下命令挂载它:
sudo mount -t fuse./home/mschilli/bindfs \
-o [ro,]mirror=mschilli \
/zfs_mountpoint /new_mountpoint
bindfs 守护进程本身将具有 root 权限,可以自由访问“源”挂载点,并将在“目标”挂载点下显示所有文件为您拥有。(这就是 的目的-o mirror=…
)
有趣的是,-t fuse.<type>
指定挂载源的旧方法都<type>#<source>
允许文件系统类型包含斜杠,即所需 FUSE 守护进程的绝对路径。
事实上,使用这种方法你可以执行随意的二进制文件,只要它们不介意接收无用的命令行参数。(这还不包括mount --bind
可能提供的许多特权升级。)
在执行上述任何操作之前,请先咨询您的系统管理员。sudo cp
如果您礼貌地请求,他们可能会授予您权限。如果他们发现您试图自行绕过安全措施,他们可能会解雇您。