Zugriff auf `uptime` aktivieren

Bash, Shell, PHP, Python, Perl, CGI
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Zugriff auf `uptime` aktivieren

Post by thiefmaster »

Hallo,

ich würde den webs gerne PHP-Zugriff auf `uptime` erlauben.
Deswegen hab ich einen Symlink in /home/www/empty (das ja safe_mode_exec_dir ist) erstellt.
Aber weder echo exec('uptime'); noch echo exec('/home/www/empty/uptime'); geben etwas aus :(

Ganz zur Not werde ich halt für die webs den safe_mode deaktivieren, aber das will ich wenn möglich vermeiden ;)
floschi
Userprojekt
Userprojekt
Posts: 3247
Joined: 2002-07-18 08:13
Location: München

Re: Zugriff auf `uptime` aktivieren

Post by floschi »

Hm, geht's evtl. übers /proc ? Da gibt's was ähnlcihes... cat /proc/uptime oder so...
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Re: Zugriff auf `uptime` aktivieren

Post by thiefmaster »

Auf /proc kann doch wegen dem safe_mode von confixx auch nicht zugegriffen werden, oder?
floschi
Userprojekt
Userprojekt
Posts: 3247
Joined: 2002-07-18 08:13
Location: München

Re: Zugriff auf `uptime` aktivieren

Post by floschi »

ThiefMaster wrote:Auf /proc kann doch wegen dem safe_mode von confixx auch nicht zugegriffen werden, oder?
Probier's aus :P
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Re: Zugriff auf `uptime` aktivieren

Post by thiefmaster »

Mit cat /proc/uptime kann ich leider nichts anfangen, weil das wBB2 die Ausgabe vom noramlen `uptime` parst.
floschi
Userprojekt
Userprojekt
Posts: 3247
Joined: 2002-07-18 08:13
Location: München

Re: Zugriff auf `uptime` aktivieren

Post by floschi »

Du weisst aber schon, dass du den safe_mode auch für einzelne VHosts deaktivieren kannst? Und dann mit open_basedir auch Sicherheit herstellen kannst... evtl. noch disable_functions in der php.ini entsprechend setzen
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Re: Zugriff auf `uptime` aktivieren

Post by thiefmaster »

Ja...
ThiefMaster wrote:Ganz zur Not werde ich halt für diese webs den safe_mode deaktivieren, aber das will ich wenn möglich vermeiden
open_basedir ist bei Confixx ja eh standardmäßig an (und ich hab ja keinen Grund, meinen eigenen Server zu hacken :D).
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Zugriff auf `uptime` aktivieren

Post by oxygen »

ThiefMaster wrote:Hallo,

ich würde den webs gerne PHP-Zugriff auf `uptime` erlauben.
Deswegen hab ich einen Symlink in /home/www/empty (das ja safe_mode_exec_dir ist) erstellt.
Aber weder echo exec('uptime'); noch echo exec('/home/www/empty/uptime'); geben etwas aus :(

Ganz zur Not werde ich halt für die webs den safe_mode deaktivieren, aber das will ich wenn möglich vermeiden ;)
Wenn das funktionieren würde wäre der safemode ja Sinnfrei. Da ist nix mit FollowSymlinks. Wenn safe_mode bzw basedir restriction an ist, gehts nunmal nicht.
mark
Posts: 295
Joined: 2003-04-15 16:48
Location: Oldenburg

Re: Zugriff auf `uptime` aktivieren

Post by mark »

Probier mal die uptime binary in das /home/www/empty zu kopieren....

Ich hatte mal ein ähnliches Problem mit ImageMagick und nach dem reinkopieren, ging es auch im safemode. (Ohne Pfadangabe, glaube ich).

Gruß
mark
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten

Re: Zugriff auf `uptime` aktivieren

Post by captaincrunch »

Probier mal die uptime binary in das /home/www/empty zu kopieren....
Und wenn's das "normale" Binary nicht tut, bau dir ein statisch kompiliertes. uptime benutzt im Normalfall nämlich noch ein paar dynamisch gelinkte Bibliotheken :

Code: Select all

ldd /usr/bin/uptime
        libproc.so.2.0.7 => /lib/libproc.so.2.0.7 (0x4001f000)
        libc.so.6 => /lib/libc.so.6 (0x4002d000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
(System Debian Woody, keine Ahnung, wie's unter SuSE aussieht ...)
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Re: Zugriff auf `uptime` aktivieren

Post by thiefmaster »

Also nur kopieren funktioniert nicht. :(

Wie compiliere ich mir denn ein statisches Binary?

Code: Select all

p********:/home/www/empty # ldd uptime
        libc.so.6 => /lib/libc.so.6 (0x40019000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Zugriff auf `uptime` aktivieren

Post by flo »

Wenn Du per Cron /proc/uptime kopierst müsste das doch gehen, oder?

Ich habe eine Uptime-Statistik per PHP - aber als Shell-Script laufen:

Code: Select all

#!/usr/bin/php -q
<?

     // Proc-FS auslesen
     $fd = fopen('/proc/uptime', 'r');
     $ar_buf = split(' ', fgets($fd, 4096));
     fclose($fd);

     $sys_ticks = trim($ar_buf[0]);
     $uptime_mins   = $sys_ticks / 60;
     $uptime_hours = $uptime_mins / 60;

     //
     // Datenbankzugangsdaten
     //
     $db_host = "xxxx";
     $db_user = "xxxx";
     $db_pass = "xxxx";
     $db_db = "xxxx";

     $uptime_date = (date ("Y-m-d H:i:s"));

     //
     // Hostangaben
     //
     $uptime_ip = "xxxx";
     $uptime_descr = "Mail- und DB-Server";

     $uptime_days  = floor($uptime_hours / 24);
     $uptime_hours = floor($uptime_hours - ($uptime_days * 24));
     $uptime_mins = floor($uptime_mins - ($uptime_days * 60 * 24) - ($uptime_hours * 60));


...
?>
Dann müsstest Du doch Dein Forum hinbekommen, oder?

Grüße,

flo.
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Re: Zugriff auf `uptime` aktivieren

Post by thiefmaster »

Das Forum benötigt nur die 3 Load-Averages.
Deswegen nützt mit /proc/uptime leider ziemlich wenig :(

Code: Select all

if($uptime = @exec("uptime"))
{
 if(preg_match("/averages?: ([0-9.]+),[s]+([0-9.]+),[s]+([0-9.]+)/",$uptime,$match))
 {
  
  $match[1]*=100;
  $match[2]*=100;
  $match[3]*=100;
  
  $serverinfo = 1;
  }
}
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Zugriff auf `uptime` aktivieren

Post by oxygen »

Ich glaub das hilft ihm aber nicht. Er möchte, dass das Woltlab Burning Board im ACP die Serverauslastung anzeigt. Das passiert mit folgendem Code:

Code: Select all

if($uptime = @exec("uptime")) {
 if(preg_match("/averages?: ([0-9.]+),[s]+([0-9.]+),[s]+([0-9.]+)/",$uptime,$match)) {

  $match[1]*=100;
  $match[2]*=100;
  $match[3]*=100;
Naja ich finde die Anzeige ziemlich sinnfrei, weshalb ich sie bei mir umgebaut habe. Den Hack gibts bei mywbb oder wbb-help.

EDIT: 2 .... ein Gedanke 8)
flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Zugriff auf `uptime` aktivieren

Post by flo »

Oh sorry ... man kann ja nicht alles kennen. ;-)

Zur Not mach halt den Uptime in eine Textdatei und lies die mit fopen ein, das wäre noch, was mir einfallen würde.

Grüße,

flo.
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Re: Zugriff auf `uptime` aktivieren

Post by thiefmaster »

Stimmt, so könnte ich es machen:
Ein PHP-Cronjob schreibt `uptime` jede Minute in eine Textdatei (eigentlich könnte ich dafür doch auch den SHM nehmen, oder?).
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: Zugriff auf `uptime` aktivieren

Post by jtb »

ThiefMaster wrote:Hallo,

ich würde den webs gerne PHP-Zugriff auf `uptime` erlauben.
Deswegen hab ich einen Symlink in /home/www/empty (das ja safe_mode_exec_dir ist) erstellt.
safe_mode_exec_dir verhindert Symlinknutzung..
kopiere die Binary (und strippe sie eventl.)..
mark
Posts: 295
Joined: 2003-04-15 16:48
Location: Oldenburg

Re: Zugriff auf `uptime` aktivieren

Post by mark »

Mir ist da noch was eingefallen.

Hat dein Safe_exec_dir auch die Rechte 445 oder so ? der Webserver "muss" da drin lesen können...

Bei dem /home/www/empty Verzeichnis sind die Rechte zu anfang:
dr--r--r-- 2 root root 4096 Okt 8 2002 empty

Mach darauf chmod +x empty und es sollte mit den binaries da drin gehen.

Das habe ich auf meinem Server damals auch gemacht und das hat funktioniert. In meinem Fall waren das aber die binaries von imagemagick.

Code: Select all

/home/www/empty # dir
total 124
dr--r--r-x    2 root     root         4096 Feb 25 16:17 .
drwxr-xr-x   17 root     root         4096 Mar 26 12:56 ..
-rwxr-xr-x    1 root     root        20252 Feb 25 16:17 animate
-rwxr-xr-x    1 root     root        34159 Feb 25 14:18 convert
-rwxr-xr-x    1 root     root        30928 Feb 25 14:00 mogrify
-rwxr-xr-x    1 root     root        24644 Feb 25 16:17 montage
Und das die binaries mit dyn. Bibliotheken verlinkt sind, ist egal.

Man schaue mein animate binary an:

Code: Select all

/usr/local/httpd/htdocs/kunden/empty # ldd animate
        libMagick.so.5 => /usr/lib/libMagick.so.5 (0x40025000)
        liblcms.so.1 => /usr/lib/liblcms.so.1 (0x40111000)
        libtiff.so.3 => /usr/lib/libtiff.so.3 (0x40124000)
        libfreetype.so.6 => /usr/local/php_files/lib/libfreetype.so.6 (0x40168000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x401b8000)
        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x401d7000)
        libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x401e5000)
        libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40233000)
        libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x4023d000)
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40255000)
        libz.so.1 => /lib/libz.so.1 (0x40339000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x40348000)
        libm.so.6 => /lib/libm.so.6 (0x4035e000)
        libdl.so.2 => /lib/libdl.so.2 (0x4037d000)
        libc.so.6 => /lib/libc.so.6 (0x40381000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
thiefmaster
Posts: 59
Joined: 2002-08-31 19:15

Re: Zugriff auf `uptime` aktivieren

Post by thiefmaster »

JUHU, das war es.
CHMOD 755 funktioniert einwandfrei.
445 müsste aber auch gehen ;)
mark
Posts: 295
Joined: 2003-04-15 16:48
Location: Oldenburg

Re: Zugriff auf `uptime` aktivieren

Post by mark »

Und alles löst sich in Wohlgefallen auf :)

Hätte ich aber auch eher dran denken können, weil an dem Problem hab ich auch eine ganze Weile geknabbert. Allerdings war das schon wieder lange her... Ich sollte sowas mal irgendwo aufschreiben...

Wie wäre es, dass das obige in die FAQ kommt ?

Gruß
Mark