Al solucionar problemas de permisos que surgen de los zfs
comandos, analice la zfs
operación en términos de los pasos de sus componentes.
El comando de muestra zfs receive -duvF
desempaqueta en varios pasos. Dos de esas banderas no se relacionan con ningún permiso especial:
-d afecta la nomenclatura del nuevo conjunto de datos (si corresponde)
-v habilita la salida detallada
Los otros dos lo hacen.
-F significa que el sistema de archivos se revertirá a la instantánea inicial de la transferencia incremental antes de que comience la recepción
-u significa que el sistema de archivos no se montará después de que finalice la recepción
Mi presentimiento es que te estás perdiendo el permiso de reversión. El indicador -F en su comando implica que zfs rollback
se realizará un, y su zfs allow
no aparece en la lista rollback
.
En el caso general, uno puede hacer conjeturas deductivas sobre los permisos necesarios para un zfs
comando dado .
La página del manual para zfs
señala:
Los nombres de los permisos son los mismos que los del subcomando ZFS y los nombres de propiedad.
y ...
Los permisos son generalmente la capacidad de usar un subcomando ZFS o cambiar una propiedad ZFS. Los siguientes permisos están disponibles:
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
El ejemplo en cuestión incluye la -u
bandera, por lo que el sistema de archivos no se montará al final de la operación de recepción. Sin embargo, si -u
no existiera, el sistema de archivos se montaría al final del proceso de recepción. De manera reveladora, el receive
permiso requiere el mount
permiso.
Debido a que una zfs mount
operación creará automáticamente los puntos de montaje necesarios, es posible que un usuario tenga zfs
permiso para montar el conjunto de datos, pero no tenga permisos del sistema de archivos para crear el punto de montaje. En el caso de zfs mount
, el montaje fallará. En una zfs create
o rename
funcionamiento, se creará el sistema de archivos o cambiado de nombre, pero permanecerá sin montar si el usuario no tiene suficientes permisos de acceso a archivos para crear el punto de montaje.
Del mismo modo, un zfs rename
comando podría fallar por falta de permisos en varios puntos dentro de la operación de cambio de nombre. Expresado libremente, los pasos componentes pueden ser:
1) desmontar el sistema de archivos ( mount
permiso)
2) crear un nuevo sistema de archivos ( create
permiso)
3) asignar los metadatos del sistema de archivos al nuevo nombre ( rename
permiso)
Un cuarto paso es volver a montar el sistema de archivos recién nombrado en su nuevo punto de montaje posiblemente modificado, que nuevamente usa el mount
permiso y posiblemente los permisos del sistema de archivos para crear el nuevo punto de montaje.
No he probado tales trucos, pero se puede ver que zfs
distingue entre create
y rename
permisos, y también entre mount
y mountpoint
permisos. Uno imagina que podría ser posible permitir que un usuario cree nuevos sistemas de archivos, pero una vez creado, el usuario no puede cambiarles el nombre. Para los sistemas de archivos con puntos de montaje heredados, el cambio de nombre de un sistema de archivos a menudo también cambiará el nombre del punto de montaje del sistema de archivos, como cuando se cambia el nombre tank/usr/local
para tank/usr/local.OLD
cambiar el punto de montaje de /usr/local
a /usr/local.OLD
.
La separación de mount
o rename
de los mountpoint
permisos significa que se podría permitir a un usuario cambiar el nombre de un sistema de archivos pero no se le permitiría cambiar su punto de montaje. O viceversa, para poder cambiar dónde está montado un sistema de archivos, pero no poder cambiar el nombre del sistema de archivos.
La riqueza de sus operaciones del sistema de archivos y la delegación de esas operaciones, junto con la granularidad de los permisos, pueden ser zfs
un tanto desafiantes, pero también muy poderosos.