Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

UNIX-Berechtigungen

Symbolische Notation

Die Standard UNIX-Dateisystemberechtigungen, die auch auf den im HPC verwendeten Linux-Betriebssystemen zum Einsatz kommen, unterscheiden zwischen drei Berechtigungen:

  • read, abgekürzt mit „r“, für die Berechtigung, Dateien zu lesen
  • write, abgekürzt mit „w“, für die Berechtigung, Dateien zu bearbeiten sowie neue Dateien anzulegen
  • execute, abgekürzt mit „x“, für die Berechtigung, Dateien als Programm auszuführen sowie Verzeichnisinhalte anzusehen

Diese Berechtigungen können für drei verschiedene Benutzer(Gruppen) vergeben werden:

  • user, abgekürzt mit „u“, für den Dateieigentümer
  • group, abgekürzt mit „g“, für die Gruppe, der eine Datei gehört
  • others, abgekürzt mit „o“, für alle anderen NutzerInnen

Somit besteht ein Berechtigungssatz aus 3x3 Zeichen. rwxr-x--- bedeutet zum Beispiel, dass der Eigentümer alle Rechte hat (Lesen, Schreiben und Ausführen), die Gruppe nur Lesen und Ausführen, und alle anderen NutzerInnen gar keine Berechtigungen haben.

Berechtigungen anzeigen

Mit dem Befehl ls -l <Pfad> lassen sich die Berechtigungen für eine Datei oder alle Dateien in einem Ordner anzeigen:

Codeblock
languagebash
titleBerechtigungen mit ls -l anzeigen

Berechtigungen ändern

Mit den Befehlen chmod („change mode“, d.h. Berechtigungen ändern) und chown („change owner“, d.h. Dateieigentümer und Gruppe ändern) lassen sich die Berechtigungen einer Datei bearbeiten. Die Syntax lautet dabei wie folgt:

Codeblock
languagebash
titleSyntax von chown und chmod
chown [-R] user:group Pfad [Pfad...]
chmod [-R] u=rwx,g=rwx,o=rwx Pfad [Pfad...]

Der Parameter -R („recursive“) gibt dabei in beiden Fällen an, dass die Berechtigungen nicht nur auf die angegebenen Pfade, sondern auch auf Unterordner und Dateien darin angewendet werden sollen. Im Falle von chown ist für user und group der Benutzername auf dem HPC (I.d.R. Die Unikennung) und eine Gruppe (I.d.R. Ein Projektkürzel) anzugeben, den die Datei zugeordnet werden soll. Für chmod kann mit u=…,g=…,o=…, angegeben werden, welche Berechtigungen jeweils Eigentümer, Gruppe und Andere auf der Datei haben sollen. Es können bei beiden Programmen eine oder mehrere Dateien auf einmal angegeben werden.

Hinweis
titleVorsicht mit Berechtigungen für Alle

Die Berechtigungen o=… sollten sparsam verwendet werden, da diese Berechtigungen für alle HPC-Nutzenden gelten. Insbesondere bei Vergabe von Schreibrechten bedeutet dies, dass alle HPC-NutzerInnen die Datei sogar bearbeiten und löschen können. Falls die Benutzer- und Gruppenberechtigungen nicht ausreichen, weil die Datei zum Beispiel mit einer anderen Gruppe geteilt werden soll, sind dafür ACLs zu verwenden (siehe unten).

Berechtigungsprobleme selbst lösen

In vielen Fällen genügt es, im Hauptverzeichnis einen rekursiven Befehl zu starten, der die Berechtigungen in allen Unterordnern und Dateien korrigiert. Dazu sollte man sich erst im Klaren sein, welchem Benutzer und welcher Gruppe die Dateien zugeordnet werden sollen. Im Falle eines gemeinsam genutzten Projektverzeichnis ist vermutlich die Benutzergruppe der Arbeitsgruppe sinnvoll. Mit dem Kommando `groups` lässt sich herausfinden, welchen Benutzergruppen der eigene Account angehört.

Anschließend sollten folgende Befehle genügen:

Codeblock
languagebash
titleBerechtigungsprobleme korrigieren
group=<Name der Gruppe>
find /Pfad/zum/Verzeichnis -type f ! -perm -g=rwc
chown -R user:group /Pfad/zum/Verzeichnis
chmod -R 770 /Pfad/zum/Verzeichnis

In manchen Fällen sitzen die Berechtigungsprobleme so tief, dass nicht alle Dateien demselben Nutzer gehören. In diesem Fall treten Permission denied-Fehler auf. Das bedeutet, dass auch andere Nutzer der Arbeitsgruppe diese Kommandos ausführen müssen, bis alle Dateien wieder die richtigen Berechtigungen haben, da nur der Eigentümer einer Datei die Berechtigungen anpassen kann.

ACLs

Manchmal verhindern ACLs den korrekten Zugriff auf das Verzeichnis. Wenn sichergestellt ist, dass die Zuordnung über eine einzelne Gruppe und einen einzelnen Benutzer ausreicht, und erweiterte Berechtigungen nicht benötigt werden, können mit folgendem Befehl alle ACLs auf allen Dateien und Unterordnern eines Verzeichnisses gelöscht werden:

Codeblock
languagebash
titleACLs löschen
find /Pfad/zum/Verzeichnis | xargs mmdelacl

Auch hier kann es sein, dass mehrere NutzerInnen der Arbeitsgruppe dieses Kommando ausführen kann, da auch hier nur der Eigentümer einer Datei / eines Ordners die ACLs löschen kann.

ACLs (Access Control Lists)

Sowohl das GPFS als auch NFS unterstützen ACLs (Access Control Lists). Diese können dazu verwendet werden, um neben den Standard-Dateiberechtigungen (Besitzer, Gruppe, Andere) einzelne Dateien oder ganze Ordner nur für bestimmte Nutzer oder Nutzergruppen freizugeben (siehe dazu Abschnitt "Dateien / Ordner mit einzelnen Nutzern freigeben").

Um die ACLs einer Datei oder eines Ordners zu bearbeiten, stehen verschiedene Kommandozeilentools zur Verfügung. Auf dem Login-Knoden lassen sich die ACLs mittels folgendem Kommando editieren:

Codeblock
languagebash
titleNVSv4 NFSv4 ACL setzen (Login Node)
nfs4_setfacl --edit $PATH

...

zu verwenden, die sich allerdings in ihrer Syntax von nfs_setfacl unterscheiden, und eventuell nicht alle Funktionen abbilden. (Siehe dazu man mmeditacl, man mmputacl, man mmgetacl, oder https://www.ibm.com/support/knowledgecenter/en/STXKQY_4.2.1/com.ibm.spectrum.scale.v4r21.doc/bl1adm_mmputacl.htm)

Syntax (Login-Knoten)

Die ACLs bestehen aus mehreren Einträgen, welche jeweils die Berechtigungen für einen Nutzer oder eine Nutzergruppe spezifizieren. Zusätzlich zu den Berechtigungen kann die Funktionsweise der ACLs durch einen Typ oder verschiedene Flags beeinflusst werden. Die vollständige Syntax für das auf dem Login-Knoten verwendete nfs4_setfacl lautet:

Codeblock
languagebash
titlenfs4_setfacl syntax
type:flags:principal:permissions

Typ

Es gibt vier verschiedene Typen an ACL-Einträgen, die die Bedeutung der Berechtigungen regeln:

...

Für uns sind nur die ersten beiden Typen relevant.

Flags

Flags steuern z.B. die Weitergabe / Vererbung der ACLs an Unterordner / Dateien, oder erlauben es, eine Nutzergruppe statt einem einzelnen Nutzer zu spezifizieren

...

Zielnutzer / -gruppe

"Principal" ist der Nutzer (oder die Gruppe bei Verwendung von Flag g) für den die Berechtigungen gelten. Es gibt zusätzlich drei Sondertypen: OWNER@, GROUP@ und EVERYONE@, die den POSIX-Berechtigungen Besitzer / Gruppe / Andere entsprechen.

Berechtigungen

Berechtigungen steuern die tatsächlichen Berechtigungen des jeweiligen ACL-Eintrags.

...


Info
titleVerwendung des Storage-Knotens für ACLs

Der Login-Knoten greift nur über einen NFS-Export auf das GPFS zu, anstelle wie die Rechenknoten und Storage-Knoten nativen Zugriff zu haben. Daher ist die Steuerung der ACLs vom Login-Knoten aus nur eingeschränkt möglich. Es wird daher empfohlen, die Verwaltung der ACLs direkt über den Storage-Knoten vorzunehmen.


Syntax

Die Verwendung der ACLs unterscheidet sich auf dem Login-Knoten und den Compute-Knoten bzw. Storage-Knoten. Um für beide Varianten eine optimale Dokumentation zu gewährleisten, existiert für beide Systeme eine eigene Anleitung:

Tabelle des Content-Berichts
showLikesCounttrue
showCommentsCounttrue
spacesHPC
labelskb-how-to-article-acl

Ein paar Beispiele

...

Vollzugriff ohne ACL ändern

...

Standard-ACLs

Standardmäßig werden keine Berechtigungen vererbt. Jede neue Datei / Unterordner wird standardmäßig mit den Standard-ACLs initialisiert, die wie folgt lauten:

Codeblock
languagebash
titleACL Default
A::OWNER@:rwaDxtTnNcCoy
A::GROUP@:rxtncy
A::EVERYONE@:rxtncy

Dateien / Ordner mit einzelnen Nutzern freigeben

ACLs können sehr gut dazu verwendet werden, um bestimmte Dateien oder Ordnern mit bestimmten Nutzern / Nutzergruppen freizugeben. Eine vollständige ACL für einen Ordner mit zusätzlichen Berechtigungen für einen weiteren Nutzer und Vererbung für zukünftige Unterordner / Dateien könnte beispielsweise so aussehen:

Codeblock
languagebash
titleACL Nutzerfreigabe
A:fd:OWNER@:rwaDdxtTnNcCoy
A:fd:GROUP@:rxtncy
A:fd:EVERYONE@:tcy
A:fd:EigenerNutzername:rwaDxtncy
A:fd:NeuerNutzername:rwaDxtncy 
Warnung
titleBestehende Regeln anpassen!

Beim Hinzufügen von Regeln mit Vererbung (fd) wie in diesem Beispiel erforderlich, ist es wichtig, dass auch die bestehenden Regeln um die Vererbungs-Flags fd erweitert werden. Andernfalls werden nur die Berechtigungen für die hinzugefügten Nutzer vererbt, der Eigentümer der Dateien hat anschließend keinen Zugriff mehr.

Außerdem muss neben der Regel für den neuen Benutzer ebenfalls eine Regel für den eigenen Benutzer hinzugefügt werden. Normalerweise ist der eigene Benutzer über OWNER@ abgedeckt, wenn aber andere Nutzer in dem jetzt freigegebenen Verzeichnis Dateien anlegen, sind diese der Eigentümer (OWNER@) der neuen Dateien, und für den eigenen Benutzer existiert dann keine Regel mehr.

Siehe auch

Siehe auch: man nfs4_acl

Weitere Anleitungen: https://www.rz.uni-augsburg.de/service/cfs/FAQ/acl-details/

Syntax (Compute-Nodes, Storage-Knoten)

Auf den Compute-Nodes und den Storage-Knoten kommen die Tools

Codeblock
languagebash
titleNFSv4 ACLs (Compute Nodes)
mmeditacl
mmputacl
mmgetacl
mmdelacl

zum Einsatz, die sich in ihrer Verwendung von den Tools auf dem Login-Knoten grundlegend unterscheiden. Die unterstützen Berechtigungen und Regelformen sind natürlich identisch zu der oben beschriebenen Variante. Allerdings wird statt einer auf flags basierenden Syntax eine tabellenbasierte Form verwendet:

Codeblock
languagebash
titlemmgetacl Syntax
special:owner@:rwxc:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
(-)DELETE    (X)DELETE_CHILD (X)CHOWN        (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED

user:Nutzername:--x-:allow:FileInherit:DirInherit
(-)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (-)SYNCHRONIZE (X)READ_ACL  (-)READ_ATTR  (-)READ_NAMED
(-)DELETE    (-)DELETE_CHILD (-)CHOWN        (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED

Je drei Zeilen bilden gemeinsam eine Regel. In der ersten Zeile wird zunächst der Zielnutzer / die Zielgruppe spezifiziert: special:owner@ bezeichnet beispielsweise den "Spezialnutzer" owner@, also den jeweiligen Eigentümer einer Datei. Analog dazu existieren special:group@ oder special:everyone@. user:Nutzername betrifft den Nutzer mit dem entsprechenden Nutzernamen:

...

Anschließend folgen 4 Zeichen, die die direkten Berechtigungen des jeweiligen Nutzers / der jeweiligen Gruppe repräsentieren. Diese müssen allerdings nicht manuell aktualisiert werden, eine Bearbeitung der Berechtigungen in den runden Klammern wie unten beschrieben genügt dabei völlig, die 4 Berechtigungen stellen nur eine Art Zusammenfassung da, die automatisch aktualisiert wird. Dabei existieren die folgenden Belegungen:

...

An dritter Stelle wird der Regeltyp angegeben. Hier sollte allow verwendet werden, da Berechtigungen über Erlaubnisse und nicht über Verbote definiert werden sollten.

Zuletzt folgen weitere Flags, die das Verhalten der Regel beeinflussen, z.B. die Vererbung auf Dateien und Unterordner. Hierbei existieren beispielsweise folgende Flags:

...

Anschließend folgen zwei Zeilen mit den jeweiligen Berechtigungen für den angegebenen Nutzer. Die Berechtigungen sind in diesem Fall benannt und mit runden Klammern versehen. Ein X innerhalb der Klammer bedeutet, dass die jeweilige Berechtigung erteilt ist, bei einem - hat der entsprechende Nutzer / die entsprechende Gruppe die jeweilige Berechtigung nicht.

Ein paar Beispiele

Standard-ACLs

Standardmäßig werden keine Berechtigungen vererbt. Jede neue Datei / Unterordner wird standardmäßig mit den Standard-ACLs initialisiert, die wie folgt lauten:

Codeblock
titleStandard-ACLs
linenumberstrue
collapsetrue
#NFSv4 ACL
#owner:luros101
#group:ngs-admins
special:owner@:rwxc:allow
 (X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (-)DELETE    (X)DELETE_CHILD (X)CHOWN        (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED

special:group@:r-x-:allow
 (X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (-)DELETE    (-)DELETE_CHILD (-)CHOWN        (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED

special:everyone@:r-x-:allow
 (X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (-)DELETE    (-)DELETE_CHILD (-)CHOWN        (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED

Dateien / Ordner mit einzelnen Nutzern freigeben

ACLs können sehr gut dazu verwendet werden, um bestimmte Dateien oder Ordnern mit bestimmten Nutzern / Nutzergruppen freizugeben. Eine vollständige ACL für einen Ordner mit zusätzlichen Berechtigungen für einen weiteren Nutzer und Vererbung für zukünftige Unterordner / Dateien könnte beispielsweise so aussehen:

Codeblock
languagebash
titleACL Nutzerfreigabe
linenumberstrue
collapsetrue
#NFSv4 ACL
#owner:luros101
#group:ngs-admins
special:owner@:rwxc:allow:FileInherit:DirInherit
 (X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (-)DELETE    (X)DELETE_CHILD (X)CHOWN        (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED

special:group@:rwx-:allow:FileInherit:DirInherit
 (X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (-)DELETE    (X)DELETE_CHILD (-)CHOWN        (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED

special:everyone@:rwx-:allow:FileInherit:DirInherit
 (X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (-)DELETE    (X)DELETE_CHILD (-)CHOWN        (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED

user:EigenerNutzername:rwxc:allow:FileInherit:DirInherit
 (X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (X)DELETE    (X)DELETE_CHILD (X)CHOWN        (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED

user:NeuerNutzername:rwx-:allow:FileInherit:DirInherit
 (X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL  (X)READ_ATTR  (X)READ_NAMED
 (-)DELETE    (X)DELETE_CHILD (-)CHOWN        (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED

...

titleBestehende Regeln anpassen!

Beim Hinzufügen von Regeln mit Vererbung (FileInherit:DirInherit) wie in diesem Beispiel erforderlich, ist es wichtig, dass auch die bestehenden Regeln um die Vererbungs-Flags FileInherit:DirInherit erweitert werden. Andernfalls werden nur die Berechtigungen für die hinzugefügten Nutzer vererbt, der Eigentümer der Dateien hat anschließend keinen Zugriff mehr.

...