it-swarm-eu.dev

Jaký uživatel by měl Apache a PHP běžet jako? Jaká oprávnění by měla mít soubory / var / www?

Právě jsem točil do krabice Ubuntu 11.10 a pak jsem běžel apt-get install Apache2 php5 nainstalovat Apache2 a PHP 5). Nyní to funguje jako "webový server" a načte stránku "Funguje to!". Nyní se snažím zpřísnit bezpečnost a mám následující otázky týkající se linuxových webových serverů:

  1. Kdo by měl Apache běžet?
  2. Ve kterých skupinách by měl být tento uživatel?
  3. Jaké balíčky mohou způsobit, že PHP (a Apache?) Běží jako vlastník souborů? (Jako na sdílených webových hostitelích) Měl bych tyto balíčky používat? Je snadná/proveditelná údržba na malém systému?
  4. Jaká by měla být výchozí oprávnění pro soubory a složky doručované na web s Apache spuštěným jako www-data? Je Apache/php spuštěn jako uživatel?

Při zkoumání výchozího nastavení jsem provedl následující věci:

Struktura souboru

Když já cd / a udělejte ls -al výpis obsahu, vidím /var:

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

Pokud jsem cd do var a udělal ls -al Chápu:

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

Konečně, uvnitř /var/www Chápu:

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

Můj klíč s sebou je, že zatím všechny tyto soubory patří uživateli root:root, soubory mají oprávnění 644 a adresáře mají oprávnění 755.

Apacheova oprávnění

Pokud vytvořím soubor jako root v /var/www/test.php s obsahem:

<?php echo Shell_exec('whoami');

a načíst tento soubor do prohlížeče, řekne mi to www-data, což je stejné jako v /etc/Apache2/envvars file:

export Apache_RUN_USER=www-data
export Apache_RUN_GROUP=www-data

Pokud ano ps aux | grep -i Apache Vidím následující:

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/Apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/Apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/Apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start

Kdo tedy Apache běží? Vypadá to, že první proces je asi jako root, možná z /etc/init.d/Apache skript při spuštění systému a ostatní jako www-data vynořil se od prvního. Je to správně?

Dále, pokud napíšu groups www-data pak uvidím www-data : www-data - tak to vypadá, že je pouze v www-data skupina. Hádám, že je to také standardní praxe.

Sdílený hosting a zabezpečení

Takže pokud rozumím věcem správně, pokud Apache běží jako www-data a já chci, aby Apache mohl číst adresář, bit x musí být nastaven pro světovou (jinou) skupinu (o+x), a to musí být také nastaveno na všech nadřazených adresářích až po řetězec (www, var). A pokud chci, aby Apache mohl číst ze souboru, pak o+r bit musí být nastaven.

Bohužel se domnívám, že to představuje bezpečnostní otvor pro více aplikací a/nebo více uživatelů ve stejné linuxové krabici: Všechny webové soubory musí být čitelné na celém světě, a proto jsou přístupné i jiným aplikacím a jiným uživatelům v systému. Pokud by jedna aplikace nainstalovaná v systému měla bezpečnostní chybu, která by umožňovala surový, neplatný uživatelský vstup, který byl poté spuštěn pomocí PHP, mohl by vzdálený útočník procházet všechny ostatní soubory na webovém systému, které byly světově čitelné. Podobně, pokud by pole mělo více uživatelů a uživatel znal cestu webových souborů jiného uživatele, mohl by číst obsah souboru (a vidět citlivé věci, jako jsou řetězce připojení k databázi atd.).

Slyšel jsem o dvou balíčcích suphp a phpsuexec, které se zabývají povolením doručování souborů uživatelů „jako oni“ ve sdíleném systému. Jednou z výhod tohoto řešení je to, že umožňuje webovým aplikacím (jako je Wordpress) vytvářet a upravovat soubory - velmi užitečné pro přidávání témat, pluginů a upgradování softwaru. Samozřejmě je pravděpodobně bezpečnější dělat tyto věci ručně, ale je možné dosáhnout kompromisu s některým z výše uvedených balíčků? Nebo možná pomocí chown, aby se adresářová skupina wordpress adresářová skupina patřila k www-data a nastavte lepkavý bit ve skupině (g+s)?

Použil jsem je pouze jako koncový uživatel webhostingové společnosti, a proto nevím, jaké jsou jejich vstupy a výstupy, a pokud je dokonce možné je nainstalovat na malý systém, nebo pokud existují i ​​jiné bezpečnostní opatření, která bych měl místo toho použít, ale myslel jsem, že bych je zde zmínil, protože se jeví jako jeden z možných způsobů řešení některých mých obav.

Zpět na otázky

  1. Kdo by měl Apache běžet?
  2. Ve kterých skupinách by měl být tento uživatel?
  3. Jaké balíčky mohou způsobit, že PHP (a Apache?) Běží jako vlastník souborů? (Jako na sdílených webových hostitelích) Měl bych tyto balíčky používat? Je snadná/proveditelná údržba na malém systému?
  4. Jaká by měla být výchozí oprávnění pro soubory a složky doručované na web s Apache spuštěným jako www-data? Je Apache/php spuštěn jako uživatel?
41
cwd
  1. ne root
  2. ne root
  3. SuEXEC
  4. Závisí to. 644 pro soubory a 755 pro složky jsou bezpečným výchozím nastavením.

Neměňte nic na www-data, pokud nechcete, aby php mohl editovat obsah tohoto souboru/složky

Bez ohledu na cokoli, co děláte: složky potřebují číst a vykonávat oprávnění pro uživatele k nalezení souborů; soubory potřebují ke čtení oprávnění uživatele. Pokud se při změně věci vyskytnou nějaké chyby oprávnění, podařilo se vám odstranit tato nezbytně požadovaná oprávnění.

Pokud nepíšete soubory pomocí aplikace php, můžete nechat soubory, které vlastníte: vy. Za těchto okolností platí světové povolení (xx4/5).

Pokud necháte soubory ve vašem vlastnictví: vy s oprávněními k souborům 644 (soubory), co by to znamenalo, je to, že můžete upravovat soubory webových stránek - www-data nejsou vy - takže nemůže upravovat soubory.

Pokud chcete omezit přístup k Apache + vy a zablokovat všechny ostatní přístupy chown -R you:www-data *. S oprávněním k souboru 640 a oprávněním ke složce 750 můžete editovat, www-data mohou číst - protože pak Apache přečte skupinové oprávnění (x4/5x).

Omezte na minimum cest, na které chcete Apache/php zapisovat - pokud existuje tmp dir, do kterého aplikace potřebuje zapisovat - povolte jí zapisovat do do této složky - a pro všechna zapisovatelná umístění, pokud je to vůbec možné, se ujistěte, že je mimo kořen dokumentu nebo podnikněte kroky k zajištění, že tato zapisovatelná cesta není přístupná na webu.

Všimněte si, že „vy“ byste neměli být root. Povolení přímého ssh přístupu jako root je indikátorem dalších bezpečnostních chyb (například nikoli nepovolující přihlášení k heslu), ale to je samo o sobě celá řada otázek.

17
AD7six

Takže pokud rozumím věcem správně, pokud Apache běží jako www-data a chci, aby Apache mohl číst adresář, musí být x bit nastaven pro světovou (jinou) skupinu (o + x), a to také musí být nastavena na všech nadřazených adresářích až po řetězec (www, var). A pokud chci, aby Apache mohl číst ze souboru, musí být nastaven bit o + r.

To není pravda, nemusíte nastavit rwx pro 'other'. Měli byste změnit vlastníka nebo skupinu konkrétní složky/souboru, který se pokoušíte chránit. Např.:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

Nyní pouze členové skupiny www-data umí číst /var/www/cwd.com. A můžete to napsat jen vy (cwd). Pokud chcete povolit aplikacím (prostřednictvím Apache) také zapisovat/upravovat soubory v tomto adresáři, změňte jej na 770.

Myslím, že se to týká všech vašich problémů, nevidím žádný důvod ke změně uživatele, pod kterým Apache běží.

10
Rob Wouters