(PHP) Shellscript / Rechte / Einwahl
Walter
- webserver
0 Christian Seiler0 Walter
Hallo,
mein Problem ist folgendes:
Ich würde gerne über meinen Apache (auf Suse-Linux) eine
Oberfläche basteln, mit der ich einige Befehle steuern kann.
Ich möchte das ganze über PHP/Perl bzw. shellscripte
realisieren.
Bei den meisten Sachen funktioniert das auch ganz gut, aber wenn
ich mich z.B. an die Ein und Auswahl des Servers machen will,
dann streikt er.
In diesem Fall möchte ich z.B. 'cinternet' aufrufen.
PHP hängt, ohne das ich eine Fehlermeldung zurückbekomme.
Ich vermute, dass es an der Rechtevergabe liegt, aber alles
sollte eigentlich Lese- und Ausführrechte für 'other' haben.
Hat jemand einen Tipp, wie ich das realisieren kann, bzw.
was ich übersehen habe?
bis dann,
Walter
Hallo Walter,
Hat jemand einen Tipp, wie ich das realisieren kann, bzw.
was ich übersehen habe?
Hat das Programm cinternet unter dem Benutzer, unter dem der Webserver läuft, genügend Rechte, das zu tun? Ist das Programm als setuid installiert? Was steht im error log?
Grüße,
Christian
Hallo,
Hat jemand einen Tipp, wie ich das realisieren kann, bzw.
was ich übersehen habe?Hat das Programm cinternet unter dem Benutzer, unter dem der Webserver läuft, genügend Rechte, das zu tun? Ist das Programm als setuid installiert? Was steht im error log?
Es geht :-) Der entscheidene Hinweis war 'setuid'! Danke!
Ich glaube ich habe meinen Denkfehler erkannt.
'cinternet' gehört 'root' und andere dürfen es ausführen,
aber da es wahrscheinlich noch andere Programme verwendetet
oder auf andere Scripte zugreift, die wahrscheinlich eine
root-Berechtigung bedürfen hat es nicht geklappt!
Da es jetzt aber mit setuid als root ausgeführt wird klappt es! :-)
Jedenfalls reime ich mir das als Anfänger so zusammen!
Muß ich eigentlich noch auf was bestimmtes achten wenn ich 'setuid'
benutze?
Denn wenn ich da mit 'root' rumhantiere, dann kann das doch auch
nach hinten losgehen?
bis dann,
Walter
Hallo Walter,
Muß ich eigentlich noch auf was bestimmtes achten wenn ich 'setuid'
benutze?
Denn wenn ich da mit 'root' rumhantiere, dann kann das doch auch
nach hinten losgehen?
Ja. Denn wenn eine Sicherheitslücke in irgendeinem Programm, das setuid root ist, vorhanden ist, dann kann diese ausgenutzt werden, um root-Rechte zu erlangen. Wenn das Programm keine Sicherheitslücken hat und auch keine Einstellungen, bei denen normale Benutzer mehr Rechte als sonst bekommen können - dann ist es sicher. Aber 'keine Sicherheitslücken' ist eine Utopie - das gibt's nur bei Hello World & co. Daher immer achtsam sein, gerade, was Sicherheitsupdates zu cinternet, pppd u.ä. angeht.
Grüße,
Christian
Hallo,
Ja. Denn wenn eine Sicherheitslücke in irgendeinem Programm, das setuid root ist, vorhanden ist, dann kann diese ausgenutzt werden, um root-Rechte zu erlangen. Wenn das Programm keine Sicherheitslücken hat und auch keine Einstellungen, bei denen normale Benutzer mehr Rechte als sonst bekommen können - dann ist es sicher. Aber 'keine Sicherheitslücken' ist eine Utopie - das gibt's nur bei Hello World & co. Daher immer achtsam sein, gerade, was Sicherheitsupdates zu cinternet, pppd u.ä. angeht.
Ich habe noch eine Nachfrage. Ich habe mir folgendes überlegt:
Wenn ich 'setuid' bei cinternet mache, dann hat man ja vollen
Zugriff auf alle Parameter.
Deshalb habe ich mir ein Script geschrieben, das nichts weiter
macht als 'cinternet -start' aufzurufen.
Diesem Script habe ich die gleichen Rechte wie cinternet gegeben
und das 'setuid'-Flag bei 'cinternet' entfernt und bei meinem
Script hinzugefügt. Meine Überlegung war, dass cinternet jetzt
ja auch als root ausgeführt wird, aber eben nur mit diesem einen
Parameter.
Dies wäre nämlich auch für andere Anwendungsfälle nützlich.
Aber komischerweise funktioniert dies nicht. Habe ich da wieder
einen Denkfehler?
bis dann,
Walter
Hallo Walter,
Aber komischerweise funktioniert dies nicht. Habe ich da wieder
einen Denkfehler?
Ein Programm, das setuid root ist, bekommt nur root-Rechte, wenn es auch die Systemfunktion setuid() aufruft. Es gibt bei Scripten AFAIK nicht die Möglichkeit, dies zu tun, bei Perl vielleicht, aber bei PHP und bash AFAIK nicht. Außerdem müsstest Du dann Dein Script komplett absichern - also überlegen, wie ein Angreifer denn vorgehen _könnte_. Aber prinzipiell ist so ein Wrapper natürlich eine gute Idee. Am besten wäre, der wäre in C programmiert, würde keine Eingaben erlauben, und würde selbst (*nicht* per system() sondern per exec(), da system bei setuid Sicherheitslücken hat und Du ja das Programm sowieso ersetzen willst) einfach cinternet -start aufrufen - nichts anderes. Das wäre (fast) bombensicher.
Grüße,
Christian
Hallo,
Ein Programm, das setuid root ist, bekommt nur root-Rechte, wenn es auch die Systemfunktion setuid() aufruft. Es gibt bei Scripten AFAIK nicht die Möglichkeit, dies zu tun, bei Perl vielleicht, aber bei PHP und bash AFAIK nicht. Außerdem müsstest Du dann Dein Script komplett absichern - also überlegen, wie ein Angreifer denn vorgehen _könnte_. Aber prinzipiell ist so ein Wrapper natürlich eine gute Idee. Am besten wäre, der wäre in C programmiert, würde keine Eingaben erlauben, und würde selbst (*nicht* per system() sondern per exec(), da system bei setuid Sicherheitslücken hat und Du ja das Programm sowieso ersetzen willst) einfach cinternet -start aufrufen - nichts anderes. Das wäre (fast) bombensicher.
Danke! Jetzt habe ich erstmal einen Überblick was so
möglich ist und was nicht. Ich werde mich wohl noch ein wenig
mit dem Thema beschäftigen!
bis dann,
Walter