GNU/Linux >> Znalost Linux >  >> Linux

Jaký je nejlepší způsob zpracování oprávnění pro uživatele www-data Apache 2 v /var/www?

Řešení 1:

Pokusím se rozšířit odpověď @Zoredache, když to sám zkouším:

  • Vytvořte novou skupinu (www-pub) a přidejte uživatele do této skupiny

    groupadd www-pub

    usermod -a -G www-pub usera ## musí použít -a pro připojení k existujícím skupinám

    usermod -a -G www-pub userb

    groups usera ## zobrazení skupin pro uživatele

  • Změňte vlastnictví všeho pod /var/www na root:www-pub

    chown -R root:www-pub /var/www ## -R pro rekurzivní

  • Změňte oprávnění všech složek na 2775

    chmod 2775 /var/www ## 2=set group id, 7=rwx pro vlastníka (root), 7=rwx pro skupinu (www-pub), 5=rx pro world (včetně Apache www-data uživatele)

    Bit nastavení ID skupiny (SETGID) (2) způsobí, že se skupina (www-pub) zkopíruje do všech nových souborů/složek vytvořených v této složce. Dalšími možnostmi jsou SETUID (4) pro zkopírování ID uživatele a STICKY (1), která podle mého názoru umožňuje smazat soubory pouze vlastníkovi.

    Je tam -R rekurzivní možnost, ale ta nebude rozlišovat mezi soubory a složkami, takže musíte použít najít, například takto:

    find /var/www -type d -exec chmod 2775 {} +

  • Změňte všechny soubory na 0664

    find /var/www -type f -exec chmod 0664 {} +

  • Změňte umask pro své uživatele na 0002

    Umask řídí výchozí oprávnění k vytváření souborů, 0002 znamená, že soubory budou mít 664 a adresáře 775. Nastavení (úpravou umask řádek v dolní části /etc/profile v mém případě) znamená, že soubory vytvořené jedním uživatelem budou moci zapisovat ostatní uživatelé ve skupině www, aniž by bylo nutné chmod je.

To vše otestujte vytvořením souboru a adresáře a ověřením vlastníka, skupiny a oprávnění pomocí ls -l .

Poznámka:Aby se změny ve vašich skupinách projevily, musíte se odhlásit/přihlásit!

Řešení 2:

Nejsem si úplně jistý, jak chcete nakonfigurovat oprávnění, ale může vám to poskytnout výchozí bod. Pravděpodobně existují lepší způsoby. Předpokládám, že chcete, aby oba uživatelé mohli cokoliv změnit pod /var/www/

  • Vytvořte novou skupinu (www-pub) a přidejte uživatele do této skupiny.
  • Změňte vlastnictví všeho pod /var/www na root:www-pub.
  • Změňte oprávnění všech složek na 2775
  • Změňte všechny soubory na 0664.
  • Změňte umask pro své uživatele na 0002

To znamená, že jakýkoli nový soubor vytvořený kterýmkoli z vašich uživatelů by měl být username:www-pub 0664 a jakýkoli vytvořený adresář bude username:www-pub 2775. Apache získá přístup pro čtení ke všemu prostřednictvím komponenty 'ostatní uživatelé'. Bit SETGID v adresářích vynutí, aby všechny vytvářené soubory byly vlastněny skupinou, která složku vlastní. Je potřeba upravit umask, abyste se ujistili, že zápisový bit je nastaven tak, aby kdokoli ve skupině mohl upravovat soubory.

Pokud jde o to, jak hardcore jdu na oprávnění. Zcela záleží na webu/serveru. Pokud jsou tam jen 1-2 redaktoři a já je prostě potřebuji udržet v rozbití věcí příliš špatně, pak půjdu jednoduše. Pokud by podnikání vyžadovalo něco složitějšího, založil bych něco složitějšího.

Řešení 3:

Myslím, že vám může pomoci POSIX ACL (seznamy řízení přístupu). Umožňují jemnější model oprávnění ve srovnání s modelem uživatel:skupina:jiný. Zjistil jsem, že je snazší udržet si je v hlavě, protože mohu být explicitnější a mohu také nastavit "výchozí" chování pro větev souborového systému.

Můžete například explicitně zadat oprávnění každého uživatele:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

Nebo to můžete udělat na základě nějaké sdílené skupiny:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

A možná si chcete ponechat svého uživatele Apache jako pouze pro čtení

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

Manuálové stránky:

  • setfacl
  • getfacl

Tutoriál

Řešení 4:

Tato otázka byla položena znovu, a jak bylo diskutováno na meta, současné osvědčené postupy poskytují lepší přístupy, než jaké byly k dispozici v roce 2009, kdy byla tato otázka položena. Tato odpověď se snaží poskytnout některá aktuální řešení pro bezpečné zacházení s prostředími pro vývoj webu pro spolupráci .

Pro bezpečný webový server a vývoj ve spolupráci existuje více než jen oprávnění k souborům:

  • Mějte pro každý web samostatného uživatele tj. nezobrazujte všechny weby pomocí www-data . To je důležité, protože v současnosti Apache jen zřídka slouží pouze staticky soubory obsahu, ale běží dynamicky webové stránky. Tato odpověď se zaměřuje na PHP, protože je to nejběžnější jazyk serveru, ale stejné principy platí i pro ostatní.

    Pokud máte problém se zabezpečením na jednom webu, může se rozšířit na každý web, který běží jako stejný uživatel. Útočník může vidět vše, co uživatel vidí, včetně přihlašovacích údajů k databázi, a upravit každý web, na který má uživatel oprávnění k zápisu.

  • Použijte SSH File Transfer Protocol (SFTP). Zatímco používání FTP by se mělo z bezpečnostních důvodů opustit (protože odesílá hesla i obsah v prostém textu), je to bezpečná náhrada SFTP má také funkci, která je perfektním řešením pro vývoj webu ve spolupráci.

    Jakmile izolujete weby a jednoho uživatele na web, musíte udělit přístup svým webovým vývojářům, o čem tato otázka je. Namísto poskytování hesel pro tyto uživatele webu – nebo přístupu k souborům webu pomocí jejich osobních uživatelských účtů, jak bylo původně navrženo – můžete pro přihlášení použít klíče SSH.

    Každý vývojář může vygenerovat pár klíčů a udržet soukromý klíč v tajnosti. Poté je veřejný klíč přidán do ~/.ssh/authorized_keys soubor pro každý uživatelský účet webu, na kterém vývojář pracuje. To má mnoho výhod pro správu hesel a přihlášení:

    • Každý vývojář může mít přístup k libovolnému počtu webových stránek, aniž by si musel pamatovat nebo ukládat všechna hesla související s uspořádáním jednotlivých stránek.

    • Není třeba měnit a sdílet hesla pokaždé, když někdo opustí společnost.

    • Můžete použít velmi silná hesla nebo přihlášení založené na hesle úplně zakázat.

  • Používejte PHP-FPM . Je to aktuální přístup pro spouštění PHP jako uživatele. Vytvořte nový pool pro každého uživatele, tj. jeden fond na každý web. To je nejlepší pro zabezpečení i výkon, protože můžete také určit, kolik zdrojů může jeden web spotřebovat.

    Viz např. NeverEndingSecurity's Run php-fpm se samostatným uživatelem/uid a skupinou na linuxu. Existují výukové programy jako HowtoForge Použití PHP-FPM s Apache na Ubuntu 16.04, které nepoužívá PHP-FPM pro zvýšení bezpečnosti prostřednictvím oddělení uživatelů, což vede k použití jednoho FPM socketu na serveru.


Linux
  1. Jaký je nejlepší způsob, jak vyslat signál všem členům procesní skupiny?

  2. K čemu se používá skupina `shadow`?

  3. oprávnění k zápisu odepřeno přes filezilla sftp do /var/www/html

  1. /etc/passwd zobrazuje uživatele ve skupině, ale /etc/group nikoli

  2. Jaký je nejlepší způsob, jak se naučit SELinux?

  3. Jaký je rozdíl mezi /tmp a /run?

  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Omezit přístup k FTP pouze na /var/www pomocí Vsftpd?

  3. Jak nastavit oprávnění linux pro složku WWW?