Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel A Sicherheit unter Linux
  gp A.1 Viren und Trojaner
  gp A.2 Der Superuser (su)
  gp A.3 Überlaufen von Logfiles
  gp A.4 Zugriffsrechte auf Dateien
  gp A.5 Das SUID-Bit
  gp A.6 Programme ohne Ausführrechte
  gp A.7 Buffer Overflow (Pufferüberlauf)
  gp A.8 Race Condition
  gp A.9 Temporäre Dateien
  gp A.10 chroot
  gp A.11 Umgebungsvariablen
  gp A.12 Zugriffsrechte – häufig gemachte Fehler
  gp A.13 system() und popen()
  gp A.14 Offene Filedeskriptoren
  gp A.15 Core Dump
  gp A.16 SQL Injection
  gp A.17 Filedeskriptor-Überlauf mit select()


Rheinwerk Computing

A.5 Das SUID-Bit  toptop

Häufig liegt kein zwingender Grund vor, bei einer Anwendung dauerhaft das SUID-Bit zu setzen. Das Sicherheitsrisiko ist dafür einfach zu hoch. Verwendet wird das SUID-Bit z. B., damit der Benutzer sein Passwort in passwd ändern kann. Hätte der User keine root-Rechte, so könnte nur Root das Passwort ändern. Hier ein solches Negativ-Beispiel, wie Sie eine Anwendung mit root-Rechten ausstatten:

$ gcc –o testprogramm testprogramm.c
$ su
Passwort:******** 
# chown root:root testprogramm
# chmod a+s testprogramm
# exit

SUID (Set User ID) und SGID (Set Group ID) werden durch ein s anstelle eines x bei den Eigentümer- und bei den Gruppenrechten ausgedrückt. Das s-Recht an einer ausführbaren Datei bedeutet, dass der Benutzer, der sie startet, während des Programmlaufes die UID des Dateibesitzers bzw. die GID der Besitzergruppe erhält. Das hängt davon ab, ob das s beim Besitzer oder der Besitzergruppe steht. Im Falle des Programms /bin/passwd wird man z. B. während des Programmlaufs zum Superuser. Wird das SGID-Recht auf ein Verzeichnis gegeben, so hat es eine andere Funktion. In diesem Fall erhalten alle Dateien, die in diesem Verzeichnis erstellt werden, automatisch die gleiche Gruppe, die auch dem Verzeichnis zugeordnet ist.

Aber wie machen das dann Programme wie bspw. KPPP zum Anwählen in das Internet. Es ist praktisch ausgeschlossen, ein Wählprogramm ohne das gesetzte SUID-Bit zu schreiben. Möglich ist es zwar schon, aber die Benutzerfreundlichkeit, gerade für Anfänger, würde damit nicht gerade erleichtert. Entnommen aus der Dokumentation von KDE, geht KPPP folgendermaßen vor:

gp  Gleich nach dem Programmstart startet KPPP einen neuen Prozess.
gp  Der Masterprozess (Elternprozess) (der das GUI, Benutzerinteraktion u. Ä. verwaltet) legt den SUID-Status danach ab und läuft dann mit den normalen Benutzerprivilegien (und kann diese auch nicht wiedererlangen).
gp  Der Slaveprozess (Kindprozess) behält seine Privilegien bei und kümmert sich um alles, wofür man root-Rechte benötigt. Um diesen Teil sicher zu machen, werden hier keine Funktionen der Qt-Bibliotheken aufgerufen, sondern nur einfache Funktionen der C-Bibliothek. Der Quellcode für diesen Prozess ist kurz (etwa 500 Zeilen) und gut dokumentiert. Dadurch ist es einfach, Sicherheitslöcher zu entdecken.
gp  Master- und Slaveprozess kommunizieren über die Standard-IPC-Mechanismen.

Wenn Sie also eine Anwendung erstellen, welche unbedingt SUID-Rechte benötigt, ist ein Studium des Quellcodes des KPPP zu empfehlen. Leider ist es nicht möglich, diese 500 Zeilen (aufgrund des Umfangs) hier abzudrucken.

Einen Überblick zu den Programmen, die das SUID- oder SGID-Bit gesetzt haben, können Sie (als root) in der Shell mit folgendem Aufruf erhalten:

# find / -perm +6000

Sie können jetzt ggf. die Programme, die Sie nicht mehr benötigen, entfernen, wobei dies schon tiefergreifende Kenntnisse voraussetzt, da das eine oder andere Kommando von einem anderen Kommando verwendet werden könnte. Aber auch das lässt sich relativ einfach ermitteln (hier anhand von ping):

# rpm -qf /bin/ping
iputils-ss020927–45
# rpm -q --whatrequires iputils-ss020927–45
kein Paket verlangt iputils-ss020927–45
#

Bezüglich der Abhängigkeit der Pakete untereinander lässt sich keine pauschale Beurteilung abgeben. Hier ist entweder das Lesen der Manual-Page oder Experimentierfreudigkeit angesagt. Im Falle wo Sie paranoid ggf. SUID sind, jedoch die Anwendung nicht entfernen wollen, nehmen Sie Ihr das SUID-Bit weg.

Sofern es sich also nicht vermeiden lässt, dass Sie ein Programm mit root-Rechten ausstatten müssen, sollten Sie diese Privilegien, sofern diese nicht mehr benötigt werden, mit dem Funktionsaufruf

setuid( getuid() );

wieder abgeben.

 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern