Nastavenie prav pre rodicovsky adresar skriptu v php
-
S.T.E.A.L.T.H
Light Professional
- Príspevky: 933
- Registrovaný: 31 jan 2010, 14:44
- Bydlisko: Pegasus Galaxy
Nastavenie prav pre rodicovsky adresar skriptu v php
Zdravim vospolok,
nevie niekto, ci je vobec mozne, a ak ano ako nastavit pouzitim chmod v php, prava rodicovskeho priecinka skriptu na 777? Musi to byt nastavovane cez php.
Dakujem za rady
nevie niekto, ci je vobec mozne, a ak ano ako nastavit pouzitim chmod v php, prava rodicovskeho priecinka skriptu na 777? Musi to byt nastavovane cez php.
Dakujem za rady
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Kód: Vybrať všetko
<?php
chmod("../", 777);
?>
-
S.T.E.A.L.T.H
Light Professional
- Príspevky: 933
- Registrovaný: 31 jan 2010, 14:44
- Bydlisko: Pegasus Galaxy
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
To som skusal, ale
Warning: chmod(): Operation not permitted
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Well, hláška ti oznamuje že na vykonanie operácie nemáš potrebné práva.
// Nezachytil som ten rodičovský priečinok. My bad.
// Nezachytil som ten rodičovský priečinok. My bad.
-
S.T.E.A.L.T.H
Light Professional
- Príspevky: 933
- Registrovaný: 31 jan 2010, 14:44
- Bydlisko: Pegasus Galaxy
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Takto, ja potrebuje vytvorit priecinok XY uzivatelom (rucne) a nasledne do toho skopcit skript a nim kvoli istym dovodom nastavit prava na 777. Ked to robim takym sposobom, ze nastavujem prava inemu adresaru, vytvorenemu rovnako rucne uzivatelom a danym skriptom nastavujem 777, tak to je v pohode, ak to ale spravim pre adresar v ktorom je skript hodeny, tak to nejde, ani ked tvrdo nastavim cez terminal chmod -R adresar, a az potom to spustim.
EDIT
Uz som to rozchodil. Trosku znasilnene, ale co uz. Problem bol v tom, ze adresar uz mal prava 777 a prave kvoli tomu vracalo chmod chybu. Aby na tom neskapal skript, tak som tam proste nahodil @chmod a problem solved.
EDIT
Uz som to rozchodil. Trosku znasilnene, ale co uz. Problem bol v tom, ze adresar uz mal prava 777 a prave kvoli tomu vracalo chmod chybu. Aby na tom neskapal skript, tak som tam proste nahodil @chmod a problem solved.
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
http://stackoverflow.com/a/15800917/948909
TL;DR: priečinok je súbor so špecifickým formátom dát. Teda úprava záznamu alebo pridávanie súborov je zápis, zobrazovanie súborov je čítanie a vykonávanie spočíva v prístupe k obsiahnutým súborom. No a situácia: vykonávaš script v priečinku s plným prístupom (0700) a zrazu ti niekto zakáže vykonávanie (0600). Ale čo ak je už súbor otvorený a script sa vykonáva? Aby nedošlo k ďalším problémom, táto operácia zlyhá.
EDIT
chmod ti nikdy nezlyhá preto, lebo znova meníš práva. Aj keby zlyhal, nebol by to error ale FALSE.
@php = goto;

TL;DR: priečinok je súbor so špecifickým formátom dát. Teda úprava záznamu alebo pridávanie súborov je zápis, zobrazovanie súborov je čítanie a vykonávanie spočíva v prístupe k obsiahnutým súborom. No a situácia: vykonávaš script v priečinku s plným prístupom (0700) a zrazu ti niekto zakáže vykonávanie (0600). Ale čo ak je už súbor otvorený a script sa vykonáva? Aby nedošlo k ďalším problémom, táto operácia zlyhá.
EDIT
chmod ti nikdy nezlyhá preto, lebo znova meníš práva. Aj keby zlyhal, nebol by to error ale FALSE.
@php = goto;
-
S.T.E.A.L.T.H
Light Professional
- Príspevky: 933
- Registrovaný: 31 jan 2010, 14:44
- Bydlisko: Pegasus Galaxy
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Tak som teda zle vyhodnotil chybu problemu, co bolo sposobene tvrdenim v predchadzajucom poste, kde Sær tvrdil, ze sa to da. To co pises dava logiku, ale v principe neriesi moj problem, jedine ako odignorovanie chyby z chmod pre dany priecinok, ked rekurzivne nastavuje s chmodom dalscih 100 poadresarov, respektive neviem si predstavit ziadne ine roumne riesenie zatial. Ak by existovalo, tak by to bolo fajn.
Co sa tyka problematiky ktoru riesim, aby bolo jasne a mozno by som sa aj posunul dalej, tak ide o to, ze potrebujem z daneho adresara rozbalovat tar archiv, v principe celu aplikaciu v PHP. Potom potrebujem poupravovat prava pre web server. Len nie som schopny nijak inak ako donutenim uzivatela, aby mi nenechal rozbalovanie do toho iste priecinka ako z ktoreho fici skript, a co, ja osobne by som sa na to vybodol, ale na to som tlaceny z vyssich miest, ze to tak ma byt. Mozno ze nejake ine rady? Dik moc
Co sa tyka problematiky ktoru riesim, aby bolo jasne a mozno by som sa aj posunul dalej, tak ide o to, ze potrebujem z daneho adresara rozbalovat tar archiv, v principe celu aplikaciu v PHP. Potom potrebujem poupravovat prava pre web server. Len nie som schopny nijak inak ako donutenim uzivatela, aby mi nenechal rozbalovanie do toho iste priecinka ako z ktoreho fici skript, a co, ja osobne by som sa na to vybodol, ale na to som tlaceny z vyssich miest, ze to tak ma byt. Mozno ze nejake ine rady? Dik moc
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Ešte môžeš skúsiť chdir na zmenu pracovného priečinka niekde inde a tak zmeniť práva, ale nemusí to fungovať.
Tomu druhému odseku veľmi nerozumiem, aký je tam problém? Máš to rozbaľovať do aktuálneho priečinka a to ti koliduje?
Tomu druhému odseku veľmi nerozumiem, aký je tam problém? Máš to rozbaľovať do aktuálneho priečinka a to ti koliduje?
-
S.T.E.A.L.T.H
Light Professional
- Príspevky: 933
- Registrovaný: 31 jan 2010, 14:44
- Bydlisko: Pegasus Galaxy
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
To, kde sa bude rozbalovat je zavisle na userovi, aku cestu napise, a ta cesta sa moze zhodovat s lokaciou skriptu. To ale nie je problem (samotne rozbalovanie), problem je to, ked chcem nastavit prava toho adresara v ktorom som. Na to chdir sa pozriem 
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
skus vytvárať a nastavovať adresáre cez FTP, tiež som mal obdobný problém:
Kód: Vybrať všetko
/*********************************/
function ftp_mychmod($ftpstream,$chmod,$file) {
$old=error_reporting(); //save old
error_reporting(0); //set to none
$result=ftp_site($ftpstream, "CHMOD ".$chmod." ".$file);
error_reporting($old);//reset to old
return $result; //will result TRUE or FALSE
}
/*********************************/
//create a directory with correct permissions and ftp-user:
function ftp_makedir($dirname) {
$dirname = "public_html/_sub/xxx/files/".$dirname; //start at the right place
$host = "ftp.xxx.sk";
$user = "user";
$pass = "pass";
$conn_id = ftp_connect($host);
$login_result = ftp_login($conn_id, $user, $pass);
if ((!$conn_id) || (!$login_result)) {
//insert error text here;
die;
}
ftp_mkdir($conn_id, $dirname);
ftp_mychmod($conn_id, 755, $dirname);
ftp_quit($conn_id);
}
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Na stope chybe:
/ext/standard/filestat.c:
Riadok 5 pravdepodobne vyhadzuje našu chybu, čiže riadok 3 má funkciu ktorú hľadáme.
/TSRM/tsrm_virtual_cwd.h:
Takže tu sa to mení na normálne systémové volanie.
@dykeer: FTP možno alebo pravdepodobne beží pod iným užívateľom. Buď dostane tú chybu ako predtým (priečinok vytvoril iný užívateľ), alebo sa mu to podarí, ale z hľadiska práv druhého užívateľa.
@S.T.E.A.L.T.H: chdir nebude fungovať. Potrebuješ buď chown od roota, alebo priečinok vytvorený tvojím užívateľom.
/ext/standard/filestat.c:
Kód: Vybrať všetko
imode = (mode_t) mode;
ret = VCWD_CHMOD(filename, imode);
if (ret == -1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
RETURN_FALSE;
}
/TSRM/tsrm_virtual_cwd.h:
Kód: Vybrať všetko
#define VCWD_CHMOD(path, mode) chmod(path, mode)
Čiže vec spočíva v tom, že priečinok ktorému sa snažíš zmeniť práva bol vytvorený iným užívateľom než beží PHP skript.chmod(2) - Linux Man Pages napísal: EPERM
The effective UID does not match the owner of the file, and the process is not privileged (Linux: it does not have the CAP_FOWNER capability).
@dykeer: FTP možno alebo pravdepodobne beží pod iným užívateľom. Buď dostane tú chybu ako predtým (priečinok vytvoril iný užívateľ), alebo sa mu to podarí, ale z hľadiska práv druhého užívateľa.
@S.T.E.A.L.T.H: chdir nebude fungovať. Potrebuješ buď chown od roota, alebo priečinok vytvorený tvojím užívateľom.
-
S.T.E.A.L.T.H
Light Professional
- Príspevky: 933
- Registrovaný: 31 jan 2010, 14:44
- Bydlisko: Pegasus Galaxy
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Jop, uz som to poskusal len som nemal cas napisat, ze chdir nefunguje a co sa tyka ftp, tak aj keby to slo, co mi nejde lebo zjavne nebudem mat nakonfigurovane ftp, kedze som to nerobil, tak je to len dalsia zataz na uzivatela a tomu sa chcem vyhnut.
Co sa tyka toho, ze priecinok je vytvoreny inym userom ako bezi php, tak to je jasne a s tym uz zjavne nepohnem inak ako rootom, cize to budem musiet cele riesit nejak inak
Dakujem aj tak za pomoc. K+
EDIT
Aj ked v ramci toho, ze adresar nei je vytvarany servrom ale akymkolvek inym uzivatelom, tak preco mu je server schopny zmenit prava ak sa nejedna o adresar v ktorom bezi skript.
Co sa tyka toho, ze priecinok je vytvoreny inym userom ako bezi php, tak to je jasne a s tym uz zjavne nepohnem inak ako rootom, cize to budem musiet cele riesit nejak inak
Dakujem aj tak za pomoc. K+
EDIT
Aj ked v ramci toho, ze adresar nei je vytvarany servrom ale akymkolvek inym uzivatelom, tak preco mu je server schopny zmenit prava ak sa nejedna o adresar v ktorom bezi skript.
Re: Nastavenie prav pre rodicovsky adresar skriptu v php
Pravdepodobne to bude pretože je privilegovaný ("CAP_FOWNER capability" alebo "CAP_CHOWN capability" pre chown)S.T.E.A.L.T.H napísal: EDIT
Aj ked v ramci toho, ze adresar nei je vytvarany servrom ale akymkolvek inym uzivatelom, tak preco mu je server schopny zmenit prava ak sa nejedna o adresar v ktorom bezi skript.