Spezielle Berechtigungen in Linux: SUID, SGID und Sticky Bit

Haben Sie sich jemals in einer Situation befunden, in der Sie eine Aufgabe auf einem Linux-System ausführen mussten, jedoch mit einer frustrierenden Zugriffsverweigerung konfrontiert wurden? Nun, sagen Sie auf Wiedersehen zu diesen Sorgen und begrüßen Sie die Welt der speziellen Berechtigungen in Linux!

Dieses Tutorial ist Ihr Ticket, um die Feinheiten der speziellen Berechtigungen in Linux – Klebriger Bit, Set User ID (SUID) und Set Group ID (SGID) – zu beherrschen. Diese speziellen Berechtigungen bieten ein höheres Maß an Sicherheitskontrolle.

Lesen Sie weiter und verwalten Sie Ihre Dateien sicher mit Präzision und Vertrauen!

Voraussetzungen

Bevor Sie in die Details der speziellen Berechtigungen in Linux einsteigen, stellen Sie sicher, dass Sie einen Linux-Computer haben. Dieses Tutorial verwendet Ubuntu 22.04 LTS (Jammy Jellyfish) für praktische Demonstrationen.

Ausführen von Dateien mit speziellen Berechtigungen in Linux (SUID)

Linux-Dateiberechtigungen bestimmen in der Regel die Fähigkeit eines Benutzers, eine Datei basierend auf seinen eigenen Berechtigungen und denen seiner Gruppe zu lesen, zu schreiben oder auszuführen. Es gibt jedoch Situationen, in denen ein Benutzer eine Datei mit den Berechtigungen des Dateieigentümers anstelle seiner eigenen ausführen muss.

Beispielsweise nehmen Sie ein Programm, das nur von Root-Benutzern ausgeführt werden kann, aber ein normaler Benutzer muss es für eine spezifische Aufgabe ausführen. In solchen Fällen wird SUID unbezahlbar.

Um zu sehen, wie SUID-Berechtigungen festgelegt werden, befolgen Sie diese Schritte:

1. Öffnen Sie das Terminal und führen Sie die folgenden Befehle aus, um einen Benutzer (useradd) namens A-Benutzer (beliebig) zu erstellen und ihm ein Passwort (passwd) zu geben.

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. Führen Sie anschließend den folgenden stat-Befehl aus, um die vorhandenen Berechtigungen des cat-Befehls anzuzeigen.

stat /usr/bin/cat

Machen Sie sich die Zugriffsberechtigungen unten zur späteren Vergleichung notwendig:

  • 0755 – Erlaubt die Ausführung der Datei mit den Berechtigungen ihres Besitzers und gewährt Nicht-Privilegierten erhöhte Berechtigungen beim Ausführen der Datei.
  • -rwxr-xr-x – Setzt die Berechtigung für den Besitzer zum Lesen, Schreiben und Ausführen der Datei (rwx), während Gruppenmitglieder und andere Benutzer die Datei lesen und ausführen können (r-x und r-x).
Viewing access permissions of the cat command

3. Führen Sie nun den untenstehenden chmod-Befehl aus, der keine Ausgabe liefert, aber das SUID-Bit auf den cat-Befehl setzt.

Dieser Befehl ermöglicht es dem cat-Befehl, mit den Berechtigungen des Dateibesitzers anstelle der Berechtigungen des Benutzers, der den Befehl ausführt, ausgeführt zu werden.

? Beachten Sie, dass die Verwendung von SUID mit Vorsicht erfolgen sollte, da dies potenziell Sicherheitsrisiken mit sich bringen kann, wenn es nicht ordnungsgemäß implementiert wird. Stellen Sie sicher, dass Sie SUID nur auf vertrauenswürdige Befehle und Dateien anwenden.

sudo chmod u+s /usr/bin/cat

4. Nachdem Sie das SUID-Bit festgelegt haben, führen Sie den folgenden stat-Befehl aus, um das SUID-Bit zu überprüfen, indem Sie die Berechtigungen des cat-Befehls erneut überprüfen.

stat /usr/bin/cat

Bei Erfolg sehen Sie das Folgende, wo Sie einen Vergleich mit den Informationen durchführen, die Sie in Schritt zwei notiert haben:

  • 0755 geändert auf 4755, wobei die Zahl 4 das SUID-Bit repräsentiert.
  • -rwxr-xr-x geändert auf -rwsr-xr-x, wobei s den Ausführungsberechtigungsbereich des Benutzers repräsentiert (x) entsprechend.
Verifying the SUID bit

5. Führen Sie den folgenden cat-Befehl aus, um die Berechtigung des aktuell angemeldeten Benutzers für den Zugriff auf die /etc/shadow-Datei zu testen. Diese Datei ist eine kritische Systemdatei, die verschlüsselte Benutzerpasswörter und verwandte Informationen speichert, auf die nur ein Root-Benutzer zugreifen kann.

Standardmäßig ermöglicht der cat-Befehl das Anzeigen des Inhalts einer Datei in Linux. Dieses Verhalten trifft jedoch nicht immer auf jede Datei zu.

cat /etc/shadow

Die unten stehende Meldung erscheint, da der aktuelle Benutzer keine Berechtigung zum Zugriff auf die Datei hat.

Viewing the /etc/shadow file’s content via a user without appropriate permissions

6. Führen Sie nun jeden Befehl unten aus, um (su) zum neuen Benutzer (A-Benutzer) zu wechseln und versuchen Sie erneut, auf die Datei /etc/shadow zuzugreifen.

Diesmal wird der cat-Befehl mit den Berechtigungen des Dateibesitzers (normalerweise root) ausgeführt, anstatt mit den Berechtigungen des Benutzers, der den Befehl ausgeführt hat.

# Wechseln zu A-Benutzer
su A-user
# Inhalt der Datei /etc/shadow anzeigen
cat /etc/shadow

Da Sie A-Benutzer vorübergehend die Berechtigung zum Lesen des Inhalts dieser Datei erteilt haben, erhalten Sie eine Ausgabe wie die untenstehende.

Viewing the /etc/shadow file’s content

7. Aus Sicherheitsgründen führen Sie die folgenden Befehle aus, um aus dem aktuellen Benutzer (A-Benutzer) auszusteigen und die Berechtigungen des cat-Befehls auf ihren ursprünglichen Zustand zurückzusetzen.

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. Führen Sie abschließend den folgenden Befehl aus, um zu überprüfen, ob das SUID-Bit entfernt wurde.

stat /usr/bin/cat

Beachten Sie, dass das SUID-Bit 4 und s nicht mehr in den Zugriffsberechtigungen vorhanden sind.

Confirming the SUID bit removal

Aktivieren von kollaborativen Arbeitsabläufen in Linux-Verzeichnissen (SGID)

Dateien mit speziellen Berechtigungen in Linux über SUID auszuführen, funktioniert zweifellos gut. Aber was ist, wenn Sie auf kollaborative Arbeitsabläufe abzielen, bei denen mehrere Benutzer an Projekten zusammenarbeiten? In der Regel müssen Sie sicherstellen, dass neu erstellte Dateien das Gruppenbesitzrecht des übergeordneten Verzeichnisses erben.

Wenn Sie mit diesem Szenario konfrontiert werden, erweist sich das SGID als Spielveränderer. Diese leistungsstarke Funktion vereinfacht die Verwaltung gemeinsamer Ressourcen und verbessert gruppenbasierte Arbeitsabläufe in Linux-Umgebungen.

Um zu sehen, wie SGID funktioniert, erstellen Sie eine Gruppe, fügen Benutzer hinzu, setzen SGID-Berechtigungen auf ein Verzeichnis und testen Sie dessen Funktionalität wie folgt:

1. Führen Sie die folgenden Befehle aus, um sich als Root-Benutzer anzumelden und eine neue Gruppe namens demo (beliebig) zu erstellen. Diese Gruppe wird verwendet, um die SGID-Funktionalität zu testen.

Diese Befehle führen keine

# Wechsel zu Root
sudo su
# Eine neue Gruppe erstellen
groupadd demo
Switching to root and creating a job

2. Führen Sie anschließend die folgenden Befehle aus, um zwei Benutzer (userA und userB) zu erstellen, die Sie zur Simulation einer kooperativen Umgebung verwenden.

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

3. Nachdem Sie neue Benutzer erstellt haben, führen Sie die folgenden usermod-Befehle aus, die keine Ausgabe auf dem Terminal erzeugen, aber die Benutzer (userA und userB) zur Gruppe demo hinzufügen.

usermod -aG demo userA
usermod -aG demo userB

4. Führen Sie nun jeden der folgenden Befehle aus, um ein Verzeichnis (mkdir) namens /demo-dir (beliebig) zu erstellen, und setzen Sie die Benutzer- und Gruppenberechtigungen des Verzeichnisses auf userA bzw. demo.

? Bei erfolgreicher Ausführung erzeugen diese Befehle keine Ausgabe, was für dieses Tutorial gilt.

# Ein Verzeichnis erstellen
mkdir /demo-dir
# Ändern Sie die Eigentümerschaft des Verzeichnisses
chown userA:demo /demo-dir

5. Führen Sie als nächstes den folgenden ls-Befehl aus, um die Berechtigungen des Verzeichnisses /demo-dir anzuzeigen.

ls -ld /demo-dir/

Die Ausgabe unten bestätigt, dass der Benutzer des Verzeichnisses /demo-dir auf userA und die Gruppe auf demo gesetzt ist.

Viewing the /demo-dir directory’s permissions

6. Mit bestätigten Berechtigungen führen Sie den chmod-Befehl unten aus, um das SGID-Bit im Verzeichnis /demo-dir/ wie folgt zu setzen:

  • g+s – Set the SGID bit on the /demo-dir/ directory.
  • o-rwx – Remove all permissions (read, write, execute) for others.
  • u+rwx – Grant read, write, and execute permissions to the owner.
  • g+rwx – Grant read, write, and execute permissions to the group.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. Sobald SGID gesetzt ist, führen Sie den folgenden Befehl aus, um die Berechtigungen des Verzeichnisses /demo-dir zu überprüfen.

stat /demo-dir

Bei Erfolg sehen Sie das SGID-Bit, dargestellt durch die Zahl 2 vor der oktalen Modus-Berechtigung und s an der Stelle der Gruppenbesitzer-Ausführungsrechte (x) (rws).

Verifying the SGID bit set to the /demo-dir directory

8. Führen Sie anschließend jeden Befehl unten aus, um ein Verzeichnis /home für userA zu erstellen.

mkdir /home/userA
chown userA:userA /home/userA

9. Führen Sie die folgenden Befehle aus, um zu userA zu wechseln (su) und eine Datei (touch) namens textA.txt (beliebig) im Verzeichnis /demo-dir zu erstellen.

Diese Befehle geben keine Ausgabe aus (was für dieses Tutorial gilt), aber Sie überprüfen die Berechtigungen der Datei im nächsten Schritt.

# Wechsel zu userA
su - userA
# Verzeichnis ändern
cd /demo-dir
# Textdatei erstellen
touch textA.txt

10. Führen Sie den folgenden ls-Befehl aus, um die Berechtigungen der Datei textA.txt anzuzeigen.

ls -l textA.txt

Unten ist die Gruppenbesitzer der Datei textA.txt demo, die die primäre Gruppe des Erstellers, userA, ist. Mitglieder der Gruppe demo können die Datei lesen und ändern, während andere sie nur lesen können.

Um sicherzustellen, dass neue Dateien im Verzeichnis /demo-dir das Gruppenbesitz des Verzeichnisses erben, sollte ein SGID-Bit auf dem Verzeichnis gesetzt werden, wie in den folgenden Schritten beschrieben.

Verifying the textA.txt file’s permissions

11. Jetzt die folgenden Befehle aufrufen, um aus dem aktuellen Benutzer (userA) auszusteigen und das SGID-Bit (chmod g+s) im Verzeichnis /demo-dir zu setzen.

# BenutzerA verlassen
exit
# SGID auf /demo-dir setzen
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. Sobald das SGID gesetzt ist, den folgenden Befehl ausführen, um das hinzugefügte SGID-Bit im Verzeichnis /demo-dir zu überprüfen.

stat /demo-dir

Wie unten gezeigt, werden Sie feststellen, dass das SUID-Bit 2 hinzugefügt wurde und es ein s an der Stelle des Gruppenbesitzer-Ausführungsbereichs gibt. Diese Ausgabe bestätigt, dass das SGID-Bit erfolgreich auf das /demo-dir-Verzeichnis gesetzt wurde.

Verifying the SGID is set to the /demo-dir directory

13. Als nächstes zurück zu userA wechseln und eine weitere Datei namens testA.txt (beliebig) im Verzeichnis /demo-dir erstellen.

# Zu userA wechseln
su - userA
# Verzeichnis wechseln
cd /demo-dir
# Eine Textdatei erstellen
touch testA.txt

14. Nach der Erstellung den folgenden ls-Befehl ausführen, um den Besitz der neuen Datei (testA.txt) zu überprüfen.

ls -l testA.txt

Wenn der SGID wie erwartet funktioniert, zeigt die Ausgabe, dass während BenutzerA der Eigentümer ist, die Gruppenzugehörigkeit aufgrund des gesetzten SGID-Bits am Verzeichnis /demo-dir auf demo liegt.

Verifying permissions of the testA.txt file

15. Erstellen Sie jetzt ein /home-Verzeichnis für BenutzerB, um die SGID-Funktionalität weiter zu testen.

mkdir /home/userB
chown userB:userB /home/userB

16. Wechseln Sie zu BenutzerB und erstellen Sie eine Datei namens testB.txt (beliebig) im gleichen Verzeichnis /demo-dir.

# Wechseln zu BenutzerB
su - userB
# Verzeichnis ändern
cd /demo-dir
# Eine Textdatei erstellen
touch testB.txt
Switching to userB and creating the testB.txt file

17. Zeigen Sie (ls) die Informationen zur neuen Datei (testB.txt) an.

ls -l testB.txt

Überprüfen Sie das Eigentum der Datei testB.txt.

Checking the ownership of the textB.txt file

Schutz von Dateien in Verzeichnissen (Sticky Bit)

Die Aktivierung von gemeinsamen Arbeitsabläufen in Linux-Verzeichnissen fördert Teamarbeit und nahtlose Zusammenarbeit. Wenn jedoch eine sichere Umgebung für die effektive Verwaltung von Dateien geschaffen werden muss, kommen die Berechtigungen des Sticky Bits ins Spiel.

Indem Sie das Sticky Bit setzen, geben Sie im Grunde genommen dem Dateibesitzer, Verzeichnisbesitzer oder Root-Benutzer die „Schlüssel zum Schloss“. Dadurch wird sichergestellt, dass nur sie die Befugnis haben, die Datei innerhalb des Verzeichnisses zu löschen oder umzubenennen, was einen zusätzlichen Schutz für sensible Daten bietet.

Um Sticky Bit-Berechtigungen festzulegen, müssen Sie zunächst ein freigegebenes Verzeichnis mit den folgenden Schritten erstellen:

1. Melden Sie sich als Benutzer root an und erstellen Sie ein (gemeinsames) Verzeichnis (mkdir), in dem mehrere Benutzer Dateien erstellen können.

# Wechseln Sie zu Root
sudo su
# Erstellen Sie ein Verzeichnis (gemeinsam)
mkdir /shared-dir

2. Führen Sie anschließend die unten stehenden Befehle aus, um die Berechtigungen des /shared-dir-Verzeichnisses so zu ändern, dass jedem Schreibrechte gewährt werden.

Die erste Zahl (1) in 1777 setzt das Sticky Bit, während der Rest (777) das Verzeichnis für jeden lesbar, beschreibbar und ausführbar macht.

# Berechtigungen ändern, Sticky Bit setzen
chmod 1777 /shared-dir
# Zeigen Sie die Berechtigungen des Verzeichnisses an
ls -ld /shared-dir

Die folgenden sind Funktionen oder Attribute des Sticky Bits in einem Linux-System:

Feature Function
Directory Protection When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users.
Shared Directories The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users.

Im letzten Teil des Berechtigungsfeldes sehen Sie den Buchstaben ‚t‚, der darauf hinweist, dass das Sticky Bit auf das /shared-dir-Verzeichnis gesetzt ist.

Viewing permissions of the /shared-dir directory

3. Wechseln Sie zu BenutzerA und erstellen Sie eine Datei namens DateiA.txt (beliebig) im Verzeichnis /shared-dir:

# Wechseln Sie zu BenutzerA
su - userA
# Erstellen Sie eine Textdatei
touch /shared-dir/fileA.txt

4. Melden Sie sich von BenutzerA ab, wechseln Sie zu BenutzerB und erstellen Sie eine weitere Datei namens DateiB.txt (beliebig) im selben /shared-dir-Verzeichnis.

# Beenden von BenutzerA
exit
# Wechsel zu BenutzerB
su - userB
# Erstellen einer Textdatei
touch /shared-dir/fileB.txt

5. Jetzt beenden Sie BenutzerB, wechseln zu BenutzerA und versuchen, die Datei fileB.txt von BenutzerB zu löschen.

# Beenden von BenutzerB
exit
# Wechsel zu BenutzerA
su - userA
# Löschen einer Datei, die BenutzerB gehört
rm /shared-dir/fileB.txt

Sie erhalten eine Ausgabe wie unten dargestellt, da nur der Dateibesitzer Änderungen vornehmen oder die Datei löschen kann.

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. Führen Sie abschließend die folgende Befehlsliste (ls) aus, um alle Dateien im freigegebenen Verzeichnis (/shared-dir) aufzulisten.

ls /shared-dir/

Wenn die Berechtigungen für den Sticky Bit funktionieren, sehen Sie, dass die von BenutzerB erstellte Datei fileB.txt sicher und unversehrt ist und nicht gelöscht wurde.

Confirming the fileB.txt file still exists

Schlussfolgerung

Beim Abschluss dieser Erkundung spezieller Berechtigungen in Linux haben Sie ein robustes Set von Tools freigeschaltet: das SUID, SGID und Sticky Bit. Bewaffnet mit diesem Wissen können Sie jetzt den Zugriff feinabstimmen und Ihre Dateien präzise schützen.

Aber hören Sie hier nicht auf! Warum nicht versuchen, ein freigegebenes Verzeichnis mit SGID einzurichten und experimentieren, wie Dateien Gruppenbesitz erben? Die Linux-Welt liegt Ihnen zu Füßen, und mit jedem Unterfangen werden Sie die Kunst der Systemsicherung mit Finesse meistern!

Source:
https://adamtheautomator.com/special-permissions-in-linux/