ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
927
927
EMPFEHLEN
-
19.11.11 17:40 #1
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!
-
19.11.11 18:11 #2
- 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 ;-)
-
19.11.11 18:14 #3
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!
-
19.11.11 18:21 #4
- 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 ;-)
-
19.11.11 18:31 #5
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!
-
19.11.11 18:51 #6
- 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 a2ensiteGrüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
...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, ...?
-
20.11.11 09:08 #8Die Schweine von heute sind unsere Schnitzel von morgen!
-
20.11.11 10:00 #9
- 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:
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 ;-)
-
21.11.11 08:54 #10
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
ManiacDie Schweine von heute sind unsere Schnitzel von morgen!
-
21.11.11 17:46 #11
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!
-
21.11.11 19:42 #12
- 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 ;-)
-
21.11.11 20:16 #13Die Schweine von heute sind unsere Schnitzel von morgen!
Ähnliche Themen
-
AJAX funktioniert nicht richtig, readysate funktion wird nicht ausgeführt
Von Biergamasda im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 27.12.08, 20:32 -
Javascript wird nicht ausgeführt
Von Zack im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 30.10.08, 20:04 -
CSS wird nicht ausgeführt
Von Zank im Forum CSSAntworten: 7Letzter Beitrag: 04.01.07, 17:14 -
SQL wird nicht ausgeführt
Von Azi im Forum PHPAntworten: 3Letzter Beitrag: 11.11.06, 13:11 -
while wird nicht ausgeführt
Von ICPUI im Forum PHPAntworten: 2Letzter Beitrag: 18.01.06, 18:06





Zitieren



Login





