Was sind die verschiedenen Möglichkeiten, Dateiberechtigungen usw. unter gnu / linux festzulegen?

19

Unter Unix habe ich vor langer Zeit gelernt chmod, wie man unter Unix traditionell Berechtigungen setzt (und wie man Programmen mit setuid und setgid erlaubt, Berechtigungen zu erlangen).

Ich habe kürzlich einige neuere Befehle unter GNU / Linux entdeckt:

  • setfaclerweitert die traditionellen ugo:rwxBits und das tBit von chmod.
  • setcapgibt mehr Kontrolle über ug:sFlossenkörner als Bits von chmod.
  • chattr Ermöglicht einige andere Steuerelemente (ein bisschen gemischt) der Datei.

Gibt es noch andere?

Strg-Alt-Delor
quelle
Siehe auch unix.stackexchange.com/q/183994/4778 für weitere Details zuchmod
ctrl-alt-delor
Siehe auch unix.stackexchange.com/q/246606/4778 für erweiterte ACLs (richACLs).
Strg-Alt-Delor

Antworten:

28

chmod: Dateimodus-Bits ändern

Verwendung (oktaler Modus):

    chmod <octal-mode> files...

Verwendung (symbolischer Modus):

    chmod <references><operator><modes> files..

referencesist eine Kombination der Buchstaben ugoa, die angeben, welcher Benutzerzugriff auf den filesgeändert wird:

  • u der Benutzer, dem es gehört
  • gandere Benutzer in der fileGruppe von
  • o andere Benutzer nicht in der Gruppe der Datei
  • a Alle Nutzer

    Wenn das weggelassen wird, werden standardmäßig alle Benutzer, aber nur die von der zulässigen Berechtigungen umaskgeändert.

    operatorist einer der Charaktere +-=:

    • + Fügen Sie die angegebenen Dateimodusbits zu den jeweils vorhandenen Dateimodusbits hinzu file
    • - Entfernt die angegebenen Dateimodusbits zu den jeweils vorhandenen Dateimodusbits file
    • =fügt die angegebenen Bits und entfernt nicht spezifizierten Bits, mit Ausnahme der setuidund setgidBits für Verzeichnisse, sofern dies nicht ausdrücklich angegeben ist .

    modebesteht aus einer Kombination der Buchstaben rwxXst, die angeben, welches Berechtigungsbit geändert werden soll:

    • r lesen
    • w schreiben
    • x ausführen (oder nach Verzeichnissen suchen)
    • X Ausführen / Suchen nur, wenn die Datei ein Verzeichnis ist oder für einen Benutzer bereits ein Ausführungsbit gesetzt ist
    • ssetuid oder setgid (je nach Angabe references)
    • t Restricted Deletion Flag oder Sticky Bit

    Alternativ modekann der aus einem der Buchstaben bestehen ugo. In diesem Fall entspricht der Modus den Berechtigungen, die derzeit dem Eigentümer ( u), Mitglied der fileGruppe ( g) oder den Berechtigungen von Benutzern in keiner der vorhergehenden Kategorien ( o) gewährt werden .

Die verschiedenen Teile von chmoderklärt:

  • Zugangskontrolle (siehe auch setfacl)
    • rwx - Lese (r) -, Schreib (w) - und Ausführungs- / Kreuz (x) -Berechtigungen.
      • Read (r) beeinflusst, ob eine Datei gelesen oder ein Verzeichnis aufgelistet werden kann.
      • Write (w) legt fest, ob eine Datei geschrieben oder ein Verzeichnis bearbeitet werden kann (Dateien hinzugefügt, gelöscht, umbenannt).
      • Execute (x) wirkt sich darauf aus, ob eine Datei ausgeführt werden kann, für Skripte (siehe #!) und andere ausführbare Dateien.
      • Kreuz (x) beeinflusst, ob ein Verzeichnis durchlaufen werden kann.
    • sund t- Sticky Bit (t) und Setgid (s) in Verzeichnissen
      • Das Sticky-Bit wirkt sich nur auf Verzeichnisse aus. Verhindert, dass ein Benutzer mit Ausnahme des Dateieigentümers und des Stamms Dateien im Verzeichnis löscht.
      • Das setgid-Bit für Verzeichnisse bewirkt, dass für neue Dateien und Verzeichnisse die Gruppe auf dieselbe Gruppe festgelegt wird und für neue Verzeichnisse das setgid-Bit festgelegt wird (siehe auch Standardeinstellungen in setfacl).
    • s - setuid, setgid für ausführbare Dateien.
      • Dies kann sich negativ auf die Sicherheit auswirken, wenn Sie nicht wissen, was Sie tun.
      • Wenn eine ausführbare Datei ausgeführt wird und eines dieser Bits gesetzt ist, wird der effektive Benutzer / die effektive Gruppe der ausführbaren Datei zu dem der Datei. Somit läuft das Programm als dieser Benutzer. Suchen Sie setcapnach einem moderneren Weg, um dies zu tun.

chown chgrp:


chattr: Dateiattribute ändern

Verwendung:

    chattr <operator><attribute> files...

operatorist eines des Zeichens +-=: * +die ausgewählten Attribute an den bestehenden sein fügt attributesder files * -die ausgewählten Entfernt attributes * =überschreibt mit dem angegebenen dem aktuellen Satz von Attributen der Dateien haben attributes.

attributeist eine Kombination der Buchstaben acdeijstuADST, die den Attributen entsprechen:

  • a nur anhängen
  • c komprimiert
  • d keine Müllkippe
  • e Extent-Format
  • i unveränderlich
  • j Datenaufzeichnung
  • s sicheres Löschen
  • t keine Schwanzverschmelzung
  • u nicht löschbar
  • Akeine atimeUpdates
  • D synchrone Verzeichnisaktualisierungen
  • S synchrone Updates
  • T Anfang der Verzeichnishierarchie

setfattr: Erweiterte Dateiattribute ändern

Verwendung (Attribut setzen):

    setfattr -n <name> -v <value> files...

Verwendung (entfernen):

    setfattr -x <name> files...

name ist der Name des erweiterten Attributs, das festgelegt oder entfernt werden soll

value ist der neue Wert des erweiterten Attributs


setfacl: Dateizugriffskontrolllisten ändern

Verwendung:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option muss eine der folgenden Angaben enthalten:

  • --set Legen Sie die Zugriffssteuerungsliste einer Datei oder eines Verzeichnisses fest und ersetzen Sie die vorherige Zugriffssteuerungsliste
  • -m| --modifyÄndern Sie die Zugriffssteuerungsliste einer Datei oder eines Verzeichnisses
  • -x| --remove ACL-Einträge einer Datei oder eines Verzeichnisses entfernen

    targetist einer der Buchstaben ugmo(oder die längere Form, die unten gezeigt wird):

  • uDie usersErlaubnis eines benannten Benutzers, der durch gekennzeichnet ist param, ist standardmäßig der Dateieigentümer, uidwenn sie weggelassen wird

  • g, groupErlaubnis einer benannten Gruppe, die durch gekennzeichnet paramist. Standardmäßig besitzt sie die Gruppe, uidwenn sie weggelassen wird
  • m, maskeffektive Rechte Maske
  • o, otherBerechtigungen anderer

    permsist eine Kombination der Buchstaben rwxX, die den Berechtigungen entsprechen:

  • r lesen

  • w schreiben
  • x ausführen
  • X Nur ausführen, wenn die Datei ein Verzeichnis ist oder für einen Benutzer bereits Ausführungsberechtigungen besitzt

    Alternativ permskann es sich auch um eine Oktalziffer ( 0- 7) handeln, die den Berechtigungssatz angibt.


setcap: Dateifunktionen ändern

Verwendung:

    setcap <capability-clause> file 

A capability-clausebesteht aus einer durch Kommas getrennten Liste von Funktionsnamen , gefolgt von einer Liste von Operator-Flag-Paaren.

Die verfügbaren Operatoren sind =, +und -. Die verfügbaren Flags sind e, iund pdie entsprechen dem Effective , Inheritable und Zulässige Fähigkeit Sets.

Der =Bediener erhöht die angegebenen Fähigkeitssätze und setzt die anderen zurück. Wenn in Verbindung mit dem =Bediener keine Flags vergeben werden, werden alle Fähigkeitssätze zurückgesetzt. Die +und die -Betreiber erhöhen oder die niedrigere oder mehr bestimmte Fähigkeit Sätze sind.


chcon: Datei SELinux Sicherheitskontext ändern

Verwendung:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

user ist der SELinux-Benutzer wie user_u, system_uoder root.

role ist die SELinux-Rolle (immer object_rfür Dateien)

Typ ist der SELinux-Subjekttyp


chsmack: Erweiterte SMACK- Attribute ändern

Verwendung:

    chsmack -a <value> file

valueist die SMACK-Bezeichnung, die für das SMACK64erweiterte Dateiattribut festgelegt werden soll


setrichacl : Ändert die Rich Access Control-Liste.

richacl s sind eine Funktion, die erweiterte ACLs hinzufügt.

Derzeit ist eine Arbeit in Arbeit, daher kann ich Ihnen nicht viel über sie erzählen. Ich habe sie nicht benutzt.

Siehe auch diese Frage Gibt es erweiterte Dateisystem-ACLs, die über die herkömmlichen 'rwx'- und POSIX-ACLs hinausgehen? und Manpage

Thomas Nyman
quelle
5
+1 Wenn Sie Beispiele für die Verwendung der einzelnen Cmds hinzufügen, wäre diese Antwort äußerst nützlich. Als kanonische Antwort können wir später darauf verweisen!
SLM
1
@slm Danke für den Vorschlag. Ich habe für jeden Befehl eine kurze Verwendungserklärung hinzugefügt.
Thomas Nyman
Eine Warnung an alle, die Fähigkeiten weiterentwickeln möchten als hier gezeigt. Ich habe die hier beschriebenen Funktionen verwendet. Es scheint jedoch unmöglich zu sein, sie (sinnvoll) über fork und exec zu erben. Ich denke, es gibt einen Fehler, siehe unix.stackexchange.com/questions/196483/…
ctrl-alt-delor
Der Fehler, den ich im vorherigen Kommentar erwähnt habe, war ein Design-Fehler und wurde in Kernel 4.3 mit zusätzlichen Umgebungsfunktionen behoben
ctrl-alt-delor)
1
Ich würde gerne Beispiele dafür sehen, dies wäre eine kanonische Antwort!
statquant
1

von einem hohen Niveau:

  • Grundrechte - Dateisystem unterstützt von allen Linux und all Dateisystem , das das wird -rwxrwxrwxdurch behandelt chmod, zusammen mit dem Besitzer und Gruppenkennungen für jede Datei oder einen Ordner auf dem Dateisystem behandelt gebunden durch chownund chgrp; Jeder kennt dieses Stück im Grunde.
  • Erweiterte Dateiattribute, die von xattr abgekürzt oder bekannt sind . Hierbei handelt es sich um Dateisystemfunktionen, mit denen Benutzer Computerdateien mit Metadaten verknüpfen können, die vom Dateisystem nicht interpretiert werden, wohingegen reguläre Attribute einen vom Dateisystem genau festgelegten Zweck haben. Die Attribute sind Name: Wert-Paare, die permanent Dateien und Verzeichnissen zugeordnet sind, ähnlich den Umgebungszeichenfolgen, die einem Prozess zugeordnet sind. Es gibt spezielle Linux-Befehle, um diese Metadaten einfach auf verschiedene Dateien / Ordner zu setzen.
  • SELINUX als sicheres Linux bekannt . Sie können den Verlauf im Web durchsuchen. Wissen Sie auch, dass es Alternativen zu SELINUX wie AppArmor gibt, und es gibt wahrscheinlich auch andere. An dieser Stelle handelt es sich um Kernelmodule, die Funktionen und Mechanismen für die Durchführung von MAC (obligatorische Zugriffskontrolle) mithilfe von xattr bereitstellen. selinux speichert Dateisicherheitsetiketten in xattrs . Und es gibt spezielle selinux-bezogene Befehle.

andere wichtige Punkte:

  • Die Ära und die Version von Gnu / Linux sind für xattr und Selinux von Bedeutung, was verfügbar und was funktionsfähig ist.
  • es wird berichtet, dass nicht alle Dateisysteme xattr unterstützen; Überlassen Sie dies der individuellen Forschung, basierend auf der Distribution und Version des verwendeten Linux (Rhel / Suse / Debian, Iris, Solaris, Aix, Unix aus den 1960er Jahren).
  • Es sind wirklich nur die inhärenten grundlegenden Datei- / Ordnerberechtigungen mit UIDs / GIDs und XATTRs, die alles möglich machen. SELinux verwendet xattrs zum Speichern von Datei- / Ordnersicherheitsetiketten ... mit selinux ist die gesamte Beinarbeit auf niedriger Ebene in xattrs etwas erledigt / definiert, damit Sie sie nutzen können. Wenn Ihr altes Dateisystem xattr nicht unterstützt, werden Sie Selinux nicht verwenden.
  • Sie können Selinux (oder Apparmor oder ein anderes Kernelmodul) aktivieren oder deaktivieren.
  • Abhängig von Ihrer Linux-Version können Sie möglicherweise xattrs für ein bestimmtes bereitgestelltes Dateisystem aktivieren oder deaktivieren. Ich erinnere mich an die fstab-Mount-Option in SLES 11, user_xattrund ich konnte festlegen, dass xattr bei der Installation nicht im Root-Dateisystem verfügbar ist. Ich denke jetzt mit RHEL / CentOS 7, dass xattr standardmäßig da ist und man es nicht haben kann.
  • Wenn Sie dies tun und lssehen -rwxrwxrwx+, +bedeutet dies, dass ein erweitertes Dateiattribut für dieses Objekt vorhanden ist .
  • Zugriffssteuerungsliste ( Access Control List, ACL): Eine Liste von Berechtigungen, die an ein Objekt angehängt sind. Eine ACL gibt an, welchen Benutzern oder Systemprozessen Zugriff auf Objekte gewährt wird und welche Vorgänge für bestimmte Objekte zulässig sind.
  • von centos wiki selinux: selinux ist ein MAC-Sicherheitsmechanismus, der im Kernel implementiert ist. Ohne SELinux werden nur herkömmliche DAC-Methoden (Discretionary Access Control) wie Dateiberechtigungen oder Zugriffssteuerungslisten (Access Control Lists, ACLs) zur Steuerung des Dateizugriffs von Benutzern verwendet. Benutzer und Programme können anderen Benutzern nicht sichere Dateiberechtigungen erteilen oder umgekehrt auf Teile des Systems zugreifen, die für den normalen Betrieb sonst nicht erforderlich wären. Im Wesentlichen gibt es unter dem traditionellen DAC-Modell zwei Berechtigungsstufen, root und user, und es gibt keine einfache Möglichkeit, ein Modell mit den geringsten Berechtigungen durchzusetzen. Viele Prozesse, die von root später gestartet werden, verlieren ihre Berechtigung, als eingeschränkter Benutzer ausgeführt zu werden
  • Es lohnt sich zu lesen, um die Verwendung von xattrs und ACLs in die richtige Perspektive zu rücken, da Linux [Kernel] alles als Datei behandelt (Geräte oder Netzwerkports blockieren). Sie können fast alles mit einem xattr markieren und eine Art Zugriffskontrolle über Selinux erzwingen nicht nur Dateien / Ordner. https://wiki.centos.org/HowTos/SELinux
  • xattr kann Probleme beim Verschieben von Daten zwischen Systemen und Dateisystemen sowie bei NFS verursachen, wenn ein [neueres] System xattr besser unterstützt als ältere Systeme, die möglicherweise nicht alle diese erweiterten Attribute erkennen (wenn überhaupt). Denken Sie an , indem tarauf Material mit xattr, wenn es kein Problem auf diesem System bleibt , aber wenn es an anderer Stelle geht , kann problematisch sein , wenn die xattr der wichtig sind (dh Samba und Kopieren zwischen win10 ntfs und Linux ext3 / 4, Btrfs, XFS oder zurück zwischen netzwerkgekoppelten Speichergeräten hin und her)
  • Wenn es kein Selinux oder einen anderen Mechanismus gibt, der ACLs durch die Definition in xattrs erzwingt , xattrkann s theoretisch nichts bedeuten und fallen gelassen oder abgestreift werden, da es sich an diesem Punkt nur um zusätzliches Gepäck handelt.
  • seien Sie vorsichtig , Sperrung selinux jetzt in RHEL / CentOS 7 , weil , wenn Dateisystem Lables über xattr verloren sie Probleme verursachen , wenn SELinux wieder auf sich ändernde Durchsetzung oder permissive ; Auch dies hängt von Ihrer Linux-Version ab und davon, wie xattr über Selinux verwendet wird.

Einfache Samba-Freigabe funktioniert in RHEL / CentOS 7 nicht ... da Selinux standardmäßig auf Erzwingen eingestellt ist. selinux hat alles abgelehnt, bis Sie es zugelassen haben. Deaktivieren Sie daher entweder selinux (bad) oder setzen Sie es auf permissive. Wenn Sie selinux als erzwingend belassen, müssen Sie den Ordner, den Sie mit Samba freigeben möchten, mit einem erweiterten Attribut kennzeichnen, damit selinux die Freigabe erkennt und zulässt. Wenn Sie also selinux erzwingen lassen, dann mit allen selinux-Befehlen (die dann die notwendigen xattrs setzen):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

Sie verwenden weiterhin selinux auf dem Linux-System mit dieser Samba-Freigabe, um Einschränkungen für Dateien / Ordner unter dieser Samba-Freigabe zu erzwingen (unter Verwendung eines beliebigen erweiterten Attributs). Da diese Dateien / Ordner freigegeben sind, kopiert ein Benutzer einige legitimerweise auf seinen win10-PC und kopiert sie dann zurück, wobei das erweiterte Attribut verloren geht. Jetzt, nach dieser hin und her Kopie, wird Selinux auf diesem Linux-System den Zugriff auf diese Dateien einschränken, da das notwendige xattr nicht mehr vorhanden ist und Benutzer / Administratoren sich fragen, warum die Dinge gerade jetzt funktionierten ... Selinux nicht einstellen um das Problem von verlorenen xattrs zuzulassen und zu erkennen, das in den Überwachungsprotokollen angezeigt wird, aber es wird nicht direkt angezeigt, dass es ein Ergebnis des Hin- und Her-Kopierens war, das das xattr verloren hat. Berücksichtigen Sie auch die Datensicherung und -wiederherstellung sowie die potenzielle Arbeit, die Sie sich merken müssenxattrs zusätzlich zu uid / gid, wenn Sie die Sicherheit basierend auf den korrekten xattrs erzwingen möchten .

Ron
quelle