При устранении неполадок, связанных с разрешениями, возникающими из zfs
команд, проанализируйте zfs
операцию с точки зрения этапов ее компонентов.
Пример команды zfs receive -duvF
распаковки в несколько этапов. Два из этих флагов не относятся к каким-либо специальным разрешениям:
-d влияет на наименование нового набора данных (если есть)
-v включает подробный вывод
Два других делают.
-F означает, что файловая система будет возвращена к исходному снимку инкрементной передачи до начала приема.
-U означает, что файловая система не будет подключена после завершения приема.
Я догадываюсь, что вам не хватает разрешения на откат. Флаг -F в вашей команде подразумевает, что zfs rollback
будет выполнено, а ваш zfs allow
нет в списке rollback
.
В общем случае можно сделать дедуктивные предположения о разрешениях, необходимых для данной zfs
команды.
Справочная страница для zfs
указывает на:
Имена разрешений совпадают с именами подкоманд ZFS и свойств.
а также ...
Как правило, разрешения - это возможность использовать подкоманду ZFS или изменить свойство ZFS. Доступны следующие разрешения:
NAME TYPE NOTES
allow subcommand Must also have the permission
that is being allowed
clone subcommand Must also have the 'create'
ability and 'mount' ability in
the origin file system
create subcommand Must also have the 'mount'
ability
destroy subcommand Must also have the 'mount'
ability
diff subcommand Allows lookup of paths within a
dataset given an object number,
and the ability to create
snapshots necessary to 'zfs diff'
hold subcommand Allows adding a user hold to a
snapshot
mount subcommand Allows mount/umount of ZFS
datasets
promote subcommand Must also have the 'mount' and
'promote' ability in the origin
file system
receive subcommand Must also have the 'mount' and
'create' ability
release subcommand Allows releasing a user hold
which might destroy the snapshot
rename subcommand Must also have the 'mount' and
'create' ability in the new
parent
rollback subcommand Must also have the 'mount'
ability
send subcommand
share subcommand Allows sharing file systems over
the NFS protocol
snapshot subcommand Must also have the 'mount'
ability
groupquota other Allows accessing any
groupquota@... property
groupused other Allows reading any groupused@...
property
userprop other Allows changing any user property
userquota other Allows accessing any
userquota@... property
userused other Allows reading any userused@...
property
aclinherit property
aclmode property
atime property
canmount property
casesensitivity property
checksum property
compression property
copies property
dedup property
devices property
exec property
filesystem_limit property
logbias property
jailed property
mlslabel property
mountpoint property
nbmand property
normalization property
primarycache property
quota property
readonly property
recordsize property
refquota property
refreservation property
reservation property
secondarycache property
setuid property
sharenfs property
sharesmb property
snapdir property
snapshot_limit property
sync property
utf8only property
version property
volblocksize property
volsize property
vscan property
xattr property
Данный пример включает -u
флаг, поэтому файловая система не будет смонтирована в конце операции приема. Однако, если бы его не -u
было, файловая система была бы смонтирована в конце процесса получения. Что характерно, receive
разрешение требует mount
разрешения.
Поскольку zfs mount
операция автоматически создает любые необходимые точки монтирования, пользователь может иметь zfs
разрешение на монтирование набора данных, но не может иметь разрешения файловой системы для создания точки монтирования. В случае zfs mount
, монтирование не удастся. В операции zfs create
или rename
файловая система будет создана или переименована, но она останется отключенной, если у пользователя нет достаточных разрешений файловой системы для создания точки монтирования.
Аналогичным образом, zfs rename
команда может завершиться сбоем из-за отсутствия разрешений в нескольких точках операции переименования. Проще говоря, этапы компонента могут быть:
1) размонтировать файловую систему ( mount
разрешение)
2) создать новую файловую систему ( create
разрешение)
3) сопоставить метаданные файловой системы с новым именем ( rename
разрешение)
Четвертый шаг - это повторное монтирование файловой системы с новым именем в новой, возможно, измененной точке монтирования, которая снова использует mount
разрешение и, возможно, разрешения файловой системы для создания новой точки монтирования.
Я не проверял такие фокусы, но можно видеть , что zfs
различие между create
и rename
разрешений, а также между mount
и mountpoint
разрешений. Можно предположить, что можно позволить пользователю создавать новые файловые системы, но после создания пользователь не может переименовать их. Для файловых систем с унаследованными точками монтирования переименование файловой системы также часто переименовывает точку монтирования файловой системы, как при переименовании tank/usr/local
для tank/usr/local.OLD
изменения точки монтирования с /usr/local
на /usr/local.OLD
.
Разделение mount
или rename
от mountpoint
разрешений означает , что пользователь может быть разрешено переименовать файловую систему , но не разрешено изменять свою точку монтирования. Или наоборот, чтобы иметь возможность изменить место монтирования файловой системы, но не иметь возможности изменить имя файловой системы.
Богатство операций с файловой системой и делегирование этих операций в сочетании с гранулярностью разрешений может сделать zfs
несколько сложным, но также очень мощным.