Portál AbcLinuxu, 12. května 2025 11:42

Dotaz: Pristup k souboru vytvorenemu v PHP

21.3.2014 22:33 Ladislav P
Pristup k souboru vytvorenemu v PHP
Přečteno: 517×
Odpovědět | Admin

Ahoj, mam problem, ktery se snazim rozlousknout a mozna uz se motam v kruhu, tak bych se chtel zeptat zde. Cil je PHP skriptem na webovem serveru vytvorit soubor v tmp a pomoci ftp ho stahnout do jineho adresare. Soubor vytvorim, ma prava 644, vlastnikem je wwwrun, ale ftp mi tvrdi, ze tam zadny takovy soubor neni. Pri testech jsem dosel zhruba k takovemu zapisu, abych si overil, kde je chyba:

shell_exec ("touch /tmp/aa.aa");  # je jedno, jakym zpusobem soubor pomoci PHP vytvorim

shell_exec ("ls -la /tmp"); #v poradku, soubor vidim s wwwrun:www 644

ftp_get ($conn_id,$local,$remote,FTP_BINARY); #FTP mi tvrdi, ze soubor neexistuje

shell_exec ("ls -la /tmp"); vse vidim, soubor je tam stale

 

FTP user ma pristup do /tmp. Co je ale uplne divoky a co mi hlava nebere je to, ze kdyz z bashe soubor v /tmp vytvorim a dam mu vlastnika wwwrun:www a 644, tak vse funguje. OS OpenSuse 13.1 x64, Apache standardni instalace. Kde je zakopanej pes?

 

Diky,L

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.3.2014 11:10 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nelze odpovědět, nedostatek informaci např. $local,$remote je skryto, dej víc i s výpisy.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
22.3.2014 13:21 Ladislav P
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP

OK, tady je ten skript, spoustim ho browserem:

<?php
$remote="/tmp/xx.xx";
$local="/dd/aa.aa"; $ftp_server="localhost";
$ftp_user="lpf";
$ftp_pass="lacko"; $conn_id=ftp_connect($ftp_server);
# Soubor $remote2 jsem vytvoril rucne v bashi, zmenil mu vlastnika na wwwrun:www a 644
$remote2="/tmp/yy.yy";
#vytvorim soubor $remote
shell_exec("touch $remote");
$output=shell_exec("ls -la /tmp");
echo "<pre>ls -la /tmp $output</pre>"; if (ftp_login($conn_id,$ftp_user,$ftp_pass)) {
echo "login OK";
    if (ftp_get($conn_id,$local,$remote,FTP_BINARY)) {
echo "YES";
}else{
echo "NO";
    }
}
$output=shell_exec("ls -la /tmp");
echo "<pre> ls -la /tmp $output</pre>";
ftp_close($conn_id);
?>

A jeho vystup:

ls -la /tmp total 8
drwxrwxrwt  2 root   root 4096 Mar 22 12:51 .
drwxr-xr-x 25 root   root 4096 Mar 18 21:11 ..
-rw-r--r--  1 wwwrun www     0 Mar 22 12:53 xx.xx

login OK NO

 ls -la /tmp total 8
drwxrwxrwt  2 root   root 4096 Mar 22 12:51 .
drwxr-xr-x 25 root   root 4096 Mar 18 21:11 ..
-rw-r--r--  1 wwwrun www     0 Mar 22 12:53 xx.xx

Cilize soubor v tempu existuje minimalne do druheho ls. Nicmene ftp (resp. apache error log) tvrdi, ze nikoliv:
[php5:error] [pid 12253] [client ::1:38763] PHP Warning: ftp_get(): Failed to open file. in /srv/www/htdocs/test.php on line 18
Vtipny je, ze celou dobu v /tmp existuje soubor remote2 /tmp/yy.yy:
-rw-r--r--  1 wwwrun www       0 Mar 21 21:45 yy.yy
a prikazy ls ho nevypisi. 
A kdyz vymenim v ftp_getu $remote za $remote2, tak vse funguje. Urcite to bude nejaka blbost, ale jsem v koncich :)

            
24.3.2014 20:05 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Snad že v PHP /tmp není stejný /tmp, není PHP chroot-otavné?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
25.3.2014 20:40 Ladislav P
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Dik za myslenku, muzes to trochu rozvest? PHPko pouziva systemovy tmp pro http upload.
25.3.2014 21:09 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Nevím co bych měl rozvést, připadá mi, že pracuješ pokaždé s jiným '/tmp', tedy jediné co mě napadlo je, někde nějaký chroot. No a když se na to tak dívám znovu, tak bych řekl celkem jistě, že ftp-ko bude určitě chroot-ované, to přece obvykle i neobvykle nemá přístup na '/'.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
25.3.2014 21:52 Ladislav P
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Nene, to ftpko je moje a ma (a ted neresme jak moc je to spatne) pristup k /, cilize do systemoveho /tmp ma pristup. A i pisu, ze kdyz soubor vytvorim rucne s uvedenymi atributy v /tmp tak ho ftpko vidi. V pripade, ze tamtez vytvorim soubor pomoci php pres apache, tak ho nevidi.
26.3.2014 09:02 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
vytvor ten subor cez php a ptom ho pohladaj na disku. ako uz bolo spomenute, 100% nebude v /tmp ...
25.3.2014 05:49 Matlák
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
OT: Nebylo by lepší ten soubor vytvořit v tmp pod adresářem, ke kterému má přístup apache a stáhnout ho odtamtud standardně přes HTTP?
25.3.2014 05:53 Matlák
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
A ještě mě napadá - zkoušels jsi LIST nad tím ftp (třeba v nějakém klientu, například ftp ? :-))
25.3.2014 20:46 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Promiň, ale stále mi není jasné: Proč do toho motáš FTP? Je tam nutné?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
25.3.2014 21:59 Ladislav P
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Prominu :). Je tam nutny. Skoro si myslim, ze tim vypisem toho skriptu jsem to tady trochu zneprehlednil. V zasade jde o to, jak to, ze se prave to FTPko chova jinak k souboru vytvorenemu pomoci php/apache a jinak k souboru vytvorenemu rucne na to same misto se stejnymi vlastnostmi (vlastnik, prava). A protoze to cele zni jako totalni nesmysl, tak za tim vsim bude nejaka blbost, kterou uspesne prehlizim uz docela dlouho.
25.3.2014 22:16 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Jde mi o to, proč ten soubor nestáhneš přes HTTP. Tím by spousta problémů zmizela.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
2.4.2014 19:59 Ladislav P
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hmmm, tak jste meli pravdu s tim, ze PHP resp. Apache pouziva vlastni tmp, aspon teda OpenSuse 13.1. Pouziva tzv. privatni tmp, ve vysledku PHP pak pouziva /tmp/systemd-private-???????/tmp/. Nevite nekdo, jak z Apache dostat jmeno tohoto tmp adresare pomoci PHPka? To jmeno se po kazdem restartu Apache meni. Neco jako sys_get_temp_dir pochopitelne nefunguje:(. Dik,L.
2.4.2014 20:26 MadCatX
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Překážky, na které narážíte naznačují, že ten problém řešíte nesprávným způsobem. Proč potřebujete webovou aplikací vytvořit dočasný soubor přístupný přes FTP?
2.4.2014 20:50 Ladislav P
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Ale vzdyt o to vubec nejde. Nyni preci tu otazku mohu polozit takto: Jak zjistim pomoci PHP, jaky tmp adresar je pouzivan webovym serverem v ramci celeho filesystem? Lze to vubec? A ocenuji kazdeho, kdo ma cas a chut odpovedet na otazku. L.
2.4.2014 21:31 MadCatX
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Úplně spolehlivě to IMHO zjistit nelze. Ten webový server může běžet třeba v chrootu.
2.4.2014 21:35 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
AraxoN avatar 3.4.2014 10:22 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP
Ja len doplním pre toho kto otázku položil:

Odpoveď je síce správna, ale otázka nie. Tieto funkcie by Ti boli platné ak by si používal tmpfile(). Ty ale ten súbor vytváraš cez shell_exec() a cestu si tam dávaš napevno. To znamená, že Ti to beží v chroot-e. Takže si buď vypneš chroot, čo neodporúčam, pretože tam je kvôli bezpečnosti a v Tvojom prípade je asi dobre, že tam je. Alebo musíš zmeniť logiku tej svojej aplikácie.
3.4.2014 11:46 Lucius
Rozbalit Rozbalit vše Re: Pristup k souboru vytvorenemu v PHP

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.