pi mit raspberry-remote und schalten per PHP

  • Hallo Forum

    Ich bin nun seit ein paar Wochen Mitglied und habe hier schon viel gelernt, vielen Dank dafür.
    Für die ersten Beiträge hat es nur wenig gereicht, da ich noch am Wissen aufbauen bin.
    Ich habe ursprünglich mal E-Technik studiert und arbeite in der EDV, die Grundlagen sind also ausreichend vorhanden, allerdings arbeiten wir sehr Microsoft lastig, was meinen eklatanten Wissensmangel in Sachen Linux erklärt.

    Ich habe mir das Tutorial Funksteckdosen vorgenommen. Die Dose schaltet auch ein und aus, wie gewollt, allerdings nur über putty.
    Das NETIO Konzept gefällt mir nicht so, da ich die Funktionen in eine Webseite mit anderen Funktionen einbinden möchte, würde ich gern direkt aus PHP schalten.

    Ich habe nun einmal das folgende Konzept verfolgt, ohne Erfolg.

    http://voodoocode.de/voodoocode-the…rry-pi-steuern/

    Ich habe mir im Script einige Ausgaben gebaut, auch in der Form

    Code
    if($output .=  shell_exec('sudo ~/raspberry-remote/send '. 11111 1 1)); print "ausgabe erfolgt!";
    else print "kene Ausgabe";

    Ich habe viel gesucht, schätze mal zwischen 20 und 30h, aber leider tutes nicht.
    Ich habe dem WWW-data User Rechte auf das rasberry-remote Verzeichnis gegeben und die Datai ausführbar gemacht.
    Ich habe den Befehl auch in ein Shell Script gepackt und das versucht aufzurufen, auch leider ohne Erfolg.
    Da meine Linux Kenntnisse wirklich mager sind, fehlt mir auch das Wissen das zu Analysieren, dabei hoffe ich hier auf Hilfe.

    Später soll an den Pi noch ein KNX Bus kommen und die Visualisierung darüber erfolge.

    Vielen Dank für die Hilfe.
    Andreas

  • das

    Code
    sudo ~/raspberry-remote/send


    kann nicht funktionieren.
    ~/ ist ein Kürzel für das Homeverzeichnis eines Users. Du hast 'send' als User pi erstellt, es liegt also unter /home/pi/raspberry-remote Das Homeverzeichnis von www-data ist normal /var/www, Dein Script sucht also in /var/www/raspberry-remote nach send.
    Da ist es aber nicht.

    Lösung:

    Kopier send nach /usr/local/bin
    Setz die Berechtigungen passend : sudo chmod 755 send
    Ändere den Besitzer auf root : sudo chown root send
    Setz das s-Bit bei send : sudo chmod u+s send

    Jetzt kann jeder Benutzer send ausführen ohne irgendwelche Krämpfe mit sudo.

    Dein Aufruf sollte dann so aussehen:

    Code
    if($output .=  shell_exec('/usr/local/bin/send '. 11111 1 1)); print "ausgabe erfolgt!";

  • Hallo Forum


    Ich habe mir im Script einige Ausgaben gebaut, auch in der Form

    Code
    if($output .=  shell_exec('sudo ~/raspberry-remote/send '. 11111 1 1)); print "ausgabe erfolgt!";
    else print "kene Ausgabe";

    Ich habe viel gesucht, schätze mal zwischen 20 und 30h, aber leider tutes nicht.
    Ich habe dem WWW-data User Rechte auf das rasberry-remote Verzeichnis gegeben und die Datai ausführbar gemacht.
    Ich habe den Befehl auch in ein Shell Script gepackt und das versucht aufzurufen, auch leider ohne Erfolg.
    Da meine Linux Kenntnisse wirklich mager sind, fehlt mir auch das Wissen das zu Analysieren, dabei hoffe ich hier auf Hilfe.

    Später soll an den Pi noch ein KNX Bus kommen und die Visualisierung darüber erfolge.

    Erst mal lesbaren Code erzeugen.


    macht das lesen einfacher, auch die Fehlerbehebung.


    Dann läuft der Webserver unter dem User www-data.
    Wenn www-data ein sudo machen soll muß www-data in den sudoers stehen.
    Wobei es eine besonders schlechte Idee ist www-data irgendwelche Rechte zu geben.

    Dann erfolgt der Aufruf des Script nach (~/raspberry-remote/send....) = /home/www-data/raspberry-remote/send....
    Hier Absolute Pfade nehmen wo ww-data auch Zugriff hat, z.B sudo /home/pi/raspberry-remote......

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Ich höre immer, dass das eine schlechte Idee ist, das www-data mit Root-Rechten läuft.
    Auch leuchtet mir es ein; wenn der Webserver übernommen/gehackt wird, lassen sich direkt Befehle als Root absetzen.

    ABER: Reden wir hier von einem existenten, greifbaren Risiko? Wenn ich meinen Raspberry zu Hause betreibe, und - meinetwegen - auch einen Port von Extern auf den HTTP-Port vom Raspi genattet habe, kommt man natürlich von überall drauf.

    Wie oft sind den aber bisher kritische Lücken in Apache2 aufgetreten, die bei Klaus X in Boxdehude angewandt wurden?

  • Das wird interessant, sobald man fertige, weitverbreitete Scripts benutzt (Foren, Blogs, CMS ... WordPress ist da öfter mal aufgefallen) und von einem automatischen Scanner gefunden wird. Den Scan-Progs ist es egal, wem der Server gehört und ob es ein Pi oder ein Hochleistungsrechner, die Lücke wird automatisiert genutzt und je mehr Rechte dann zur Verfügung stehen desto besser kann sich der Bot verstecken.
    Hängt mal einen Pi ins Netz und seht Euch die Apache-Logs an.

  • Also zunächstmal würde ich anstatt shell_exec(); lieber exec(); nutzen, zum Beispiel:

    ..En Fremder wird kaum in der Lage sein über den apache2 herrauszufinden was im sudowebscript.sh für Befehle hinterlegt sind, so könntest du zB auch im bash Script "reb00tpi" eintragen usw

  • Hallo

    erstmal vielen Dank für die schnelle Antworten.
    Bin gerade in den Hochzeitsvorbereitungen, da bleibt für die Basteleien nur der späte Abend.

    Hab nun mal die Lösung von Orb ausgewählt. Das Sicherheitsthema ist bei mir nicht so schlimm, im Internet veröffentlichen werde ich das Teil nicht, egal wie sicher, wenn dann nur über VPN.
    Soll ja nachher auch mal meine Heizung steuern.

    Und das Wichtigste, es funktioniert.
    Hatte allerdings noch ein paar Fehlerchen in den Aufrufen, somit habe ich das PHP Script vom Imperator genutzt, das tut.

    Vielen Dank
    Andreas

  • Wie oft sind den aber bisher kritische Lücken in Apache2 aufgetreten, die bei Klaus X in Boxdehude angewandt wurden?

    Da braucht es keine Lücke im Apachen.
    Ein Selbstgeschriebenes PHP Script reicht wo sowas drin vorkommt :

    Code
    echo "Dein Name " . $_POST["name"] . "</br>";

    Und schon gebe ich in die Input Box der Webseite folgendes ein :

    Code
    Der_Imperator";exec('rm -rf /');

    Und das war es mit deinem Webserver...

    Die Lücken in selber geschriebener Software sind die übelsten.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Hm aber wieso versteh ich immer noch nicht :huh: :s

    [code=php]echo "Dein Name " . $_POST["name"] . "</br>";[/php]

    [code=php]Der_Imperator";exec('sudo rm -rf /');[/php]

    eingesetzt wäre das dann:

    [code=php]echo "Dein Name " . Der_Imperator";exec('sudo rm -rf /'); . "</br>";[/php]

    Nun erneut die Frage: Wieso würde das den exec Befehl ausführen? Wäre der PHP Code dann nicht fehlerhaft?


    ( mal davon abgesehen das " rm " dann über die /etc/sudoers freigegeben sein müsste :-/ )

  • Der Code währe fehlerhaft, aber erst nach dem exec. Nach der Ausführung wird abegebrochen, aber dann ist es zu spät. Mach Dir nicht zuviele Gedanken über dieses Beispiel, es soll nur das Prinzip zeigen. Wenn Du als Eingabe

    Code
    Der_Imperator";exec('rm -rf /');echo


    nimmst läuft der Code durch.

    Der übliche Rat in anderen Foren und Tutorials ist es, einfach die Zeile für root in den sudoers zu kopieren und root durch www-data zu ersetzen. Damit darf www-data dann alles.

    sudo ist eine Krücke bei der man viel falsch machen kann und das Debiankonzept den root-Zugang komplett durch sudo zu ersetzen halte ich für gefährlich.
    Beim Suid-Bit kann man nicht soviel falsch machen und man ist gezwungen sich Gedanken zu machen was der User wirklich dürfen soll.

  • Ja, genau.
    Es war ein Beispiel, wenn auch fehlerhafter Code erzeugt wird.
    Nicht ohne Grund läuft der Apache unter einem eingeschränkten User.
    Ein Script was mehr Rechte braucht wird bei mir erst gar nicht genutzt, jedenfalls nicht wenn der Service im Internet freigegeben ist,
    Im LAN könnte man so was machen.

    Generell sollte man genau Wissen was man macht und wo die Gefahren liegen wenn man einen Port zum Internet hin frei gibt.
    Zu schnell steht man da mit Hose runter.

    Und es ist ja so das nicht etwas kaputt gemacht wird ( rm -rf ).
    Ich würde z.B. anstelle von rm Code einschleusen welcher per WGET einen Dirwalk ins www kopiert und mich dann erst mal in aller Ruhe auf dem PI umsehen.
    Dann kann man noch eine Shell welche unter PHP läuft kopieren, und schon bist du Teil eines Botnetz.
    Ganz übel ist es wenn UPNP noch auf dem Router läuft, dann kann ich sogar noch Ports öffen die ich brauche....

    Muß nicht passieren, kann aber.
    Das Internet ist Böse ;)

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!