» »

Kako zaščititi /uploads direktorij?

Kako zaščititi /uploads direktorij?

Nor-mal ::

Pozdravljeni,

imam Ubuntu LAMP stack in web aplikacijo, ki je v 90% narejena. Torej PHP + MySQL baza. Zamislil sem si tako, da imel na strani html form, preko katerega bi lahko (LE PRIJAVLJEN UPORABNIK, IN ŠE TA BI MORAL IMETI POSEBNE ADMINISTRATORSKE PRAVICE) uporabnik uploadal določene vrste datotek v direktorij /var/www/uploads.

Zanima pa me sledeče: kako zavarovati /uploads direktorij, da ni možen noben neposredni dostop, ampak je omogočeno manipuliranje (branje, pisanje) samo preko te web aplikacije?

Nor-mal ::

Recimo
v Linuxu imaš root, grupo in ostale za pravice NA PRIMER drwxrwxrwx...
KAKO SE TRETIRA uporabnik, ki je obiskovalec spletne strani, ki se nahaja na tem strežniku, in ki želi nekaj manipulirat s tem direktorijem?
Ali je ta obiskovalec te spletne strani, ki se nahaja na tej mašini, ali spada pod root, ali pod grupo ali pod ostale?

Zgodovina sprememb…

  • spremenil: Nor-mal ()

KernelPanic ::

Jst mislim, da za uporabnika nakljucnega, ki pride na webpage, veljajo pravice od Others (zadnji trojcek rwx) ... Nism pa zihr ...

Zgodovina sprememb…

Nor-mal ::

Da boste razumeli...

Na strani imam prijavno okno, kamor se prijavljajo "navadni uporabniki", ali pa "administratorji". Če se prijavi "administrator", se pokaže html form za uploadanje datotek tipa .jpg .gif .png .zip .rar. Ta datoteka, ki jo vnese "administrator" v html form in pritisne "pošlji", se nato uploada v direktorij /uploads na strežniku.

Zdej pa, zanima me, na kaj moram paziti pri vsem tem, torej ali je treba /uploads direktorij kako zaščititi (nočem, da bi lahko kdorkoli v browserju vtipkal /uploads in bi se mu prikazala vsebina, ali pa da bi nekako zaobšel prijavo in dobil celo pravice pisanja v ta direktorij na kakšen drug način!!!).

Torej, kaj moram storiti v zvezi z zaščito /uploads direktorija??


Hvala za odgovore!

Zgodovina sprememb…

  • spremenil: Nor-mal ()

KernelPanic ::

Mislim, da so te userji, ki jih ti prebers z html formo, zabelezeni v sami podatkovni bazi in da to ni direkten server user, tako, da, po moje se vedno velja, tisto, kar sem napisal ...

Nor-mal ::

Ja, ti userji so sicer "root" za mysql podatkovno bazo... A če so root za MySQL bazo, pomeni, da so root tudi za server?? Ali so pač vedno pod "Others", četudi so za Mysql bazo "root"??

Ali to pomeni, da če želim uploadat v var/www/uploads direktorij, da moram dati pravice drwxrw-rw-, drugače ne bo uploadalo in potem prebralo uploadane fajle?

KernelPanic ::

Linux sam o userjih za mysql ne vec prav nicesar, ker so loceni. Mislim, da so se vedno pod Others ...

Nor-mal ::

Samo če dam drwxrw-rw-, potem bo lahko kdorkoli samo v naslovno vrstico browserja napisal /uploads in bo lahko prebral fajle (mogoče celo uploadal nove fajle ne da bi se prijavil?)?

Googlal sem za rešitev, pa eni omenjajo da v .htaccess nastaviš geslo, drugi pa, da naj bo mapa /uploads zunaj mape /var/www, torej nekje drugje na disku... Res ne vem, kako to realizirat, da ne bo nobenega security hole-a.

Zgodovina sprememb…

  • spremenil: Nor-mal ()

usoban ::

Nevem sicer tocno, ampak mozni sta sam dve varjatni ... al je kot webserver, al pa avtomaticno kot 'others', najbolje da probas.
In ce je webserver user, pol tudi pazi al je ta lastnik mape oz. spada v grupo.

edit: lahko tudi onemogocis prikazovanje datotek v mapi z IndexIgnore *

Zgodovina sprememb…

  • spremenil: usoban ()

Nor-mal ::

Sej, dosti bolj kot preprečevanje prikazovanja (listinga) tega uploads direktorija, me skrbi, da bi user nekako zaobšel prijavo in lahko uploadal v /uploads brez prijave preko strani.

No ja, najprej moram dodati in popraviti še nekaj drugih stvari, pol pa bom lahko vse te zadeve sprobal, pa se bom že znajdu.

Zgodovina sprememb…

  • spremenil: Nor-mal ()

radiokills ::

Za uporabnika, ki pride na stran, veljajo pravice za apache userja. Uporabnika se nastavi (tipično, odvisno pač od distro flavorja) v httpd.conf. Direktivi sta 'User' in 'Group'. (Ubuntu ima za oboje nastavljeno 'www-data')

Torej, fajli ki jih bodo nalagali administratorji, bodo v ownershipu www-data:www-data. Ustrezno temu moraš imeti nastavljene pravice na '/upload ' folderju. Torej, dovolit www-data userju da piše/bere, ter naštimat ownership na www-data. Nekako takole (izvajaš iz root folderja aplikacije)
$ chown  www-data:www-data ./uploads
$ chmod u+rw ./uploads


Da ti pa kdo slučajno ne uleti direktno v /uploads folder in vidi vse fajle, lahko rešiš po kmečko in postaviš v folder prazen index.php, lahko pa to rešiš kot je treba z ustrezno apache konfiguracijo ali z .htaccess fajlom (poguglej: 'Disable directory browsing using .htaccess'). Premisli tudi o ustrezni datoteki robots.txt, da ti ne bo google indeksiral vsebine folderja (gugl: 'robots.txt disalow folder').

Nor-mal ::

radiokills je izjavil:

Za uporabnika, ki pride na stran, veljajo pravice za apache userja. Uporabnika se nastavi (tipično, odvisno pač od distro flavorja) v httpd.conf. Direktivi sta 'User' in 'Group'. (Ubuntu ima za oboje nastavljeno 'www-data')

Torej, fajli ki jih bodo nalagali administratorji, bodo v ownershipu www-data:www-data. Ustrezno temu moraš imeti nastavljene pravice na '/upload ' folderju. Torej, dovolit www-data userju da piše/bere, ter naštimat ownership na www-data. Nekako takole (izvajaš iz root folderja aplikacije)

$ chown www-data:www-data ./uploads
$ chmod u+rw ./uploads


Da ti pa kdo slučajno ne uleti direktno v /uploads folder in vidi vse fajle, lahko rešiš po kmečko in postaviš v folder prazen index.php, lahko pa to rešiš kot je treba z ustrezno apache konfiguracijo ali z .htaccess fajlom (poguglej: 'Disable directory browsing using .htaccess'). Premisli tudi o ustrezni datoteki robots.txt, da ti ne bo google indeksiral vsebine folderja (gugl: 'robots.txt disalow folder').


Hvala, mojster si! Imam pa še eno podvprašanje - če na ta ali oni način disablam listing/browsing direktorija, ali bo to tudi preprečilo, da bi lahko user mimo sistema avtentikacije karkoli uploadal v ta direktorij? Pravice za www-data so namreč RW...

Zgodovina sprememb…

  • spremenil: Nor-mal ()

radiokills ::

Ne, v .htaccess so direktive, ki so namenjene samo apacheju. Poskrbi, da nihče drug nima kakega ssh, ftp, web-dav ali kakega drugega neposrednega dostopa do filesystema. Pravice za www-data pa morajo biti RW, saj sicer tvoja aplikacija ne bo mogla zapisovati v ta folder.

Nato poskrbi za varnost na ravni aplikacije (vkolikor si poskrbel za prejšnji odstavek, je edini način, da kdo kaj zapiše, preko tvoje aplikacije). Glede na to da omenjaš nivoje dostopa, verjetno upload formo že skrivaš pred navadnimi uporabniki, preveri npr. še nivo uporabnika neposredno po submitu forme, poskrbi da so register_globals na off (mislim, da so po defaultu, sem malo ven iz php-ja). Poguglaj za 'php security' in si preberi tale članek :)

Nor-mal ::

radiokills je izjavil:

Poskrbi, da nihče drug nima kakega ssh, ftp, web-dav ali kakega drugega neposrednega dostopa do filesystema.


Hvala! Kako pa za to poskrbiš?

usoban ::

tako da ne razdajas gesel :D

Namesto FTP uporabi FTPS ali SFTP (pri FTP se gesla posiljajo kot plain-text), pa za SSH uporabi certifikate namesto user/pass avtentikacije in custom port. Pa seveda, ce ze gesla, potem uporabi primerna.

Nor-mal ::

usoban je izjavil:

tako da ne razdajas gesel :D

Namesto FTP uporabi FTPS ali SFTP (pri FTP se gesla posiljajo kot plain-text), pa za SSH uporabi certifikate namesto user/pass avtentikacije in custom port. Pa seveda, ce ze gesla, potem uporabi primerna.


Em, ZA ZAČETEK bo stran hostana kar na moji mašini, za začetek bom samo registriral domeno in jo povezal s svojim serverjem. Predvidevam, da potemtakem lahko imam odprt le port 80 za HTTP in nič drugega?

Ko in če bom prešaltal na spletno gostovanje, se bom oglasil z novimi vprašanji :).

Zgodovina sprememb…

  • spremenil: Nor-mal ()

MrBrdo ::

V kolikor boš imel server v LANu s svojim domačim računalnikom potem je dovolj da odpreš port 80. Drugače rabiš odpret še ssh ali telnet ali ftp oz. nekaj preko česar boš lahko "administriral" strežnik.
MrBrdo


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Postavitev mySQL

Oddelek: Programiranje
92236 (1814) M01O
»

clarkconnect rabim poomoč pri inštaliranju! (strani: 1 2 3 4 5 )

Oddelek: Operacijski sistemi
23016635 (8174) Gapi
»

hacked?

Oddelek: Izdelava spletišč
131991 (1329) sverde21
»

Linux

Oddelek: Operacijski sistemi
101323 (1076) der_Alte
»

Uporabniške pravice nad mapami in datotekami v Linuxu

Oddelek: Operacijski sistemi
101580 (1485) lukaz

Več podobnih tem