GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Spezielle Dateiberechtigungen unter Linux:SUID, GUID und Sticky Bit

Dateiberechtigungen und Eigentümerschaft sind das grundlegende und dennoch wesentliche Sicherheitskonzept in Linux. Wahrscheinlich sind Ihnen diese Begriffe bereits bekannt. Normalerweise sieht es so aus:

Abgesehen von diesen regulären Berechtigungen gibt es einige spezielle Dateiberechtigungen, die nicht vielen Linux-Benutzern bekannt sind.

Um über spezielle Berechtigungen zu sprechen, gehe ich davon aus, dass Sie einige Kenntnisse über die grundlegenden Dateiberechtigungen haben. Wenn nicht, lesen Sie bitte unseren ausgezeichneten Leitfaden, der die Linux-Dateiberechtigungen erklärt.

Jetzt zeige ich Ihnen einige Sonderberechtigungen mit neuen Buchstaben im Linux-Dateisystem.

In diesem Beispiel hat der passwd-Befehl, der dafür verantwortlich ist, das Passwort eines Benutzers zu ändern, den Buchstaben s an derselben Stelle erwarten wir x oder - , für Benutzerberechtigungen. Beachten Sie, dass diese Datei dem Root-Benutzer und der Root-Gruppe gehört.

Mit dieser Berechtigung müssen Sie sudo nicht erteilen Zugriff auf einen bestimmten Benutzer, wenn Sie möchten, dass er ein Root-Skript ausführt.

Was ist SUID?

Wenn das SUID-Bit für eine ausführbare Datei gesetzt ist, bedeutet dies, dass die Datei mit den gleichen Berechtigungen wie der Besitzer der ausführbaren Datei ausgeführt wird.

Nehmen wir ein praktisches Beispiel. Wenn Sie sich die ausführbare Binärdatei des passwd-Befehls ansehen, ist das SUID-Bit gesetzt.

linuxhandbook:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 22  2019 /usr/bin/passwd

Das bedeutet, dass jeder Benutzer, der den passwd-Befehl ausführt, ihn mit derselben Berechtigung wie root ausführt.

Was ist der Vorteil? Der passwd-Befehl muss Dateien wie /etc/passwd, /etc/shadow bearbeiten, um das Passwort zu ändern. Diese Dateien gehören root und können nur von root geändert werden. Aber dank des Setuid-Flags (SUID-Bit) kann ein normaler Benutzer diese Dateien (die Root gehören) auch ändern und sein Passwort ändern.

Das ist der Grund, warum Sie den passwd-Befehl verwenden können, um Ihr eigenes Passwort zu ändern, obwohl die Dateien, die dieser Befehl modifiziert, root gehören.

Warum kann ein normaler Benutzer das Passwort anderer Benutzer nicht ändern?

Beachten Sie, dass ein normaler Benutzer keine Passwörter für andere Benutzer ändern kann, sondern nur für sich selbst. Aber warum? Wenn Sie den passwd-Befehl als normaler Benutzer mit den gleichen Berechtigungen wie root ausführen und die Dateien wie /etc/passwd ändern können, warum können Sie dann nicht das Passwort anderer Benutzer ändern?

Wenn Sie den Code für den Befehl passwd überprüfen, werden Sie feststellen, dass er die UID des Benutzers, dessen Passwort geändert wird, mit der UID des Benutzers überprüft, der den Befehl ausgeführt hat. Wenn es nicht übereinstimmt und der Befehl nicht von root ausgeführt wurde, wird ein Fehler ausgegeben.

Das setuid/SUID-Konzept ist knifflig und sollte mit äußerster Vorsicht verwendet werden, da Sie sonst Sicherheitslücken in Ihrem System hinterlassen. Es ist ein wesentliches Sicherheitskonzept und wird von vielen Befehlen (wie dem Ping-Befehl) und Programmen (wie sudo) verwendet.

Nachdem Sie nun das Konzept SUID verstanden haben, sehen wir uns an, wie das SUID-Bit gesetzt wird.

Wie setze ich das SUID-Bit?

Ich finde den symbolischen Weg einfacher, während ich das SUID-Bit setze. Sie können den chmod-Befehl folgendermaßen verwenden:

chmod u+s file_name

Hier ist ein Beispiel:

linuxhandbook:~$ ls -l test.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Sie können auch den numerischen Weg verwenden. Sie müssen nur eine vierte Ziffer zu den normalen Berechtigungen hinzufügen. Die zum Festlegen der SUID verwendete Oktalzahl ist immer 4.

linuxhandbook:~$ ls -l test2.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:53 test2.txt
linuxhandbook:~$ chmod 4766 test2.txt
linuxhandbook:~$ ls -l test2.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:54 test2.txt

Wie entferne ich SUID?

Sie können entweder den symbolischen Modus im chmod-Befehl wie folgt verwenden:

chmod u-s test.txt

Oder verwenden Sie die numerische Methode mit 0 anstelle von 4 mit den Berechtigungen, die Sie festlegen möchten:

chmod 0766 test2.txt

Unterschied zwischen kleinem s und großem S als SUID-Bit

Erinnern Sie sich an die Definition von SUID? Damit kann eine Datei ausgeführt werden mit den gleichen Berechtigungen wie der Eigentümer der Datei.

Aber was ist, wenn die Datei überhaupt kein Ausführungsbit gesetzt hat? So:

linuxhandbook:~$ ls -l test.txt
-rw-rw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt

Wenn Sie das SUID-Bit setzen, zeigt es ein großes S, kein kleines s:

linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwSrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Das S als SUID-Flag bedeutet, dass ein Fehler vorliegt, den Sie untersuchen sollten. Sie möchten, dass die Datei mit derselben Berechtigung wie der Besitzer ausgeführt wird, aber es gibt keine ausführbare Berechtigung für die Datei. Das bedeutet, dass nicht einmal der Eigentümer die Datei ausführen darf und wenn die Datei nicht ausgeführt werden kann, erhalten Sie als Eigentümer keine Berechtigung. Dies verfehlt den gesamten Punkt des Setzens des SUID-Bits.

Wie finde ich alle Dateien mit SUID-Set?

Wenn Sie mit dieser Berechtigung nach Dateien suchen möchten, verwenden Sie den Befehl find im Terminal mit der Option -perm.

find / -perm /4000

Was ist SGID?

SGID ähnelt SUID. Wenn das SGID-Bit gesetzt ist, hat jeder Benutzer, der die Datei ausführt, die gleichen Berechtigungen wie der Gruppeneigentümer der Datei.

Der Vorteil liegt in der Handhabung des Verzeichnisses. Wenn die SGID-Berechtigung auf ein Verzeichnis angewendet wird, erhalten alle Unterverzeichnisse und Dateien, die in diesem Verzeichnis erstellt werden, denselben Gruppenbesitz wie das Hauptverzeichnis (nicht den Gruppenbesitz des Benutzers, der die Dateien und Verzeichnisse erstellt hat).

Öffnen Sie Ihr Terminal und überprüfen Sie die Berechtigung für die Datei /var/local:

linuxhandbook:~$ ls -ld /var/local
drwxrwsr-x 1 root staff 512 Apr 24  2018 /var/local

Dieser Ordner /var/local hat den Buchstaben „s“ an der gleichen Stelle, an der Sie „x“ oder „-“ für Gruppenberechtigungen erwarten.

Ein praktisches Beispiel für SGID ist der Samba-Server zum Teilen von Dateien in Ihrem lokalen Netzwerk. Es ist garantiert, dass alle neuen Dateien die gewünschten Berechtigungen nicht verlieren, egal wer sie erstellt hat.

Wie wird die SGID eingestellt?

Sie können das SGID-Bit im symbolischen Modus wie folgt setzen:

chmod g+s directory_name

Hier ist ein Beispiel:

linuxhandbook:~$ ls -ld folder/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
linuxhandbook:~$ chmod g+s folder
linuxhandbook:~$ ls -ld folder/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/

Sie können auch die numerische Methode verwenden. Sie müssen nur eine vierte Ziffer zu den normalen Berechtigungen hinzufügen. Die für SGID verwendete Oktalzahl ist immer 2.

linuxhandbook:~$ ls -ld folder2/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
linuxhandbook:~$ chmod 2775 folder2
linuxhandbook:~$ ls -ld folder2/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/

Wie entferne ich das SGID-Bit?

Verwenden Sie einfach das -s anstelle von +s wie folgt:

chmod g-s folder

Das Entfernen von SGID ist dasselbe wie das Entfernen von SGID. Verwenden Sie die zusätzliche 0 vor den Berechtigungen, die Sie festlegen möchten:

chmod 0755 folder

So finden Sie Dateien mit gesetzter SGID in Linux

Verwenden Sie diesen Befehl, um alle Dateien mit gesetztem SGID-Bit zu finden:

find . -perm /2000

Was ist ein Sticky-Bit?

Das Sticky-Bit funktioniert im Verzeichnis. Wenn das Sticky-Bit für ein Verzeichnis gesetzt ist, können alle Dateien im Verzeichnis nur von den Dateieigentümern oder dem Root gelöscht oder umbenannt werden.

Dies wird normalerweise im /tmp-Verzeichnis verwendet, das als Papierkorb für temporäre Dateien dient.

linuxhandbook:~$ ls -ld /tmp
drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp

Wie Sie sehen können, hat der Ordner /tmp den Buchstaben t an derselben Stelle erwarten wir x oder für andere Berechtigungen. Das bedeutet, dass ein Benutzer (außer root) die temporären Dateien, die von anderen Benutzern im /tmp-Verzeichnis erstellt wurden, nicht löschen kann.

Wie setze ich das Sticky-Bit?

Wie immer können Sie sowohl den symbolischen als auch den numerischen Modus verwenden, um das Sticky-Bit unter Linux zu setzen.

chmod +t my_dir

Hier ist ein Beispiel:

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
linuxhandbook:~$ chmod +t my_dir/
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/

Der numerische Weg besteht darin, den normalen Berechtigungen eine vierte Ziffer hinzuzufügen. Die für das Sticky-Bit verwendete Oktalzahl ist immer 1.

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
linuxhandbook:~$ chmod 1775 tmp2/
linuxhandbook:~$ ls -ld tmp2/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/

So entfernen Sie das Sticky-Bit:

Sie können den symbolischen Modus verwenden:

chmod -t my_dir

Oder der numerische Modus mit 0 vor den regulären Berechtigungen:

chmod 0775 tmp2

So finden Sie Dateien mit gesetztem Sticky-Bit in Linux

Dieser Befehl gibt alle Dateien/Verzeichnisse mit gesetztem Sticky-Bit zurück:

linuxhandbook:~$ find . -perm /1000

Wenn das Verzeichnis nicht die Ausführungsberechtigung für alle festgelegt hat, führt das Setzen eines Sticky-Bits dazu, dass T anstelle von t angezeigt wird. Ein Hinweis darauf, dass die Sache mit dem Sticky-Bit nicht ganz stimmt.

Fazit

Ich werde dieses Bild hier einfügen, um sich daran zu erinnern, was Sie gerade gelernt haben:

Diese Flexibilität bei der Verwaltung von Ordnern, Dateien und all ihren Berechtigungen ist so wichtig in der täglichen Arbeit eines Systemadministrators. Sie konnten sehen, dass all diese speziellen Berechtigungen nicht so schwer zu verstehen sind, aber sie müssen mit äußerster Vorsicht verwendet werden.

Ich hoffe, dieser Artikel hat Ihnen ein gutes Verständnis von SUID, GUID und Sticky Bit in Linux vermittelt. Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte unten einen Kommentar.


Linux
  1. Grundlagen der Linux-Dateiberechtigungen

  2. Linux-Berechtigungen:Eine Einführung in chmod

  3. Linux-Berechtigungen:SUID, SGID und Sticky Bit

  4. Linux chmod und chown – So ändern Sie Dateiberechtigungen und Eigentumsrechte in Linux

  5. Was ist Sticky Bit, SUID und SGID unter Linux?

Grundlegendes zu Linux-Dateiberechtigungen

Chmod-Befehl in Linux (Dateiberechtigungen)

Linux-Dateiberechtigungen und Eigentumsrechte mit Beispielen erklärt

Linux-Interviewfragen – Sonderberechtigungen (SUID, SGID und Sticky Bit)

Grundlegende Dateiberechtigungen und Eigentumsrechte in Linux verstehen

So verwalten Sie Datei- und Verzeichnisberechtigungen/Eigentümer in Linux