tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
927
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Nabend,

    Ich hab grad ein komisches Phänomen,ich möchte mit PHP und der Funktion "shell_exec()" den Befehl auf einem Debian-Webserver ausführen, was aber nicht klappt. Wenn ich es auf der Konsole per Hand ausführe, klappt es serwohl....

    Als ausgabe erhalte ich:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    Array
    (
        [0] => 
        [1] => 
        [2] => sh: a2ensite: command not found
        [3] => mkdir: cannot create directory `/var/www/martina/sdasdasd': No such file or directory
        [4] => 
    )

    Auf das [3] bitte nicht achten, ich hab die extra mit reingenommen, damit man sieht das die Meldungen ausgegeben werden.
    Braucht man für root-rechte?
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.519
    Das kommt darauf an. Ich kenne das a2ensite nicht, aber liegt es evtl. in /sbin oder /usr/sbin? Hast du es schon mal mit dem absoluten Pfad zur ausführbaren Binary probiert?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Das ist ein tool um dem apachen die Virtuellen Hosts zu enablen (sites-available -> sites-enabled).
    Ich habe es gerade getestet mit einem Standard-User, da funktioniert es auf der Konsole auch nicht.
    Hab gelesen das es mit sudo möglich sein soll, root-rechte zu erlangen. Werde mal sehen ob ich das nachträglich noch so installieren und konfigurieren kann. Bin noch nicht so fit in sachen Unix.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.519
    Du könntest das mit sudo machen, aber bedenke: Gib dem Benutzer immer nur so viele Rechte, wie er wirklich braucht. Du müsstest in die /etc/sudoers eine Zeile einfügen, die ungefähr so aussieht:

    Code :
    1
    
    www     ALL=(root) NOPASSWD: /usr/sbin/a2ensite

    www ist der Benutzer, der es ausführen soll. Dann wäre natürlich noch der Pfad zum ausführbaren Binary. Die NOPASSWD-Direktive solltest du einfügen, denn sudo verlangt bei Eingabe von bspw.

    Code :
    1
    
    sudo /usr/sbin/a2ensite

    Das Passwort von Benutzer "www", wenn du mit dem eingeloggt bist. Im übrigen muss man auch mit der NOPASSWD-Direktive mindestens einmal den Befehl als Benutzer www ausführen und das Passwort eingeben. sudo merkt sich das dann.

    Wenn Fragen - fragen
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Von den rechten her wäre es kein Problem, ist nur hier in meinem kleinen Netzwerk und is von aussen nicht erreichbar. Ich glaub ich hab die rechte eh falsch eingestellt.
    Das gehört aber dann doch eher ins Unix-Forum.

    @Mod -> bitte verschieben

    @saftmeister:

    Ich hab mir mit meinem gefährlichen halbwissen ein Debian-Squeeze aufgesetzt und den Zend-Server CE installiert. Das alles natürlich als Benutzer "root". Dann noch Samba um mit Windows drauf zugreifen zu können. Jetzt denk ich das alles die falschen Rechte haben:
    Wie müsste ich das umkonfigurieren damit es richtig ist?
    Verzeichnise:
    </var/www/> root:users
    </var/www/benutzer1/> root:users
    und das setzt sich dann immer weiter Rekursiv bis in den letzen Ordner.

    Benutzer hab ich für den apachen auch nicht, der läuft unter root.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.519
    Wenn der Apache als root läuft, werden auch die PHP-Scripts als root ausgeführt. Das ist grundätzlich nicht sehr zu empfehlen, immer einen dedizierten Benutzer für den Indianer erstellen.

    Das erklärt aber den Fehler überhaupt nicht. Zumindest sollte das Binary dann ausgeführt werden können. Versuch mal den kompletten Pfad zur Binary. Den findest du mit

    Code bash:
    1
    
    which a2ensite
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    ...und verschoben.

    Kleiner Tipp am Rande:
    Ein Verschiebewunsch, der so im Beitrag "versteckt" ist, wird leicht übersehen.
    Wenn man meint, dass das der Fall ist (oder auch gleich von Anfang an),
    kann man auch den Melden-Button dafür nehmen.
    So wirds sicher gesehen.

    Gruß
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  8. #8
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Zitat Zitat von saftmeister Beitrag anzeigen
    Wenn der Apache als root läuft, werden auch die PHP-Scripts als root ausgeführt. Das ist grundätzlich nicht sehr zu empfehlen, immer einen dedizierten Benutzer für den Indianer erstellen.

    Das erklärt aber den Fehler überhaupt nicht. Zumindest sollte das Binary dann ausgeführt werden können. Versuch mal den kompletten Pfad zur Binary. Den findest du mit

    Code bash:
    1
    
    which a2ensite
    Code :
    1
    
    /usr/sbin/a2ensite
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  9. #9
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.519
    Und wenn du das an shell_exec() übergibst? Evtl. wäre es nicht verkehrt, mal die Rückgabe abzufangen:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    $out = exec('/usr/sbin/a2ensite', $out_array, $ret_val);
    if($ret_val)
    {
      echo "<pre>";
      var_dump($out_array);
      echo "</pre>";
    }
    else
    {
      echo $out;
    }

    Falls du da noch irgendwelche Parameter an a2ensite übergeben musst, müssten die halt noch in den Command-String eingebaut werden.

    Zu den Rechten:

    Normalerweise erstellt man einen nicht-privilegierten Benutzer (also non-root) für den Apachen. Vielen verwenden als Benutzernamen "www" oder dergleichen. Außerdem ist es sinnvoll, eine Gruppe dafür zu erzeugen, und den Benutzer der Gruppe hinzuzufügen:

    Code bash:
    1
    2
    
    groupadd wwwdata
    useradd -g wwwdata -d /var/www -s /bin/false -c "Apache User" -k /dev/null www

    Erklärung:

    groupadd erstellt eine neue Gruppe. Es gibt da diverse Parameter, die man übergeben könnte. Im Normalfall benötigt man keine. Du kannst sehen, was es für Parameter gibt, wenn du [befehl] --help eingibst oder man [befehl].

    useradd erstellt wie der Name vermuten lässt einen neuen Benutzer. -g [gruppenname] steuert die Haupt-Gruppen-Zugehörigkeit des neuen Benutzers. Ein Benutzer kann mehreren Gruppen angehören. In einigen Fällen ist das sinnvoll, hier jedoch nicht.
    -d steuert das Home-Verzeichnis des Benutzers, /var/www ist sinnvoll, es macht keinen Sinn ein Home-Verzeichnis in /home/[benutzername] anzulegen, wenn es sich um ein Dienst-Konto handelt. Sollte das Homeverzeichnis noch nicht existieren, kann man es mit Parameter -m anlegen lassen. Die Rechte für das Verzeichnis würden gleich korrekt auf den Benutzer und seine Hauptgruppe eingestellt. Bei dir existiert das Verzeichnis bereits, also müssen die Rechte nachträglich korrigiert werden (kommt später).
    Der Parameter -s stellt die Login-Shell ein. Da es sich um ein Dienst-Konto handelt stellen wir die Shell auf /bin/false, und deaktivieren somit den Login für das Konto. Solltest du wirklich eine Shell für den Benutzer www brauchen, kannst du das mit dem Befehl "su - www" erledigen, wenn du als root eingeloggt bist.
    -c schreibt nur einen Kommentar in /etc/passwd für den Benutzer, nichts tragisches, nur für Protokollierungszwecke.
    -k definiert das sog. Skeleton-Verzeichnis. Wenn das Home-Verzeichnis erzeugt werden soll (Parameter -m), wird eine Kopie des Standard-Skeleton-Verzeichnisses erzeugt, welches normalerweise /etc/skel ist. Das bedeutet, das bereits nach dem Anlegen eines Benutzers er schon gewisse Einstellungen in Form von Konfigurationsdateien (Desktop-Settings, Sound-Einstellungen und dergleichen) in seinem Home-Verzeichnis angelegt wird. Das hat den Vorteil, das man die Standard-Einstellungen mit vorkonfigurierten Settings überschreiben kann. Der neue Benutzer kann diese Einstellungen dann wiederum an seine Bedürfnisse anpassen. Es handelt sich um ein Dienst-Konto und benötigt keine besonderen Einstellungen, außerdem ist ein Login ohnehin nicht möglich, also verwenden wir zum Anlegen kein Skeleton-Verzeichnis.


    Wenn du die Gruppe und den Benutzer angelegt hast, solltest du die Rechte an den Pfaden korrigieren. Das machst du am besten mit chown (Change-Owner) und funktioniert so:

    Code bash:
    1
    
    chown -R www:wwwdata /var/www

    Der Parameter -R bedeutet hier "mach es rekursiv". www ist der Benutzer der den neuen Eigentümer darstellt, wwwdata die Gruppe. Man könnt die Gruppe weglassen, nicht aber den Eigentümer. Willst du nur die Gruppe ändern, verwende den Befehl "chgrp". /var/www ist dann natürlich der Pfad.

    ACHTUNG! Man kann nur als Eigentümer oder Benutzer "root" den Eigentümer eines Verzeichnisses ändern. Im Falle von "Ordner gehört nicht-privilegierten Benutzer, soll nun aber root gehören" kann dies nur root erledigen.
    Geändert von saftmeister (20.11.11 um 12:37 Uhr) Grund: Irgendwie hat im Befehl useradd noch der User gefehlt
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  10. #10
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Das nenn ich mal eine ausführliche Erklärung, vielen Dank erstmal. Ein bissl Unix is mir schon bekannt, wie deine Befehle useradd, chown -R, chgrp.... nur die kleinen Parameter kannte ich noch nicht wirklich.
    Ich werde das heut Abend mal in Angriff nehmen und mich dann nochmal melden alls es noch eine Frage meinerseits gibt.

    Nochmals vielen Dank

    beste Grüße
    Maniac
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  11. #11
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Nabend, jetzt bin ich ein wenig verwirrt, so wie du es erklärst klingt es plausiebel, jedoch mecker useradd wenn ich diesen Befehl ausführe:
    Code bash:
    1
    2
    
    root@server:~# useradd -g www-data -d /var/www -s /bin/false -c "Apache User" -k /dev/null www
    useradd: -k ist nur zusammen mit -m erlaubt.

    Shell_exec() hat funktioniert mit dem Aufruf:
    PHP-Code:
    shell_exec('/usr/sbin/a2ensite'); 
    Geändert von Maniac (21.11.11 um 17:49 Uhr)
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  12. #12
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.519
    Die Ausgabe von useradd ist korrekt. Du kannst das -k /dev/null weg lassen, wenn du -m nicht angibst. Denn nur -m legt das Home-Verzeichnis an, ansonsten ist die Angabe von -k hinfällig, da das Skeleton-Directory nicht benötigt wird. Ich wollte es nur anmerken, denn es ist so, dass wenn das Home-Verzeichnis bei useradd angelegt werden soll, automatisch /etc/skel als Skeleton-Verzeichnis verwendet wird, was bei einem Dienst-Konto nicht benötigt - im Zweifelsfall sogar zu fehlerhaftem Verhalten führt.

    Das mit dem kompletten Pfad hab ich schon geahnt, wenn du jetzt noch deinen Apache als non-root hinbekommst (httpd.conf beinhaltet den Dienst-User), müsstest du also wieder auf sudo zurück greifen.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  13. #13
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Zitat Zitat von saftmeister Beitrag anzeigen
    Das mit dem kompletten Pfad hab ich schon geahnt, wenn du jetzt noch deinen Apache als non-root hinbekommst (httpd.conf beinhaltet den Dienst-User), müsstest du also wieder auf sudo zurück greifen.
    Danke Meister, hat alles super geklappt!
    Hab noch die Samba-Konfiguration angepasst auf die richtige Gruppe und es läuft alles, du bist halt ein Gott *gg*

    Möge der Saft mit Dir sein!
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 27.12.08, 20:32
  2. Javascript wird nicht ausgeführt
    Von Zack im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 30.10.08, 20:04
  3. CSS wird nicht ausgeführt
    Von Zank im Forum CSS
    Antworten: 7
    Letzter Beitrag: 04.01.07, 17:14
  4. SQL wird nicht ausgeführt
    Von Azi im Forum PHP
    Antworten: 3
    Letzter Beitrag: 11.11.06, 13:11
  5. while wird nicht ausgeführt
    Von ICPUI im Forum PHP
    Antworten: 2
    Letzter Beitrag: 18.01.06, 18:06