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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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

20 ret = execle( "/bin/ps", "ps", "-e", "-f", NULL,<br />

21 env_vector );<br />

22 if( ret == -1 )<br />

23 printf( "execle(): %s.\n", strerror( errno ) );<br />

24<br />

25 ret = execvp( "ps", arg_vector );<br />

26 if( ret == -1 )<br />

27 printf( "execvp(): %s.\n", strerror( errno ) );<br />

28<br />

29 exit( EXIT_FAILURE );<br />

30 }<br />

Ein Testlauf von Beispiel 2.21 liefert nach der Kontrollzeile <strong>mit</strong> der eigenen<br />

Prozeß-ID erwartungsgemäß nur noch die Ausgabe von /bin/ps -ja, das ist<br />

die Ausgabe des <strong>mit</strong>tels execl() gestarteten Kommandos.<br />

$ ./exec-test<br />

Meine Prozeß-ID (PID) = 796.<br />

PID PGID SID TTY TIME CMD<br />

439 439 433 pts/0 00:00:02 nedit<br />

440 440 433 pts/0 00:00:04 ndvi<br />

796 796 459 pts/1 00:00:00 ps<br />

Der Prozeß exec-test hat bei diesem Testlauf vom System die PID 796 zugewiesen<br />

bekommen. Beim Aufruf von execl() wird das Programmabbild<br />

von exec-test durch das Programm /bin/ps ersetzt. Die Ausgabe des jetzt<br />

laufenden ps-Kommandos zeigt aber, daß sich die Prozeß-ID durch die Überlagerung<br />

nicht verändert hat.<br />

2.5.6 User- <strong>und</strong> Group-IDs wechseln<br />

Wie in Abschnitt 2.5.1 bereits erläutert, können <strong>Unix</strong>-Prozesse ihre realen <strong>und</strong><br />

effektiven User- <strong>und</strong> Group-IDs ändern. So können Programme wie passwd<br />

z. B. über das Set-User-ID Bit erweiterte Rechte erlangen, um die ihnen zugedachten<br />

Aufgaben zu erledigen. Ausschlaggebend für die tatsächlichen Rechte<br />

eines laufenden Programms sind seine effektive User- <strong>und</strong> Group-ID. Mit Hilfe<br />

der beiden Funktionen seteuid() <strong>und</strong> setegid() kann ein Prozeß seine<br />

effektive User- <strong>und</strong> Group-ID wechseln <strong>und</strong> da<strong>mit</strong> die erweiterten Rechte zu<strong>und</strong><br />

wieder abschalten.<br />

#include<br />

<br />

int seteuid( uid_t uid );<br />

int setegid( gid_t gid );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!