Sziasztok!
Van egy dolog, amit rettentően nem értek.Adott egy szerver, rajta egy apache2, php4, bekapcsolva a safe_mode. Ez ugyebár azt jelentené, hogy futtatás során egyeztetésre kerül, hogy a (pl. fopen által) kezelt fájl tulajdonosa megegyezik-e a php fájl tulajdonosával. Ha még a safe_mode_gid-et is bekapcsolom, akkor azzal is megelégedik a szerver, ha a script és a fájl csoportja megegyezik.
Ezek után adott egy fájl a /home/juzer/public_html könyvtárban, ami létrehoz egy proba.txt fájlt. A script (melynek tulajdonosa juzer:users) le is fut (ha 777 jogot adok a public_html könyvtárra), ez még mindig rendben van, a keletkező proba.txt tulajdonosa www-data:www-data.
Ezek után írok egy másik scriptet szintén juzer:users tulajdonossal, amelyik megnyitja a proba.txt-t és kiolvassa a tartalmát. Ez is lefut minden gond nélkül. Nos, ezt nem értem. Ugyanis safe_mode-ban se a script és a fájl tulajdonosa, se csoportja nem egyezik meg (juzer:users nyitja meg a www-data:www-data fájlt).
Valaki mondja meg nekem a választ.
Üdv.
Tamás
- 1505 megtekintés
Hozzászólások
szkriptjeid www-data:www-data kent futnak...
- A hozzászóláshoz be kell jelentkezni
Az rendben van, de a safe_mode lényege pont az, hogy csak akkor engedi a fájlhozzáférést, ha a script uidje/gidje megegyezik a fájl uid/gidjével. Ez most sem az uid, sem a gid esetében nem áll fenn.
- A hozzászóláshoz be kell jelentkezni
>> Zz most sem az uid, sem a gid esetében nem áll fenn.
dehogynem. Nézd meg milyen userrel fut az apache. Modulként www-data user fogja futtani a scriptet. Teljesen mindegy ki hozta létre a fájlt.
RTFM differencies:
- php as cgi
- php as apache module
- A hozzászóláshoz be kell jelentkezni
Nézd meg a phpinfo() -val hogy tényleg be van -e kapcsolva a safe_mode.
Egyébként ez meg így érdekes....
___________________________________________________________________
Lógnak a pálmafán a kókuszok .... :)
- A hozzászóláshoz be kell jelentkezni
Be van kapcsolva. Egyébként eddig két gépen próbáltuk, egy Debian Sarge-on, és egy Ubuntu Edgy-n. Ugyanaz a tünet. Szóval tényleg érdekes.
Nekem egyébként azért okoz fejtörést az egész, mert ugyanebben a könyvtárban egy más típusú alkalmazásban egy másik php meg kiírta a restriction hibát.
Ráadásul ez még szerencsés is, hogy most így működik, mert "szabályszerű" működés esetén php-ból nem tudom megnyitni a saját php-m által az előzőekben létrehozott fájlt. Ugyebár azt www-data:www-data-ként hozná létre, legközelebbi megnyitáskor viszont már nem szabadna neki megnyitnia, mert ugye ez nem passzol a juzer:users-el.
Ez okozza most a zavart a fejemben.
- A hozzászóláshoz be kell jelentkezni
"When safe_mode is on, PHP checks to see if the owner of the current script matches the owner of the file to be operated on by a file function or its directory."
Naszoval ha jol ertem: ha a php file tulajdonosa megegyezik az azt tartalmazo konyvtar tulajdonosaval, akkor hozzaferhetsz az abban a konyvtarban levo file-okhoz (ha ez egyeb jogosultsagok megengedik). Tehat vesd ossze a konyvtar tulajat a php script tulajaval. A safe_mode_gid engedelyezett, akkor a konyvtar csoportja es a php script csoportja is jatszik.
- A hozzászóláshoz be kell jelentkezni
Nekem úgy rémlik, hogy a kód futtatásra vonatkozik csak.
- A hozzászóláshoz be kell jelentkezni
Nálam is érdekesen működik:
index.php user és csoportját megváltoztatva nem tudja felállitani a lapot. Mivel több include van benne, mindegyiknél hibát ir.
Ha egy aloldalnál teszem ezt meg, ami csak egy txt-t vagy kisebb php tartalmat illesztene be, ott semmi gond.
Mappákra úgy ahogy tiszta, de ott sem egyértelmű.
Furcsa, mert régen mikor próbálgattam, korrekten ment:
Ha fájl tulajdonosa nem passzolt az apache-t futtató felhasználóval, akkor nem nyitotta meg. Most nem, több gépen sem.
A többi korlát okés, mint pl.: shel_exec() korlátozása egy adott mappára.
http://www.szabilinux.hu/php/features.safe-mode.html
"Ha a safe_mode beállítás be van kapcsolva, a PHP ellenőrzi, hogy az aktuálisan futó szkript tulajdonosa megegyezik-e a kezelésre megnyitandó file tulajdonosával."
Tehá fájllal is mennie kell.
- A hozzászóláshoz be kell jelentkezni