24.02.2013 Aufrufe

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

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.

60 2 <strong>UNIX</strong><br />

dessen, der das Programm aufruft, abweichen können. E<strong>in</strong> häufiger Fall ist,<br />

daß e<strong>in</strong> Programm ausführbar für alle ist, der root gehört und bei gesetztem<br />

suid-Bit auf Files zugreifen darf, die der root vorbehalten s<strong>in</strong>d. Wohlgemerkt,<br />

nur das Programm bekommt die erweiterten Rechte, nicht der Aufrufende.<br />

Man sagt, der aus dem Programm hervorgegangene Prozess laufe<br />

effektiv mit der Benutzer-ID des Programmbesitzers, nicht wie üblich mit der<br />

des Aufrufenden. E<strong>in</strong> gesetztes Set-User-ID-Bit wird durch e<strong>in</strong> S an der Stelle<br />

des x beim Besitzer (owner) angezeigt, wenn das execute-Recht nicht gesetzt<br />

ist, durch e<strong>in</strong> s, wenn auch das execute-Recht gesetzt ist (s = S + x). Entsprechendes<br />

gilt für das Set-Group-ID-Bit bei den Zugriffsrechten der Gruppe.<br />

Ausführliche Beispiele f<strong>in</strong>den sich im Anhang auf Seite 301.<br />

Das <strong>UNIX</strong>-Kommando /b<strong>in</strong>/passwd(1) gehört der root, ist für alle<br />

ausführbar, se<strong>in</strong> suid-Bit ist gesetzt:<br />

-r-sr-xr-x 1 root b<strong>in</strong> 112640 Nov 22 /b<strong>in</strong>/passwd<br />

Damit ist es möglich, daß jeder Benutzer se<strong>in</strong> Passwort <strong>in</strong> dem File<br />

/etc/passwd(4) ändern darf, ohne die Schreiberlaubnis für dieses File zu<br />

besitzen:<br />

---r--r--r 1 root other 3107 Dec 2 /etc/passwd<br />

Da durch das Programm der Umfang der Änderungen begrenzt wird<br />

(nämlich auf die Änderung des eigenen Passwortes), erhält der Benutzer nicht<br />

die vollen Rechte des Superusers. Für das sgid-Bit gilt Entsprechendes. Beide<br />

können nur für ausführbare (kompilierte) Programme vergeben werden,<br />

nicht für Shellscripts, aus Sicherheitsgründen. Das Setzen dieser beiden Bits<br />

für Verzeichnisse führt auf unseren Anlagen zu Problemen, die Verzeichnisse<br />

s<strong>in</strong>d nicht mehr verfügbar. Wer aufgepaßt hat, könnte auf folgende Gedanken<br />

kommen:<br />

• Ich kopiere mir den Editor vi(1). Besitzer der Kopie werde ich.<br />

• Dann setze ich mittels chmod 4555 vi das suid-Bit. Das ist erlaubt.<br />

• Anschließend schenke ich mittels chown root vi me<strong>in</strong>en vi dem<br />

Superuser, warum nicht. Das ist ebenfalls erlaubt.<br />

Nun habe ich e<strong>in</strong>en von allen ausführbaren Editor, der Superuser-Rechte hat,<br />

also beispielsweise das File /etc/passwd(4) unbeschränkt verändern darf.<br />

Der Gedankengang ist zu naheliegend, als daß nicht die Väter von <strong>UNIX</strong> auch<br />

schon darauf gekommen wären. Probieren Sie es aus.<br />

Falls Sie schon Kapitel ?? Programmieren <strong>in</strong> C/C++ ab Seite ?? ver<strong>in</strong>nerlicht<br />

haben, könnten Sie weiterdenken und sich e<strong>in</strong> eigenes Kommando<br />

mychown schreiben wollen. Dazu brauchen Sie den Systemaufruf chown(2);<br />

die Inode-Liste, die den Namen des File-Besitzers enthält, ist nicht direkt<br />

mittels e<strong>in</strong>es Editors beschreibbar. Leider steht im Referenz-Handbuch, daß<br />

der Systemaufruf bei gewöhnlichen Files das suid-Bit löscht. Sie geben nicht<br />

auf und wollen sich e<strong>in</strong>en eigenen Systemaufruf chmod(2) schreiben: Das<br />

bedeutet, sich e<strong>in</strong>en eigenen <strong>UNIX</strong>-Kern zu schreiben. Im Pr<strong>in</strong>zip möglich,

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!