• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Starten eines Scriptes per PHP

Mojo1987

Newbie
Hi Leute,

ich will per Webformular meinen CS Server starten und stoppen können.

Dafür hab ich ein Script das den server per ./hlds start startet und ./hlds stop

Hab das Formular gebastelt und rufe per

----

$result = shell_exec('/home/hlds/hlds/hlds start');

echo $result;

----

Bei Klick auf den Button das Programm auf. Zurückgegeben wird Stopping n00b-Massaker: cstrike, also wie in der Shell auch, aber starten tut der Server nicht.

Falscher Befehl oder muss ich das ganz anders machen?

Gruß
Mojo1987
 

Dr. Glastonbury

Advanced Hacker
Der Server wird mit den Rechten des Webservers gestartet? Normal rufe ich init-Scripte mit Root-Rechten auf, kA ob das bei CS auch so sein muss....

Aber ansonsten würd ich mal Logfiles konsultieren...
 
OP
M

Mojo1987

Newbie
Das hlds-Script startet den Server mit den entsprechenden Rechten, die da hinterlegt sind.
Aus der Konsole klappts auch. Nur eben übers Web-Script nicht....

Logfiles meinste....wo könnte das stehen?
 

Dr. Glastonbury

Advanced Hacker
Mojo1987 schrieb:
Das hlds-Script startet den Server mit den entsprechenden Rechten, die da hinterlegt sind.
Und wie soll er den User ändern? Wäre mir neu, dass der www-data-User das Recht besitzt ein Script mit nem anderen User zu starten...
Wenn das start-Script nicht zu lang ist, vielleicht auch mal hier posten.

Ansonsten, logfiles mal unter /var/log/apache2 suchen ;)
 
OP
M

Mojo1987

Newbie
im Apachelog läuft folgendes aus nach ausführen der Aktion:

Password: su: incorrect password

Was aber seltsam ist da der User unter welchem es gestartet werden soll kein Passwort besitzt.

Code:
#!/bin/sh

clear

# Edit and uncomment it to run the server as non-root
[b]CS_USER="server"[/b]

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
DIR=/home/hlds/hlds

DAEMON=$DIR/hlds_run

# LAN-server:
#PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
# Internet-server:
PARAMS="-game cstrike +ip 88.84.142.96 +map de_dust +maxplayers 10"

NAME=cstrike
DESC="n00b-Massaker"

case "$1" in
 start)
   echo "Starting $DESC: $NAME"
   if [ -e $DIR ];
   then
    cd $DIR
#  Change the lines for running as non-root!
[b]  su $CS_USER -l -c "screen -d -m -S $NAME $DAEMON $PARAMS"[/b]
    screen -d -m -S $NAME $DAEMON $PARAMS
   else echo "No such directory: $DIR!"
   fi
   ;;

 stop)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   ;;

 restart)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   
   echo -n "Starting $DESC: $NAME"
   cd $DIR
   screen -d -m -S $NAME $DAEMON $PARAMS
   echo " ... done."
   ;;
 
 status)
   # Check whether there's a "hlds" process
   # if "checkproc" is installed, you can use this:
   # checkproc $DIR/hlds_run && echo "CS-Server RUNNING" || echo "CS-Server NOT RUNNING"
   # (thx to commander)
   ps aux | grep -v grep | grep hlds_r > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "HLDS is UP" || echo "HLDS is DOWN"
   ;; 
 
 *)
   echo "Usage: $0 {start|stop|status|restart}"
   exit 1
   ;;
esac

exit 0

Festlegen des Users:
CS_USER="server"

Startcommand:
su $CS_USER -l -c "screen -d -m -S $NAME $DAEMON $PARAMS"

Weiste Rat?
 

Dr. Glastonbury

Advanced Hacker
Joa,
wenn du su -c als NICHT-Root ausführst, dann must du auch ein Passwort für den User eingeben...das hat der Apache wohl kaum und deswegen funktioniert das ganze nicht.

Du könntest sudo so konfigurieren, dass der User www-data ohne eingabe eines Passworts das Initscript ausführen darf. Das ist zwar in gewisser Weise ein Sicherheitsrisiko (und das auf nem Webserver nicht zu klein), aber so würde es funktionieren.

/etc/sudoers
Code:
%www-data    ALL=NOPASSWD:/da/wo/das/initScript/liegt

Aber ich persönlich würde auf sowas eher verzichten und das dann eben von Hand und über SSH machen ;)
 
OP
M

Mojo1987

Newbie
mmmh.....das wollt ich eigentlich nicht, da ich sonst jedem Clanmember SSH Zugriff geben muss ;)
 
Oben