У меня есть zpool из системы с пользователями, отличными от машины, на которой я работаю, с которой я хочу копировать данные. Поэтому мне нужно импортировать и смонтировать zpool с разрешениями на чтение. Однако, поскольку UID не совпадают, у меня нет разрешений для многих файлов.

Я не хочу менять права на zpool, просто читаю с него. Я мог читать файлы как root и передавать права владения локальными копиями нужному локальному пользователю, но у меня нет разрешений sudo cp или sudo chown в этой (многопользовательской) системе.

У меня есть разрешения sudo mount и sudo 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 ответ1

2

С системой, отличной от zfs

Нет, только с небольшим подмножеством файловых систем, которые традиционно не хранят POSIX-совместимые разрешения. Вы не можете сделать это с ext4 или XFS или ReiserFS, либо.

У меня есть крепление sudo

Если вы используете Linux и у вас также есть FUSE, установите оверлейную файловую систему bindfs (например, скомпилируйте в домашнюю директорию) и смонтируйте ее, используя:

sudo mount -t fuse./home/mschilli/bindfs \
           -o [ro,]mirror=mschilli \
           /zfs_mountpoint /new_mountpoint

Сам демон bindfs будет иметь привилегии root для свободного доступа к точке монтирования «source» и представит все файлы, которые принадлежат тебе, в точке монтирования «target». (Это цель -o mirror=…)


Интересно, что оба параметра -t fuse.<type> и старый способ указания <type>#<source> в качестве источника монтирования позволяют типу файловой системы содержать косую черту, то есть быть абсолютным путем к желаемому демону FUSE.

Фактически, используя этот метод, вы можете выполнять произвольные двоичные файлы, если они не возражают против получения бесполезных аргументов командной строки. (И это даже не считая многих повышений привилегий, которые может предоставить mount --bind .)

Проверьте с вашим системным администратором, прежде чем делать что-либо из перечисленного. Может быть, они просто предоставят вам права sudo cp если вы их попросите. Возможно, они уволят вас, если поймают вас на попытке самостоятельно обойти безопасность.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .