zfs
Analysieren Sie bei der Behebung von Berechtigungsproblemen aufgrund von Befehlen den zfs
Vorgang anhand seiner Komponentenschritte.
Der Beispielbefehl von zfs receive -duvF
entpackt in mehrere Schritte. Zwei dieser Flags beziehen sich nicht auf spezielle Berechtigungen:
-d beeinflusst die Benennung des neuen Datensatzes (falls vorhanden)
-v aktiviert die ausführliche Ausgabe
Die anderen beiden tun es.
-F bedeutet, dass das Dateisystem vor dem Start des Empfangs auf den ersten Snapshot der inkrementellen Übertragung zurückgesetzt wird.
-U bedeutet, dass das Dateisystem nach Abschluss des Empfangs nicht bereitgestellt wird
Meine Vermutung ist, dass Ihnen die Rollback-Berechtigung fehlt. Das -F-Flag in Ihrem Befehl impliziert, dass a zfs rollback
ausgeführt wird und Ihr zfs allow
nicht aufgeführt wird rollback
.
Im allgemeinen Fall kann man deduktive Vermutungen über die Berechtigungen anstellen, die für einen bestimmten zfs
Befehl erforderlich sind .
Die Manpage für zfs
weist darauf hin:
Berechtigungsnamen sind dieselben wie ZFS-Unterbefehls- und Eigenschaftsnamen.
und ...
Berechtigungen sind im Allgemeinen die Möglichkeit, einen ZFS-Unterbefehl zu verwenden oder eine ZFS-Eigenschaft zu ändern. Folgende Berechtigungen sind verfügbar:
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
Das vorliegende Beispiel enthält das -u
Flag, sodass das Dateisystem am Ende des Empfangsvorgangs nicht bereitgestellt wird. Wenn dies -u
nicht der Fall wäre, würde das Dateisystem am Ende des Empfangsprozesses bereitgestellt. Bezeichnenderweise receive
erfordert die mount
Erlaubnis die Erlaubnis.
Da bei einem zfs mount
Vorgang alle erforderlichen Mountpunkte automatisch erstellt werden, kann ein Benutzer über die zfs
Berechtigung zum Mounten des Datasets verfügen, jedoch nicht über Dateisystemberechtigungen zum Erstellen des Mountpunkts. Im Fall von zfs mount
schlägt die Halterung fehl. In einer zfs create
oder rename
Operation wird das Dateisystem erstellt oder umbenannt, es bleibt jedoch nicht gemountet, wenn der Benutzer nicht über ausreichende Dateisystemberechtigungen zum Erstellen des Mountpunkts verfügt.
Ebenso kann ein zfs rename
Befehl an mehreren Stellen des Umbenennungsvorgangs aufgrund fehlender Berechtigungen fehlschlagen. Locker ausgedrückt könnten die Komponentenschritte sein:
1) Hängen Sie das Dateisystem aus ( mount
Berechtigung)
2) Erstellen Sie ein neues Dateisystem ( create
Berechtigung)
3) Ordnen Sie die Metadaten des Dateisystems dem neuen Namen ( rename
Berechtigung) zu.
Ein vierter Schritt besteht darin, das neu benannte Dateisystem an seinem neuen, möglicherweise geänderten Mountpunkt erneut zu mounten, der wiederum die mount
Berechtigung und möglicherweise die Dateisystemberechtigungen verwendet, um den neuen Mountpunkt zu erstellen.
Ich habe solche Tricks nicht getestet, aber es ist zu sehen, dass zfs
zwischen create
und rename
Berechtigungen sowie zwischen mount
und mountpoint
Berechtigungen unterschieden wird. Man kann sich vorstellen, dass es einem Benutzer möglich sein könnte, neue Dateisysteme zu erstellen, aber sobald sie erstellt wurden, kann der Benutzer sie nicht mehr umbenennen. Bei Dateisystemen mit geerbten Mountpunkten wird beim Umbenennen eines Dateisystems häufig auch der Mountpunkt des Dateisystems umbenannt, wie beim Umbenennen tank/usr/local
, tank/usr/local.OLD
um den Mountpunkt von /usr/local
in zu ändern /usr/local.OLD
.
Die Trennung von mount
oder rename
von mountpoint
Berechtigungen bedeutet, dass ein Benutzer ein Dateisystem umbenennen, seinen Mountpunkt jedoch nicht ändern darf. Oder umgekehrt, um zu ändern, wo ein Dateisystem gemountet ist, aber nicht, um den Namen des Dateisystems zu ändern.
Die Fülle der Dateisystemoperationen und die Delegierung dieser Operationen in Verbindung mit der Granularität der Berechtigungen können zfs
etwas herausfordernd, aber auch sehr leistungsfähig sein.