Page 1 of 1

Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 20:14
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 ;)

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 20:19
by floschi
Hm, geht's evtl. übers /proc ? Da gibt's was ähnlcihes... cat /proc/uptime oder so...

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 20:21
by thiefmaster
Auf /proc kann doch wegen dem safe_mode von confixx auch nicht zugegriffen werden, oder?

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 20:29
by floschi
ThiefMaster wrote:Auf /proc kann doch wegen dem safe_mode von confixx auch nicht zugegriffen werden, oder?
Probier's aus :P

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 20:33
by thiefmaster
Mit cat /proc/uptime kann ich leider nichts anfangen, weil das wBB2 die Ausgabe vom noramlen `uptime` parst.

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 20:36
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

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 20:38
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).

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 21:03
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.

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 21:29
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

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 21:34
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 ...)

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 22:18
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)

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 22:50
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.

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 22:53
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;
  }
}

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 22:56
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)

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-16 23:09
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.

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-17 07:22
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?).

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-17 14:14
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.)..

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-17 22:36
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)

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-17 22:45
by thiefmaster
JUHU, das war es.
CHMOD 755 funktioniert einwandfrei.
445 müsste aber auch gehen ;)

Re: Zugriff auf `uptime` aktivieren

Posted: 2003-04-17 22:47
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