Ř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ámusermod -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.