05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

20 2 Programmieren <strong>mit</strong> <strong>Unix</strong>-Prozessen<br />

printf()-Ausgabe wurde zwar bearbeitet, d. h. die Zeichenkette wurde durch<br />

printf() in einen internen Puffer übertragen, die Ausgabe hat aber das Terminal<br />

nicht erreicht.<br />

Die Verwendung der Funktion _exit() scheint auf den ersten Blick also nicht<br />

sehr sinnvoll für ein reguläres Programmende zu sein. Im weiteren Verlauf dieses<br />

Buchs werden wir jedoch auf Fälle stoßen, in denen der Schnellausstieg“<br />

”<br />

<strong>mit</strong>tels _exit() gewünscht oder sogar dringend erforderlich ist.<br />

2.1.6 User- <strong>und</strong> Gruppen-ID<br />

Mit jedem Prozeß sind unter <strong>Unix</strong> drei User-IDs (UID) <strong>und</strong> drei (oder mehr)<br />

Group-IDs (GID) zugeordnet:<br />

• Die reale User-ID <strong>und</strong> die reale Group-ID geben darüber Auskunft, wer wir<br />

wirklich sind. Diese beiden IDs werden dem Prozeß beim Start vom System<br />

<strong>mit</strong>gegeben <strong>und</strong> entsprechen immer der UID bzw. GID des aufrufenden<br />

Benutzers.<br />

• Die effektive User-ID, dieeffektive Group-ID <strong>und</strong> die zusätzlichen Group-<br />

IDs werden bei der Bestimmung der Zugriffsrechte herangezogen. Sie legen<br />

beispielsweise fest, ob ein Prozeß auf eine bestimmte Datei zugreifen darf<br />

oder ob ein Prozeß berechtigt ist, ein Signal für einen anderen Prozeß zu<br />

generieren. Die beiden IDs werden beim Programmstart entsprechend den<br />

Dateiattributen des gestarteten Programms gesetzt.<br />

• In der saved Set-User-ID <strong>und</strong> der saved Set-Group-ID werden Kopien der<br />

beim Programmaufruf gesetzten effektiven User-ID <strong>und</strong> effektiven Group-<br />

ID hinterlegt. Ein Prozeß kann seine effektive User-ID durch spezielle Systemaufrufe<br />

jederzeit zwischen der realen User-ID <strong>und</strong> der saved Set-User-<br />

ID hin- <strong>und</strong> her schalten. Gleiches gilt für ein Umschalten der effektiven<br />

Group-ID zwischen der realen Group-ID <strong>und</strong> der saved Set-Group-ID.<br />

Unter normalen Umständen entspricht die reale User-ID der effektiven User-<br />

ID <strong>und</strong> die reale Group-ID ist gleich der effektiven Group-ID. Mit anderen<br />

Worten erhält ein Programm, das von einem Anwender gestartet wird, dessen<br />

UID <strong>und</strong> GID als reale User-ID <strong>und</strong> reale Group-ID zugewiesen. Da<strong>mit</strong> der<br />

Prozeß genau die gleichen Zugriffsrechte wie der Anwender besitzt, werden<br />

dem Prozeß in seiner effektiven User-ID <strong>und</strong> seiner effektiven Group-ID vom<br />

System ebenfalls die gleichen Werte gesetzt.<br />

<strong>Unix</strong> bietet aber auch die Möglichkeit, einem Prozeß mehr (oder andere) Rechte<br />

zuzuweisen, als dem Anwender des Programms an sich im System zustehen.<br />

Das passwd-Kommando ist hier ein geläufiges Beispiel: Ein Anwender<br />

soll <strong>mit</strong> dem passwd-Kommando sein Benutzerpaßwort ändern können. Das<br />

neue Paßwort muß dazu allerdings in eine Datei eingetragen werden, auf die

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!