Permisiuni Apache www pentru scriptul php (Administrarea sistemului, Ubuntu, Php, Securitate, Permisiuni, Apache2)

Phatair a intrebat.

Am un script php care rulează o rețea socială privată. Rulează pe un Ubuntu 16.04.03 cu o configurație mariadb și apache 2 și php7.

Am creat un folder nou în /var/www/myscript și am copiat toate fișierele în acest folder.

Întrebarea mea este acum, ce permisiuni sunt necesare pentru a face configurația sigură. Este sigur să setez toate fișierele la 640 și toate folderele la 750, iar proprietarul și utilizatorul la www-data?

Am găsit acest tutorial, http://fideloper.com/user-group-permissions-chmod-apachePermisiunile arată diferit, sunt bune și aceste permisiuni?

Ar fi minunat dacă cineva mă poate ajuta. Vă mulțumesc foarte mult. Cele mai bune salutări

Comentarii

  • De obicei, nu revizuim alte manuale și ghiduri, dar aruncați o privire la acest Q&A canonic serverfault.com/q/357108/37681 –  > Por HBruijn.
3 răspunsuri
Alexis Wilke

Depinde foarte mult de CMS-ul dumneavoastră.

De fapt, chiar nu-mi place 99% din CMS-urile disponibile acolo. Toate fișierele lor PHP merg în arborele public Apache, ceea ce înseamnă că clienții au acces la ele. Asta nu este sigur. Acestea ar trebui să fie într-un loc în care clientul nu le poate accesa. Acestea fiind spuse, se poate spune că index.php trebuie să fie public (evident?) și alte câteva fișiere, în funcție de CMS-ul dumneavoastră. Restul ar putea fi într-un folder la care Apache nu dă acces clientului. Atunci permisiunile devin mult mai puțin problematice.

Să zicem că aveți un folder numit public_html în care Apache ca acces, ați putea avea o structură care să arate astfel:

/var/www/example.com
/var/www/example.com/php  -- put your PHP scripts here
/var/www/example.com/data  -- whatever data files (XML, templates, non-public)
/var/www/example.com/public_html  -- only folder accessible by Apache
/var/www/example.com/public_html/index.php  -- the PHP that handles the CMS

Acum… Proprietatea, cu excepția cazului în care utilizați un CMS precum WordPress care dorește să se actualizeze automat, fișierele trebuie să poată fi scrise de către utilizatorul Apache2 (www-data pentru Ubuntu). În toate celelalte cazuri, ar trebui să setați utilizatorul și grupul la un alt utilizator decât www-data și să vă asigurați că Apache NU are permisiunea de a modifica aceste fișiere. Asigurați-vă că le poate citi (poate că altcineva are „r” pentru fișiere (644) și „r-x” pentru directoare (755).).

Să spunem că folosiți rsync pentru a face actualizările și dați rsync permisiunea de a scrie fișiere ca utilizator www. Acum ați putea face ca toate aceste fișiere să fie deținute de www și nu www-data iar actualizarea va funcționa foarte bine.

Evident, dacă aveți o funcție de încărcare care salvează fișiere pe serverul web, atunci acel director trebuie să poată fi scris de către www-data. De asemenea, aceste fișiere ar trebui să facă obiectul unei copii de siguranță (ca și baza de date), deoarece sunt accesibile (a se citi: hackabile) de către clienți. Având în vedere că aveți un intranet, acest lucru poate fi mai puțin îngrijorător, deși majoritatea întreprinderilor mari raportează că majoritatea pierderilor de date sunt cauzate de personalul care lucrează acolo și nu de hackeri din exterior. Un lucru de care trebuie să țineți cont.

Ceva de genul acesta funcționează pentru astfel de fișiere:

mkdir /var/www/example.com/public_html/download
chown www-data:www-data /var/www/example.com/public_html/download
chmod 775 /var/www/example.com/public_html/download

Calea către aceste fișiere poate fi diferită, după cum consideră CMS-ul că este potrivit, deși fișierele efective ar putea fi într-un singur director mare (este rapid indiferent de numărul de fișiere).

patok

Dacă nu aveți cu adevărat nevoie, nu setați permisiunea de scriere pentru niciun fișier sau dosar. de obicei, setați permisiunea de scriere doar pentru un dosar tmp sau pentru fișierele de configurare care trebuie să fie scrise de aplicația însăși. deși nu este chiar o greșeală să aveți permisiunea de scriere pe oricare dintre fișierele sau dosarele dvs., ar trebui să luați întotdeauna în considerare faptul că aplicația pe care o executați ar putea avea o gaură de securitate și atunci atacatorul este liber să salveze scripturi personalizate oriunde dorește, să vă scrie configurațiile etc.

Phatair

Vă mulțumesc foarte mult pentru ajutor.

Dacă înțeleg corect toate sfaturile ar trebui să fac următoarele:

proprietarul de /var/www/mysite și toate fișierele și subfolderele nu ar trebui să fie www-data (este în regulă să setați la root?)Grupul de /var/www/mysite și toate fișierele și subfolderele ar trebui să fie www-data

Toate fișierele ar trebui să fie 644 sau mai bine 640 și directorii 755 sau 750?Dacă utilizatorul încarcă fișiere de pe site, am un folder /var/www/mysite/uploads și în acest folder voi seta www-data ca proprietar și grup și voi seta permisiunea la 775.

În momentul de față, dosarul meu arată astfel:

/var/www/mysite -> root:www-data (pentru toate fișierele și folderele)fișierele au 640 de permisiunifolderele au 750 de permisiuni

Este aceasta o configurație care pare ok și sigură sau ar trebui să schimb utilizatorul din root în utilizatorul pe care îl folosesc pentru întreținerea serverului?

vă mulțumesc încă o dată pentru ajutor.