PHP - shell_exec problem

DjCueZoomz

New Member
Heyho,

habe ein mini ACP für einen Spielerserver erstellt. Funktioniert soweit auch ganz gut jedoch habe ich ein problem, der spieleserver erstellt sobald er angeschaltet ist dateien die er abfragen muss ( Spielerdateien ) diese werden da das panel ja übers web bedient und der server von www-data gestartet wird auch von diesem Nutzer (www-data) erstellt. Ich möchte es jetzt aber gerne so machen das der Server und somit auch die Dateien über den user team gestartet werden. Ist das möglich? Und wenn ja... wie?

Sorry für meine etwas umständliche erklärung.. hier nochmal vereinfacht

Ich klicke im ACP "Server Starten" und der Server wird unter dem Benutzer Namen "www-data" gestartet. Ich möchte aber das der Server übder den Nutzer "Team" gestartet wird.

Ich habe Debian 6.0.
ICh bedanke mich im Vorraus für eure Hilfe :)

MFG
Niklas
 
Danke,

auf die Idee mit Sudo bin ich selbst auch schon gekommen und habe mal folgenden befehl in die shell gehämmert ( welcher genauso durch das php Script gegeben wird)

Code:
^Ctita:~# su www-data
\h:\w$ sudo -u team -s /home/**************/samp03/start.sh start
[sudo] password for www-data:

So da jetzt aber das Panel failt weiss ich ja auch warum er verlangt das pw. von www-data.. wie unterbinde ich diese passwort abfrage oder wie baue ich sie mit ins php script ein?
 
Okay habe jetzt auch gegooglet und so sieht meine sudoers nun aus:

Code:
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults	env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root	ALL=(ALL) ALL

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
%www-data ALL=NOPASSWD: /home/mp-community/samp/reallife/samp03/start.sh start

#
#includedir /etc/sudoers.d

Allerdings funktioniert es immernoch nicht :( was mach ich also falsch?
 
Du kannst prinzipiell auch das mpm-itk Modul nutzen, um den Apache Prozess als ein anderer Benutzer auszuführen. Das sollte sämtliche ausgeführten Scripts beinhalten.

1. Einfach installieren (Debian):
Code:
apt-get install apache2-mpm-itk

2. Den verwendeten virtual Host anpassen:
<VirtualHost *:80>
ServerName www.deineseite.de
DocumentRoot /home/deinBenutzer

Code:
[B]<IfModule mpm_itk_module>
        AssignUserID deinBenutzer deineGruppe
</IfModule>[/B]

</VirtualHost>

3. Service neu starten:
Code:
/etc/init.d/apache2 restart

Nun sollte dieser virtuelle Host und alle Scripts die dieser verwendet als "deinBenutzer" ausgeführt werden. ;)
 
Last edited by a moderator:
Eine simple Alternative waere einen Cronjob als root laufen zu lassen welcher aus der Datenbank Aktionen wie "startServer" ausliest und sie unter der UID des jeweiligen Benutzers durchfuehrt.

Falls du schnelle Reaktionen als durch einen Cronjob (1 Minute Intervall) haben willst kannst du entweder den Cronjob fuer 59 Sekunden lang jede X Sekunden die Datenbank abfragen lassen oder xinetd einsetzen und somit vom Frontend mit einem "knock" den Prozess anstossen.

Solch ein System ist imho auch etwas sicherer da kein direkter Zugriff auf die Konsole besteht.
 
Falls du schnelle Reaktionen als durch einen Cronjob (1 Minute Intervall) haben willst kannst du entweder den Cronjob fuer 59 Sekunden lang jede X Sekunden die Datenbank abfragen lassen oder xinetd einsetzen und somit vom Frontend mit einem "knock" den Prozess anstossen.
Grosses Pfui -- dann lieber ressourcenschonender und quasi in Realtime mit inotify arbeiten.
 
Meine Betonung war auf simpel =) inotify ist sehr leistungsfähig aber bedeutend weniger trivial auf zu setzen und zu migrieren als ein Skript mit einer while() Schleife ;)
Du hast Recht dass es suboptimal (aber dafür 100% migrierbar) ist, hingegen ist xinetd aber eine sehr gute Lösung - insbesondere wenn man mehrere Maschinen steuern will =)
 
Back
Top