Импорт владения / разрешений для перезаписи zpool (см. -o uid =, gid =, umask = параметры монтирования)

326
mschilli

У меня есть 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также не поддерживает эти параметры.

0

1 ответ на вопрос

2
grawity

С системой, отличной от 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права, если вы их попросите. Возможно, они уволят вас, если поймают вас на попытке самостоятельно обойти безопасность.

Вкратце: если у вас есть `sudo mount`, вы в одном шаге от неограниченных привилегий root. grawity 5 лет назад 1

Похожие вопросы