Wenn ein Prozess eine Operation an einer Datei ausführt, führt der Linux-Kernel die Prüfung in der folgenden Reihenfolge durch:
-
Discretionary Access Control (DAC) oder vom Benutzer vorgegebene Zugriffskontrolle. Dies umfasst sowohl Berechtigungsprüfungen im klassischen UNIX-Stil als auch POSIX-Zugriffssteuerungslisten (ACL). Klassische UNIX-Prüfungen vergleichen die aktuelle Prozess-UID und -GID mit der UID und GID der Datei, auf die zugegriffen wird, hinsichtlich der eingestellten Modi (Read/Write/eXecute). Die Zugriffskontrollliste erweitert die klassischen UNIX-Prüfungen, um mehr Optionen bezüglich der Berechtigungskontrolle zu ermöglichen.
-
Mandatory Access Control (MAC) oder richtlinienbasierte Zugriffskontrolle. Dies wird mithilfe von Linux-Sicherheitsmodulen (LSM) implementiert, die keine echten Module mehr sind (früher waren sie es, wurden aber fallen gelassen). Sie ermöglichen zusätzliche Prüfungen, die auf anderen Modellen als den klassischen Sicherheitsprüfungen im UNIX-Stil basieren. Alle diese Modelle basieren auf einer Richtlinie, die beschreibt, welche Art von Operationen für welchen Prozess in welchem Kontext erlaubt sind.
Hier ist ein Beispiel für den Inodes-Zugriff (einschließlich Dateizugriff), um meine Antwort mit Links zu einem Online-Linux-Querverweis zu untermauern. Die Datei „function_name
(Dateiname:Zeile)" sind für die Version 3.14 des Linux-Kernels.
Die Funktion inode_permission
(fs/namei.c:449) überprüft zuerst die Leseberechtigung auf dem Dateisystem selbst (sb_permission
in fs/namei.c:425), ruft dann __inode_permission
auf (fs/namei.c:394), um auf Lese-/Schreib-/Ausführungsberechtigungen und POSIX-ACL auf einem Inode in do_inode_permission
zu prüfen (fs/namei.c:368) (DAC) und dann LSM-bezogene Berechtigungen (MAC) in security_inode_permission
(security/security.c:550).
Es gab nur eine Ausnahme zu dieser Reihenfolge (DAC, dann MAC):Es war für die mmap-Prüfungen. Dies wurde jedoch in der Version 3.15 des Linux-Kernels behoben (entsprechender Commit).
DAC
==Discretionary Access Control
, http://en.wikipedia.org/wiki/Discretionary_access_control
MAC
==Mandatory Access Control
, http://en.wikipedia.org/wiki/Mandatory_access_control
ACL
==Access Control List
, http://en.wikipedia.org/wiki/Access_control_list
Die ACL
spezifiziert die anzuwendenden Kontrollen durch die Kontrollmethode DAC
oder MAC
. MAC
ist explizit, wird zentral gesteuert und erlaubt Benutzern nicht, einem Objekt Autorität zu erteilen, es sei denn, sie haben ausdrückliche Berechtigungen dazu, wohingegen DAC
ermöglicht Benutzern, anderen Benutzern Zugriff auf Objekte zu gewähren, auf die sie zugreifen können.
MAC
ACL
s werden immer zuerst auf eine Anfrage angewendet, und wenn der Zugriff verweigert wird, wird die Verarbeitung gestoppt. Wenn der Zugriff erlaubt ist, dann DAC
ACL
s angewendet werden, und erneut, wenn der Zugriff verweigert wird, wird die Verarbeitung gestoppt. Nur wenn der Zugriff von beiden MAC
gewährt wird und DAC
ACL
s kann der Benutzer auf das angeforderte Objekt zugreifen.
SELinux
ist ein MAC
Implementierung für Linux (es gibt andere), während die traditionelle rwx
Dateiberechtigungen, kombiniert mit dem besitzenden Benutzer und der Gruppe, bilden den vollständigen DAC
ACL
. Die SELinux
„Richtlinie“ ist im Wesentlichen die MAC
ACL
.
Tut mir leid, dass ich streite, aber ich denke, einige der Antworten hier könnten falsch sein. Direkt von Fedoras http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html:
SELinux-Richtlinienregeln werden nach DAC-Regeln überprüft. SELinux-Richtlinienregeln werden nicht verwendet, wenn DAC-Regeln zuerst den Zugriff verweigern.