.sh Datei per PHP als root starten

Bash, Shell, PHP, Python, Perl, CGI
malibuu
Posts: 53
Joined: 2003-06-16 18:41
Location: München

.sh Datei per PHP als root starten

Post by malibuu »

hallo ich habe ein php script welches eine shell datei aufruft ! Die Shell datei startet wiederum einen Prozess welcher leider immer mit dem User "wwwrun" gestartet wird. Somit ist es leider nicht möglich das ich von außen auf den Gameserver zugreifen kann. Hat jemand eine Möglichkeit ???

thx
chris
boozedǃ
Posts: 47
Joined: 2003-09-27 14:55
Location: /root

Re: .sh Datei per PHP als root starten

Post by boozedǃ »

Deine Angaben sind etwas ungenau.
Um welches Game geht es? Die Server aller mir bekannten Games laufen auch als normaler Benutzer. Keiner braucht root Rechte.

Wenn du dein Script unbedingt als root ausführen willst, was ich dir nicht empfehlen kann, kannst du doch su in deinem PHP Skript benutzen.

Am besten postest du dein Skript mal. Dann können wir dir auch besser folgen und dein Problem verstehen.

Dein Shellskript funktioniert also, wenn du es per Hand aufrufst?
malibuu
Posts: 53
Joined: 2003-06-16 18:41
Location: München

Hallo

Post by malibuu »

Hallo das Game ist dabei egal, es ist das Script zum starten|restarten|stopen script ! Aber ich kann es mal posten:

Shell Datei:

Code: Select all


#! /bin/sh 
# 
# Start the Counter-Strike dedicated server. 
# 
# AUTHORS : 
# 
# Julien Escario ( pandemik@azilog.net ) 
# & 
# Cedric Rochat ( crochat@younics.org ) 
# 
# =========================================== 
# 
# What you need: 
# 
# Linux :) 
# awk 
# the hlds_l & cstrike-files 
# 
# How to use: 
# 
# Edit the DIR-Var to fit your system (just contains the path to the dir that contains hlds_run) 
# Edit the PARAMS-Var to fit your needs 
# - standard is startup as LAN-server 
# 
# When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the 
# scripts for starting the services 
# Now you can link the script to your runlevel-dir, here's an example for runlevel 3: 
# ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/S90hlds 
# ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/K50hlds 
# 
# Or use it manualy like: 
# /etc/rc.d/init.d/hlds start 
# /etc/rc.d/init.d/hlds stop 
# 
# How to see the server-console: 
# 
# Just type in: screen -r cstrike 
# More info about screen can be found by typing "man screen" or using this nice link 
# http://server.counter-strike.net/help/linuxscreen.html 
# 
# DOC by jwm (jwm@counter-strike.de) 

clear 
DIR=/usr/games/cstrike/hlds_l 
DAEMON=$DIR/hlds_run 
# Internet-server: 
PARAMS="-game cstrike +map de_dust +maxplayers 12" 
NAME=cstrike 
DESC="counterstrike_server_16" 

case "$1" in 
start) 
   echo "Starting $DESC: $NAME" 
   cd $DIR 
   screen -d -m -S $NAME $DAEMON $PARAMS 
   ;; 

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." 
   ;; 

*) 
   echo "Usage: $0 {start|stop|restart}" 
   exit 1 
   ;; 
esac 

exit 0 
Hier die PHP Datei:

Code: Select all


<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php 

if (ini_get('register_globals') != '1') { 
  /* We'll register the variables as globals: */ 
  if (!empty($HTTP_POST_VARS)) 
    extract($HTTP_POST_VARS); 
  
  if (!empty($HTTP_GET_VARS)) 
    extract($HTTP_GET_VARS); 

  if (!empty($HTTP_SERVER_VARS)) 
    extract($HTTP_SERVER_VARS); 
} 

/* First we check if there has been asked for a working directory. */ 
if (!empty($work_dir)) { 
  /* A workdir has been asked for */ 
  if (!empty($command)) { 
    if (ereg('^[[:blank:]]*cd[[:blank:]]+([^;]+)$', $command, $regs)) { 
      /* We try and match a cd command. */ 
      if ($regs[1][0] == '/') { 
        $new_dir = $regs[1]; // 'cd /something/...' 
      } else { 
        $new_dir = $work_dir . '/' . $regs[1]; // 'cd somedir/...' 
      } 
      if (file_exists($new_dir) && is_dir($new_dir)) { 
        $work_dir = $new_dir; 
      } 
      unset($command); 
    } 
  } 
} 

if (file_exists($work_dir) && is_dir($work_dir)) { 
  /* We change directory to that dir: */ 
  chdir($work_dir); 
} 

/* We now update $work_dir to avoid things like '/foo/../bar': */ 
$work_dir = exec('pwd'); 

?>

<form name="myform" action="<?php echo $PHP_SELF ?>" method="post"> 

<input type="hidden" name="command" value="/home/www/web1/html/site/test/csserver.sh stop"> 
<input type="hidden" name="stderr" value="checked"> 
<input class=input name="submit_btn" type="submit" value="Server Stop"></p> 
</form> 


<form name="myform" action="<?php echo $PHP_SELF ?>" method="post"> 

<input type="hidden" name="command" value="/home/www/web1/html/site/test/csserver.sh start">
  <input type="hidden" name="stderr" value="checked"> 
  <input class=input name="submit_btn" type="submit" value="Server Start">
  </p> 
</form> 



<textarea cols="50" rows="5" readonly> 
<?php 
if (!empty($command)) { 
if ($stderr) { 
$tmpfile = tempnam('/tmp', 'phpshell'); 
$command .= " 1> $tmpfile 2>&1; " . 
"cat $tmpfile; rm $tmpfile"; 
} else if ($command == 'ls') { 
/* ls looks much better with ' -F', IMHO. */ 
$command .= ' -F'; 
} 
system($command); 
} 
?> 
</textarea> 

</body>
</html>
Er führt die shell datei anscheinend auch aus was ich per "top" kurzzeitig sehen kann. Aber der Server ist von außern nicht erreichbar !

Ich habe alle Dateien von HLDS auf CHMOD 777 gesetzt ! Und die .sh und php datei auch ! Wenn ich in der putty console die .sh datei aufrufe funktioniert es und der Server ist auch erreichbar !
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: .sh Datei per PHP als root starten

Post by jtb »

sudo?
malibuu
Posts: 53
Joined: 2003-06-16 18:41
Location: München

sudo ?

Post by malibuu »

sudo ?? was meinste du damit ?
dodolin
Posts: 3840
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe

Re: .sh Datei per PHP als root starten

Post by dodolin »

Ich habe alle Dateien von HLDS auf CHMOD 777 gesetzt !
Du bist echt krass! Ich könnte wetten, dein Rechner ist einer der nächsten, die geknackt werden und entweder Spam verschicken oder Warez traden. Viel Spaß dann noch...
sudo?
Das will er nicht, glaub mir.
sudo ?? was meinste du damit ?
Eben drum.

Code: Select all

man sudo
Schonmal probiert?
malibuu
Posts: 53
Joined: 2003-06-16 18:41
Location: München

lol

Post by malibuu »

lol !! Ich möchte es ja nur testen !!! Also es wäre wirklich super wenn Ihr mir helfen könntet !
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten

Re: .sh Datei per PHP als root starten

Post by captaincrunch »

Ich möchte es ja nur testen !!!
1. Es gibt nichts, was so lange hält wie "Ã?bergangslösungen"
2. Ja, und auch die "bösen Jungs" werden daraufhin deinen Server "testen"
Also es wäre wirklich super wenn Ihr mir helfen könntet !
Dir wird hier geholfen, du willst es nur nicht wahr haben ...
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
malibuu
Posts: 53
Joined: 2003-06-16 18:41
Location: München

hehe

Post by malibuu »

hehe ich habe die dateien mittlerweile wieder auf CHMOD 644 gesetzt !
aber wäre echt fein wenn ihr mir sagen könntet wie ich meinen Server nun zum laufen bekomme per Webinterface:-) !

Also Root in der console läuft der Server
Per Webbrowser als wwwrun startet der Server anscheinend local, ist aber nicht erreichbar und setzt sich am Anfang auf Sleep !

Aber danke schonaml für die CHMOD 777 Aufmerksamkeit :-)
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

Hi

Ich habe so ein ähnliches Problem.
Ich wollte meinen Gamserver mal als einen anderen benutzer als wwwrun pder root starten, aber da kommt bei mir folgendes wenn ich folgendes eingebe:
web1@pxxxxx:~/sof2 > sudo -u web1 /home/www/web1/sof2/sof2.sh
Sorry, user web1 is not allowed to execute '/home/www/web1/sof2/sof2.sh' as web1 on pxxxxx.
Obwohl er in der sudoers stand geht das nicht.
Wenn man ihn per shell_exec startet ist es wohl immer nur möglich ihn als wwwrun oder root zu starten. Eine andere Möglichkeit gibt es da nicht. Ich hatte auch sämtliche open_basedir für web1 aufgehoben oder documentroot verändert - all das bringte mir leider nix.

Also wenn man es via php und shell_exec auführen will die shdatei, dann geht es nur via root oder wwwrun

Oder kennt da noch jemand eine andere lösung?
hatte auch schon eine su -l web1 /home/bla/bla/sof2-sh versucht aber auch das geht nicht.

Vielleicht kennt ja einer eine möglichkeit per shell_exec über webbrowser eine sshdatei aufzurufen die auch dann mit web1 gestartet wird.
Meine versuche waren alle vergebens.

Wäre nett, wenn einer eine Möglichkeit kennt.
niklas_
Posts: 122
Joined: 2003-08-13 20:46

Re: .sh Datei per PHP als root starten

Post by niklas_ »

Schonmal daran gedacht, dass der User web1 einfach - wie die Fehlermeldung es auch schon sagt - nicht die Rechte hat, die HLDS zu starten? chwon richtig gesetzt?
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

niklas_ wrote:Schonmal daran gedacht, dass der User web1 einfach - wie die Fehlermeldung es auch schon sagt - nicht die Rechte hat, die HLDS zu starten? chwon richtig gesetzt?
Bei mir ist es ja nicht der HLDS Server sondern ein anderer, aber egal, weil es das selbe handling ist.

Alle meine Dateien haben die rechte die sie benötigen,also quasi web1:ftponly Und somit sollten normalaweise die rechte vorhanden sein, um das shellscript via shell_exec als web1 user auszuführen, aber das geht nicht - egal wie ich es drehe und wende. Ich rede davon es via phpscript im Webbrowser auszuführen - nicht via ssh konsole, weil da geht es ja.

Ich habe es sogar in die sudoers eingetragen, aber auch das half nix.
Also quasi so:

web1 ALL = NOPASSWD: /home/bla/bla/sof2.sh und damit dürfte web1 die vollen rechte haben, aber es geht dennoch nicht.

Und wie gesagt habe ich meinen ganzen sof2 ordner die rechte web1:ftponly gegeben.

Oder muss ich web1 in eine andere Gruppe einordnen, damit das geht?

Also wenn jemand da paar vorschläge hat, dann bitte postzen und ich kann es dann ausprobieren, denn ich habe bisher alles versucht was möglich ist.
niklas_
Posts: 122
Joined: 2003-08-13 20:46

Re: .sh Datei per PHP als root starten

Post by niklas_ »

Ich weiß nicht welche Rechte der Gruppe ftponly zugeschrieben sind; meine zugegeben mäßigen Englischkenntnisse vermueten, dass der User web1 nur FTP Login "machen darf"...
Evtl. mal web1 mit Confixx Shellzugriff erlaubt? (hört sich so nach COnfixx an...)
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

niklas_ wrote:Ich weiß nicht welche Rechte der Gruppe ftponly zugeschrieben sind; meine zugegeben mäßigen Englischkenntnisse vermueten, dass der User web1 nur FTP Login "machen darf"...
Evtl. mal web1 mit Confixx Shellzugriff erlaubt? (hört sich so nach COnfixx an...)
User web1 hat shellzugriff.
Ich kann mich mit web1 via ssh einloggen und da kann ich dann auch die shdatei normal als web1 user ausführen.

Nur wenn ich es via Webbrowser mache, dann wird es immer via wwwrun/root gestartet :(
darkspirit
Posts: 553
Joined: 2002-10-05 16:39
Location: D'dorf

Re: .sh Datei per PHP als root starten

Post by darkspirit »

blnsnoopy26 wrote:Nur wenn ich es via Webbrowser mache, dann wird es immer via wwwrun/root gestartet :(
..was bei mod_php (was du wohl verwendest) immer der Fall ist. Alle PHP-Skripte werden mit den Rechten des Webservers ausgeführt. Dein Vorhaben ist mit PHP per CGI und suexec realisierbar, schau dich danach mal im Forum bzw. allgemein im Web um.
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

DarkSpirit wrote:
blnsnoopy26 wrote:Nur wenn ich es via Webbrowser mache, dann wird es immer via wwwrun/root gestartet :(
..was bei mod_php (was du wohl verwendest) immer der Fall ist. Alle PHP-Skripte werden mit den Rechten des Webservers ausgeführt. Dein Vorhaben ist mit PHP per CGI und suexec realisierbar, schau dich danach mal im Forum bzw. allgemein im Web um.
Ja werde ich mich mal informieren.
Aber da stellt sich wieder eine andere frage und zwar die frage der Sicherheit - wenn ich jetzt php via CGI mache.

Sicherlich ist sudo auch nicht 100% perfekt, aber im Moment das einzigste was bei mir geht,, daher meine frage wie es mit der Sicherheit aussieht, ob dadurch keine grossen Sicherheitslöcher entstehen oder ist php als CGI sicherer als allgemein mod_php?

Bevor ich da jetzt rumcompile möchte ich mich da ja erst einmal informieren :)

Hoffe auf eine gute und ausführliche Auskunft :)
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: .sh Datei per PHP als root starten

Post by r00ty »

also viel rumcompilieren musst du gar nicht
schau dir mal das debianhowto zu suPhp an
das hab ich auf meiner Suse Kiste gemacht (etwas angepasst natürlich) und fahre damit gut....
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

r00ty wrote:also viel rumcompilieren musst du gar nicht
schau dir mal das debianhowto zu suPhp an
das hab ich auf meiner Suse Kiste gemacht (etwas angepasst natürlich) und fahre damit gut....
Also wenn man jetzt das PHP als mod CGI laufen hat dann kann man sich das sudo sparen und ist es dann auch sicherer als mit sudo oder bliebe es gleich?

Dann zu dem Howto habe ich hier was gefunden:
http://www.rootforum.org/faq/index.php? ... 29&lang=de

Ziehmlich weit unten schauen! Wollte es nach dem machen,aber weiss nicht ob ich es nachträglich machen kann. Habe heute auch php 4.3.4 installiert und die neuste mysql version drauf.

Oder gibs noch ein anderes howto in deutsch wo einem beschrieben wird, wie man es nachträglich machen kann, ohne grosse eingriffe?

Hab auch grad mal ins debian howto gesehn (http://www.debianhowto.de/howtos/de/sup ... ation.html) wo ich festgestellt habe das das meiste sicher für debian zugeschnitten ist - denke ich mal und ich nutze ja suse 7.2.

Oder kann ich die Anleitung dort komplett für mein suse nutzen?
denn das hier kann ich z.b nicht ausführen:
idefix:~# apt-get install php4-cgi
idefix:~# apt-get install apache-dev
Hoffe bekomme da noch paar tips hierzu.
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

Hi,

Also ich habe es mal nach dem Debian Howto gemacht, was soweit mit der Installation gefunzt hat, aber wenn ich die vhosts bestimme die mit mod_supphp laufen sollen, dann bekomme ich da nur ein Internal Server Error.

Also funktioniert das ganze nicht so wie es da steht. :( :(

Die vhosts sollen mit suphp laufen:
Folgende einträge habe ich in der httpd.conf vorgenommen bzw, wurden schon eingetragen beim installieren von mod_su

Code: Select all

<VirtualHost 217.xxx.xxx.xxx:80>
        SSLEngine        off
        ServerName        confixx.pxxxxxx.pureserver.info
        DocumentRoot        /home/confixx/html
        ScriptAlias        /cgi-bin/ /home/confixx/html/cgi-bin/
        CustomLog        /var/log/httpd/confixx/confixx.p1xxxxx.pureserver.info_access "%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i""
        ErrorLog        /var/log/httpd/confixx/confixx.pxxxxx.pureserver.info_error
        #User confixx
        #Group confixx
suPHP_Engine off
RemoveHandler .php
php_admin_flag engine on
</VirtualHost>

<VirtualHost 217.xxx.xxx.xxx:443>
        SSLEngine        on
        ServerName        confixx.p1xxxxx.pureserver.info
        DocumentRoot        /home/confixx/html
        ScriptAlias        /cgi-bin/ /home/confixx/html/cgi-bin/
        CustomLog        /var/log/httpd/confixx/confixx.p1xxxx.pureserver.info_ssl_access "%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i""
        ErrorLog        /var/log/httpd/confixx/confixx.pxxxxxx.pureserver.info_ssl_error
        SSLCertificateKeyFile        /etc/httpd/conf/ssl.key/server.key
        SSLCertificateFile        /etc/httpd/conf/ssl.crt/server.crt
        #User confixx
        #Group confixx
suPHP_Engine off
RemoveHandler .php
php_admin_flag engine on
</VirtualHost>

Code: Select all

<VirtualHost 217.xxx.xxx.xxx>
        ServerName sof2.meinedomian.de
        ServerAlias www.sof2.meinedomain.de
        DocumentRoot /home/www/web1/sof2
        php_admin_value safe_mode off
ErrorDocument 401 "<b>Fehler</b><br><br>Du hast auf das SoF 2 WebAdmin kein Zugriff *hehe
</VirtualHost>

Code: Select all

suPHP_Engine on
php_admin_flag engine off
AddType application/x-httpd-php .php
AddHandler x-httpd-php .php

Code: Select all

LoadModule suphp_module       /usr/lib/apache/mod_suphp.so

Code: Select all

AddModule mod_suphp.c
Also wie gesagt alles gemacht, aber bekomme aber einen internal server error :( Was nun?

Kann es sein das weil ich das php4-cgi nicht habe das der internal server error kommt?

Compiled habe ich es so:

Code: Select all

./configure --with-min-uid=30 --with-min-gid=30 --with-apache-user=wwwrun --with-php=/usr/lib/cgi-bin/php4 --with-logfile=/var/log/suphp.log --with-apxs=/usr/bin/apxs
Alle anderen vhosts da habe ich die suphp engine auf off und da geht es ja dann. Hoffe es weiss einer rat was da schief gelaufen ist und solange muss ich wieder mt meiner alten config weiter machen! und auf sudo umsteigen.

pp.s in der phpinfo zeigte es mir an das phpsu geladen wird.
r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: .sh Datei per PHP als root starten

Post by r00ty »

uiii
mir den optionen hab ich keine Ahnung...
aber deine Logs sollten aufschlussreicher sein
was sagt denn die error-log vom apachen ?
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

r00ty wrote:uiii
mir den optionen hab ich keine Ahnung...
aber deine Logs sollten aufschlussreicher sein
was sagt denn die error-log vom apachen ?
Also für benutzer web1 gibt es da kein aufschluss woran es liegen kann.
Also ich kann nicht sehen, warum das suphp nicht funktioniert :(

in meiner suphp.log steht das:

Code: Select all

[Sun Feb 01 09:47:01 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:01 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:02 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:02 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:03 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:03 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:04 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:04 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:05 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:05 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:06 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:06 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:07 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:07 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:08 2004] [info] Executing /home/www/web1/xxx/index.php as user web1 (1036), group ftponly (103)
[Sun Feb 01 09:47:08 2004] [error] System error: execl() failed (No such file or directory)
[Sun Feb 01 09:47:16 2004] [error] UID of /home/confixx/html/not/index.php or its target (0 / root) < 30

Aber das gibt mir auch keine grossen infos raus. Sagt mir Ordner nicht vorhanden,aber er ist ja da. Irgendwo is murks aber ich komme da auch nicht hinter - leider.
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: .sh Datei per PHP als root starten

Post by blnsnoopy26 »

Habs nu hinbekommen :)
läuft alles prima.
Hab das aber schon in einem anderen thread geschildert :)

Hier:
http://www.rootforum.org/forum/viewtopic.php?t=22745