Wie kann ich feststellen, welche Berechtigungen meinem Benutzer zum Empfangen eines ZFS-Datasets fehlen?

9

Ich habe eine FreeNAS (11.1-U1) und eine FreeBSD (11.1-RELEASE-p6) Maschine. Auf dem FreeNAS möchte ich zfs receiveals Nicht-Root-Benutzer mit delegierten Berechtigungen rekursive Snapshots erstellen. Dies scheint für die meisten untergeordneten Datensätze gut zu funktionieren. Die dataDatensätze von iocage , die in das Gefängnis eingebunden und von dort aus verwaltet werden können, schlagen jedoch fehl:

root@freebsd:~> zfs send -RI "dozer@2018-02-21" "dozer@2018-03-08"  | ssh -T -i /root/backup_key backupuser@freenas zfs receive -dvuF neo/backups/freebsd
receiving incremental stream of dozer@2018-03-03 into neo/backups/freebsd@2018-03-03
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of dozer@2018-03-07 into neo/backups/freebsd@2018-03-07
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of dozer@2018-03-08 into neo/backups/freebsd@2018-03-08
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of dozer/ROOT@2018-03-03 into neo/backups/freebsd/ROOT@2018-03-03
.
.
.
receiving incremental stream of dozer/iocage/jails/owncloud/root@2018-03-08 into neo/backups/freebsd/iocage/jails/owncloud/root@2018-03-08
received 578MB stream in 110 seconds (5.25MB/sec)
receiving incremental stream of dozer/iocage/jails/owncloud/root/data@2018-03-03 into neo/backups/freebsd/iocage/jails/owncloud/root/data@2018-03-03
cannot receive incremental stream: permission denied
warning: cannot send 'dozer/iocage/jails/owncloud/root/data@2018-03-03': signal received
warning: cannot send 'dozer/iocage/jails/owncloud/root/data@2018-03-07': Broken pipe
warning: cannot send 'dozer/iocage/jails/owncloud/root/data@2018-03-08': Broken pipe

Die Berechtigungen dieses bestimmten Kindes entsprechen genau denen des übergeordneten Datensatzes:

root@freenas:~ # zfs allow neo/backups/freebsd/iocage/jails/owncloud/root/data
---- Permissions on neo/backups/freebsd -----------------------------
Local+Descendent permissions:
        user backupuser atime,compression,create,dedup,exec,jailed,mount,mountpoint,quota,receive,rename,reservation,setuid,userprop

Das Ausführen von zfs receiveauf dem FreeNAS als Root funktioniert wie erwartet.

Welche delegierten Berechtigungen benötigt mein Benutzer, um die inhaftierten Datensätze von iocage zu erhalten, und gibt es im Allgemeinen eine Möglichkeit zfs receive, eine detailliertere Fehlermeldung auszugeben, die angibt, welche Berechtigung fehlt?

sloh
quelle

Antworten:

3

zfsAnalysieren Sie bei der Behebung von Berechtigungsproblemen aufgrund von Befehlen den zfsVorgang anhand seiner Komponentenschritte.

Der Beispielbefehl von zfs receive -duvFentpackt 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 rollbackausgeführt wird und Ihr zfs allownicht aufgeführt wird rollback.

Im allgemeinen Fall kann man deduktive Vermutungen über die Berechtigungen anstellen, die für einen bestimmten zfsBefehl erforderlich sind .

Die Manpage für zfsweist 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 -uFlag, sodass das Dateisystem am Ende des Empfangsvorgangs nicht bereitgestellt wird. Wenn dies -unicht der Fall wäre, würde das Dateisystem am Ende des Empfangsprozesses bereitgestellt. Bezeichnenderweise receiveerfordert die mountErlaubnis die Erlaubnis.

Da bei einem zfs mountVorgang alle erforderlichen Mountpunkte automatisch erstellt werden, kann ein Benutzer über die zfsBerechtigung zum Mounten des Datasets verfügen, jedoch nicht über Dateisystemberechtigungen zum Erstellen des Mountpunkts. Im Fall von zfs mountschlägt die Halterung fehl. In einer zfs createoder renameOperation 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 renameBefehl an mehreren Stellen des Umbenennungsvorgangs aufgrund fehlender Berechtigungen fehlschlagen. Locker ausgedrückt könnten die Komponentenschritte sein:

1) Hängen Sie das Dateisystem aus ( mountBerechtigung)
2) Erstellen Sie ein neues Dateisystem ( createBerechtigung)
3) Ordnen Sie die Metadaten des Dateisystems dem neuen Namen ( renameBerechtigung) zu.

Ein vierter Schritt besteht darin, das neu benannte Dateisystem an seinem neuen, möglicherweise geänderten Mountpunkt erneut zu mounten, der wiederum die mountBerechtigung und möglicherweise die Dateisystemberechtigungen verwendet, um den neuen Mountpunkt zu erstellen.

Ich habe solche Tricks nicht getestet, aber es ist zu sehen, dass zfszwischen createund renameBerechtigungen sowie zwischen mountund mountpointBerechtigungen 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.OLDum den Mountpunkt von /usr/localin zu ändern /usr/local.OLD.

Die Trennung von mountoder renamevon mountpointBerechtigungen 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 zfsetwas herausfordernd, aber auch sehr leistungsfähig sein.

Jim L.
quelle
Diese Antwort wurde gegenüber dem Original erweitert. Ich hoffe, dass es weiterhin seine vorherigen Upvotes verdient.
Jim L.
0

Es sieht so aus, als hätten Sie einen Schnappschuss, in dem die Berechtigung fehlt.

Versuchen Sie, die receiveBerechtigung zu aktivieren neo/backups/freebsd/iocage/jails/owncloud/root/data@2018-03-03.

Es sieht so aus, als ob es auf der Lautstärke richtig eingestellt ist, aber auf dem Schnappschuss fehlt.

Hargut
quelle