php vill inte köra exec("uptime")

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2004

php vill inte köra exec("uptime")

Funkade ju så fint på FreeBSD. Här i OpenBSD 3.9 har jag inte bash längre utan nåt korn tror jag, men uptime finns ändå och ger liknande resultat.
Men, det körs inte i php. Kan det vara någon säkerhetsinställning eller nåt, eller är det bara bash som klarar att köra shell-kommandon från php???

$uptime = exec("uptime");
print "<b>Server time and uptime:</b> " . $uptime;

EDIT: Hittade någonstans att det verkar bero på chrootningen av Apache. exec() behöver sh (eller annat shell antar jag) men inget sånt finns i chrooten?

Nån som vet hur man löser det? Hur kopierar man in ett shell dit? Och förstör man hela poängen med chrootningen om man gör det?

EDIT2: Kopiera sh till /var/www/bin som någon löste det på en äldre version verkar inte hjälpa.

CCNA sedan juni 2006

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2001

Själv brukar jag köra system() funktionen istället.

Jag gissar på att OpenBSD kör me sin jail historia på apachen, då kan du nog glömma system kommando tyvär.

Och förresten.. Du vet om att du har redan 5st aktiva trådar om ditt OpenBSD projekt??

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2004

Har i /var/www skapat bin och slängt in sh i den.
Jag har skapat usr/bin och slängt in uptime i den, kört ldd på den och fått fram tre libs som jag kopierat in två till /usr/lib samt en till /usr/libexec. Sen behövde visst en av dom en utmp-fil som jag också kopierat in....

Funkar fortfarande inte.
Är det ännu mer avancerat eller, eller har jag bara missat nån liten detalj?

Har gjort allt som root, utan speciella behörigheter eller users på det jag skapat.

CCNA sedan juni 2006

Trädvy Permalänk
Medlem
Plats
Mölndal
Registrerad
Jul 2005

Det första du skall kontrollera var chroot'rn är satt till, det är därifrån du sedan skall skapa katalogerna.

Sedan skall du se till så att alla program du kör antingen är statiskt länkade eller har tillgång till sina bibliotek, i ditt fall så är det shell'et och uptime.

Kriga mot min brute: http://gunnard.se.mybrute.com om du vågar :D

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2004

Funkar nu
ldd gav inte alla filer som behövdes, utan det var nån skum /var/www/var/run/utmp som skulle in också, och den som hjälpte mig med det hade råkat skriva fel sökväg på den så jag gjorde fel, och sen hade jag ett litet fel i min php-fil också men nu funkar det

Förutom att jag inte får localtime utan 2 timmar för tidigt.

Nån som vet vilken katalogstruktur som måste kopieras in för att få rätt tid i "uptime"?
<EDIT>Bara att kopiera in /usr/localtime</EDIT>

Och är det någon nackdel att jag har skapat alla mapar inne i chroot som root, och inte brytt mig om att ändra rättigheter eller ändra till nån annan ägare med chown eller nåt? Är det ok ändå? Vill ju inte råka skapa nån jättelucka i chrooten genom att vara klantig

EDIT: Kan ju knappa ner vad jag gjorde för att få exec("uptime") att fungera...hur min chrootade /var/www ser ut, eftersom jag ändå redan skrivit det på ett annat forum i felsökande syfte.
Allt gavs av "ldd uptime", utom den där utmp-filen som man tydligen var tvungen att veta utantill varför den skulle kopieras in

Ok, here it goes. This is what it looks like now, what I have in my croot.

/var/www/conf/*some config-files like httpd.conf*
/var/www/htdocs/*obvious*
/var/www/icons/*obvious*
/var/www/logs/*obvious*
/var/www/cgi-gin/printenv test-cgi
/var/www/users/*EMPTY*

/var/www/bin/sh
/var/www/tmp/*created this but its still empty, dont know what its for*
/var/www/usr/bin/uptime
/var/www/usr/lib/libc.so.39.0
/var/www/usr/lib/libkvm.so.8.0
/var/www/usr/libexec/ld.so
/var/www/var/run/utmp

CCNA sedan juni 2006

Trädvy Permalänk
Medlem
Registrerad
Aug 2005

Har nyligen installerat Apache 2.0.58 "manuellt" och chroot:at den. Ett tips är att använda ktruss/ktrace/strace istället för ldd. Ldd visar endast länkade bibliotek medans de andra visar alla systemanrop processen gör. Kör igång ktruss och den process du vill undersöka och grep:a efter open eller andra intressanta anrop.

Du kommer att se exakt vilka filer programmet öppnar, jäkligt smidigt och gör arbetet mycket enklare. Då behöver du inte gissa eler lära dig utantill vilka filer du måste lyfta in i det nya root-systemet.