导入 zpool 覆盖所有权/权限(参见 -o uid=,gid=,umask= 挂载选项)

导入 zpool 覆盖所有权/权限(参见 -o uid=,gid=,umask= 挂载选项)

我有一个 zpool,它来自一个系统,该系统的用户与我要从中复制数据的机器不同。因此,我需要导入并以读取权限挂载 zpool。但是,由于 UID 不匹配,我对许多文件没有权限。

我不想更改 zpool 上的权限,只想从中读取。我可以以 root 身份读取文件并将本地副本的所有权转让给所需的本地用户,但我没有此(多用户)系统的权限sudo cpsudo chown

不过我确实有sudo mountsudo zpool/sudo zfs权限。使用非zfs系统,我会

  1. sudo mount -o uid=$UID,gid=$GID,umask=0770[,ro] <device> <mountpoint>或类似的东西,
  2. cp <mountpoint>/<source> <target>我需要的文件,以及
  3. sudo umount <mountpoint>

我如何才能在 zfs 系统上实现同样的功能?

我找不到任何类似的选项zpool import。我已经尝试过

  1. sudo zpool import -N <pool>
  2. sudo zfs set mountpoint=legacy <pool>
  3. sudo mount -t zfs -o uid=$UID,gid=$GID,umask=0770[,ro] <pool> ,<mountpoint>
  4. cp <mountpoint>/<source> <target>我需要的文件,
  5. sudo umount <mountpoint>
  6. `sudo zfs set mountpoint= ,并且
  7. 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如果您礼貌地请求,他们可能会授予您权限。如果他们发现您试图自行绕过安全措施,他们可能会解雇您。

相关内容