Hi
my $test =
/usr/bin/chsh -s /bin/false benutzer;``
Die Shell des Benutzers wird jedoch nicht geändert.
Was mache ich falsch?
Wenn Suid gesetzt ist, wird Perl mit Taint-Checks ausgeführt - ein Merkmal von Perl, welches sicheres Programmieren unterstützt. Das Programm muss speziell dafür geschrieben/angepasst werden. Leider hast du überhaupt keine Fehlerbehandlung eingebaut und auch die Meldungen im Webserverlog ignoriert, das hätte schon deutliche Hinweise auf die Problematik gegeben.
wie kann ich bei befehl
ein Fehler abfangen? Im error Log des Apachen hatte ich auch nichts aussergewöhnliches entdeckt.
Als ich das jedoch von der Konsole aus probiert hatte, wurde mir ein Fehler ausgegeben. Icdh sei nicht b erechtigt die Shell zu ändern.
Sollte/Muss ich noch auf etwas anderes achten?
Suid ist ein Hack. Der C-Wrapper verschiebt das Problem auf eine höhere Abstraktionsebene, ist also ein Hack auf einem Hack. Es entspricht nicht der guten Praxis, die Komplexität zu erhöhen, wenn es um sicherheitsrelevante Programme geht.Die korrekte Lösung benutzt Entkopplung vom Web, somit wird auch das Thema Suid/Taint am Webserver hinfällig. Statt einem Programm, das alles macht, spalte die Funktionalität auf, so dass jede Komponente genau eine Sache macht:
- Ein Webprogramm, das Anfragen zur Shell-Änderung entgegennimmt und in eine Warteschlange einreiht.
- Die Jobwarteschlange. Dies kann auch einfacherweise eine dumme Datei sein, wenn du korrektes Locking beherrschst.
- Ein Systemprogramm, das aus der Warteschlange liest und die Shell-Änderung ausführt. Dieses kann dann mit normalen Root-Rechten laufen, wahlweise als Daemon oder regelmäßig (Cron).
welches von den etlichen job+queue meinst Du genau. Wiue das genau ablaufen soll, habe ich leider nicht ganz verstanden.
Garniere mit Fehlerbehandlung und Logging. Es gibt für alles Module.
wie sollte man logging mit einer Logklasse über mehrere Klassen realisieren?
Muss/Sollte man immer das Object übergeben?
Janine