Hallo Dennis, Dennis Stosberg schrieb:
SUID-root Skripte sind eine schlechte Idee. Erstens funktioniert das auf vielen Systemen nicht, zweitens birgt es Gefahren. Stell dir vor, dein Benutzer ändert vor der Ausführung des SUID-root-Skriptes seinen $PATH. Dann kann er z.B. ein selbstgeschriebenes Programm/Skript namens "useradd" ausführen.
Ok, nun könnte einen ja der Ehrgeiz packen und man setzt in dem suid-Script die PATH-Variable, auch IFS, benutzt nur absolute Pfadnamen, prüft Eingaben auf unerlaubte Zeichen usw. Auch in anderen Programmiersprachen muss man sein Programm immer schön bullet-proofed halten. In http://www.samag.com/documents/s=1149/sam0106a/0106a.htm wird aber darauf hingewiesen, dass das alles bei suid-shell-Scripten nichts nützt, weil eine race-condition möglich ist wenn der Angreifer einen sym. Link auf das Script erzeugt und dann den sym. Link aufruft. Beim Starten des Scripts wird vom System erst eine neue Shell gestartet, die Shell liest dann das Script ein. Verlangsamt ein Angreifer das System, kann er just zwischen Starten des neuen Prozesses und einlesen des Scriptes den sym. Link löschen und ein Script plazieren, welches ihm eine root-Shell öffnet. Bei Solaris sei das nicht möglich, da dem vom System gestarteten Prozess nicht der Dateiname sondern ein file handle auf das Script übergeben werde. Wie ist denn das bei Linux? Ist diese Info veraltet oder besteht diese Lücke immer noch? Wenn nicht, gibt es weitere Gründe gegen suid-root-Scripten? Gruß christian