Nastavenie prav pre rodicovsky adresar skriptu v php

Programovacie jazyky, rady, poradňa...
S.T.E.A.L.T.H
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 933
Registrovaný: 31 jan 2010, 14:44
Bydlisko: Pegasus Galaxy

Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa S.T.E.A.L.T.H »

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
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

<?php
chmod("../", 777);
?>
S.T.E.A.L.T.H
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 933
Registrovaný: 31 jan 2010, 14:44
Bydlisko: Pegasus Galaxy

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa S.T.E.A.L.T.H »

To som skusal, ale
Warning: chmod(): Operation not permitted
Sær
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 53
Registrovaný: 17 dec 2013, 15:10

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa Sær »

Well, hláška ti oznamuje že na vykonanie operácie nemáš potrebné práva.

// Nezachytil som ten rodičovský priečinok. My bad.
S.T.E.A.L.T.H
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 933
Registrovaný: 31 jan 2010, 14:44
Bydlisko: Pegasus Galaxy

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa S.T.E.A.L.T.H »

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.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa pcsiete »

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;
:samovrazda:
S.T.E.A.L.T.H
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 933
Registrovaný: 31 jan 2010, 14:44
Bydlisko: Pegasus Galaxy

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa S.T.E.A.L.T.H »

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
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa pcsiete »

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?
S.T.E.A.L.T.H
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 933
Registrovaný: 31 jan 2010, 14:44
Bydlisko: Pegasus Galaxy

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa S.T.E.A.L.T.H »

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 :)
dykeer
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 102
Registrovaný: 02 jan 2011, 21:21
Kontaktovať používateľa:

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa dykeer »

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); 
} 

pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa pcsiete »

Na stope chybe:

/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;
}
Riadok 5 pravdepodobne vyhadzuje našu chybu, čiže riadok 3 má funkciu ktorú hľadáme.

/TSRM/tsrm_virtual_cwd.h:

Kód: Vybrať všetko

#define VCWD_CHMOD(path, mode) chmod(path, mode)
Takže tu sa to mení na normálne systémové volanie.
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).
Č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.
@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
Light Professional
Používateľov profilový obrázok
Príspevky: 933
Registrovaný: 31 jan 2010, 14:44
Bydlisko: Pegasus Galaxy

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa S.T.E.A.L.T.H »

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.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Nastavenie prav pre rodicovsky adresar skriptu v php

Príspevok od používateľa pcsiete »

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.
Pravdepodobne to bude pretože je privilegovaný ("CAP_FOWNER capability" alebo "CAP_CHOWN capability" pre chown)
Napísať odpoveď