Czy ktoś ma fajne rozwiązanie do obsługi plików /var/www
? Prowadzimy wirtualne hosty oparte na nazwie, a użytkownik Apache 2 to dane www .
Mamy dwóch zwykłych użytkowników i root. Więc kiedy zadzierasz z plikami /var/www
, zamiast musieć ...
chown -R www-data:www-data
... cały czas, co jest dobrym sposobem na poradzenie sobie z tym?
Pytanie uzupełniające: Jak bardzo podchodzisz do uprawnień?
Ten zawsze był problemem w środowiskach programistycznych opartych na współpracy.
Odpowiedzi:
Próbując rozwinąć @ Zoredache za odpowiedź , jak dać to pójść sobie:
Utwórz nową grupę (www-pub) i dodaj użytkowników do tej grupy
groupadd www-pub
usermod -a -G www-pub usera
## musi użyć -a, aby dołączyć do istniejących grupusermod -a -G www-pub userb
groups usera
## wyświetla grupy dla użytkownikaZmień własność wszystkiego pod / var / www na root: www-pub
chown -R root:www-pub /var/www
## -R dla rekurencyjnegoZmień uprawnienia wszystkich folderów na 2775
chmod 2775 /var/www
## 2 = ustaw identyfikator grupy, 7 = rwx dla właściciela (root), 7 = rwx dla grupy (www-pub), 5 = rx dla świata (w tym użytkownik apache www-data)Ustaw bit identyfikatora grupy ( SETGID ) (2) powoduje skopiowanie grupy (www-pub) do wszystkich nowych plików / folderów utworzonych w tym folderze. Inne opcje to SETUID (4), aby skopiować identyfikator użytkownika, i STICKY (1), co moim zdaniem pozwala tylko właścicielowi usuwać pliki.
Istnieje
-R
opcja rekurencyjna, ale to nie rozróżnia plików i folderów, więc musisz użyć find , tak:find /var/www -type d -exec chmod 2775 {} +
Zmień wszystkie pliki na 0664
find /var/www -type f -exec chmod 0664 {} +
Zmień umask dla swoich użytkowników na 0002
Umask kontroluje domyślne uprawnienia do tworzenia plików, 0002 oznacza, że pliki będą miały 664, a katalogi 775. Ustawienie tego (edytując
umask
wiersz u dołu/etc/profile
w moim przypadku) oznacza, że pliki utworzone przez jednego użytkownika będą mogły być zapisywane przez innych użytkowników na stronie www- grupa bez potrzebychmod
.Przetestuj to wszystko, tworząc plik i katalog oraz weryfikując właściciela, grupę i uprawnienia za pomocą
ls -l
.Uwaga: musisz wylogować się / zalogować, aby zmiany w grupach zaczęły obowiązywać!
źródło
find
do tego celu polecenie. Jedna mała wskazówka dotycząca wydajności, którą dałbym, jeśli masz dużo plików / katalogów i używasz GNU find, to użycie+
zamiast tego,\;
aby polecenie działało na wielu plikach, ponieważ „szybsze jest uruchomienie polecenia na jak największej liczbie plików naraz, a nie raz na plik. Pozwala to zaoszczędzić czas potrzebny na uruchomienie polecenia za każdym razem. ” Ponadto łatwiej jest pisać, ponieważ nie wymaga odwrotnego ukośnika.usera
iuserb
masz na myśliwww-data
iftpuser
? Uważam to za bardzo mylące z jakąkolwiek wzmianką owww-data
pierwotnym pytaniu. Jaki jest sens / korzyść z ustawienia właścicielaroot
? Czy powinniśmy to ustawićftpuser
?Nie jestem do końca pewien, jak chcesz skonfigurować uprawnienia, ale może to dać ci punkt wyjścia. Prawdopodobnie są lepsze sposoby. Zakładam, że chcesz, aby obaj użytkownicy mogli zmieniać cokolwiek w katalogu / var / www /
Oznacza to, że każdy nowy plik utworzony przez któregokolwiek z użytkowników powinien mieć nazwę użytkownika: www-pub 0664, a każdy utworzony katalog będzie nazwą użytkownika: www-pub 2775. Apache uzyska dostęp do odczytu do wszystkiego za pośrednictwem komponentu „inni użytkownicy”. Bit SETGID w katalogach wymusi, aby wszystkie tworzone pliki były własnością grupy, która jest właścicielem folderu. Konieczne jest dostosowanie umask, aby upewnić się, że bit zapisu jest ustawiony tak, aby każdy w grupie mógł edytować pliki.
Co do tego, jak hardkorowo mam uprawnienia. Zależy to całkowicie od strony / serwera. Jeśli jest tylko 1-2 redaktorów, a ja po prostu muszę ich powstrzymać od zbytniego psucia rzeczy, pójdę łatwo. Gdyby firma wymagała czegoś bardziej złożonego, stworzyłbym coś bardziej złożonego.
źródło
Myślę, że może być pomocne POSIX ACL (listy kontroli dostępu). Pozwalają one na bardziej precyzyjny model uprawnień w porównaniu do użytkownika: grupa: inny model. Odkryłem, że łatwiej jest je zachować prosto w mojej głowie, ponieważ mogę być bardziej wyraźny i mogę również ustawić „domyślne” zachowanie dla gałęzi systemu plików.
Na przykład możesz wyraźnie określić uprawnienia każdego użytkownika:
Możesz to zrobić na podstawie udostępnionej grupy:
Być może chcesz zachować użytkownika Apache jako tylko do odczytu
Strony podręcznika:
Seminarium
źródło
www-data
do odczytu / zapisu w procesie Apache ( na przykład) na tylko do odczytu dla całej witryny (przez setfacl lub chmod - lub oba) -> To oczywiście zablokuje wszystkie zapisy (ładowanie / aktualizowanie wtyczki / modułu od strony przeglądarki na na przykład większość CMS). Uważam, że wiele popularnych testuje również dostęp do zapisu na poziomie uprawnień użytkownika, a nie na poziomie grupy. Nadal możesz aktualizować, ale aktualizacje muszą być stosowane ręcznie, a wszelkie niestandardowe uprawnienia do folderów zapisu (logs / temp / uploads / etc). Tylko do odczytu jest doskonałym zabezpieczeniem, jeśli Twoja witryna z nim współpracuje. Większość z nich nie.Pytanie to zostało zadane ponownie , a jak omówiono w meta, obecne najlepsze praktyki zapewniają lepsze podejście niż było dostępne w 2009 r., Kiedy zostało zadane. Ta odpowiedź stara się podać niektóre obecne rozwiązania w zakresie bezpiecznego zarządzania współpracującymi środowiskami programistycznymi .
Dla bezpiecznego serwera WWW i wspólnego programowania istnieje więcej niż tylko uprawnienia do plików:
Mają osobnego użytkownika dla każdej witryny, tzn. Nie obsługują wszystkich używanych witryn
www-data
. Jest to ważne, ponieważ obecnie Apache rzadko obsługuje wyłącznie pliki statyczne , ale obsługuje dynamiczne strony internetowe. Ta odpowiedź koncentruje się na PHP, ponieważ jest to najpopularniejszy język serwera, ale te same zasady dotyczą również innych.Jeśli masz problem z bezpieczeństwem w jednej witrynie, może ona rozprzestrzenić się na każdą witrynę działającą jako ten sam użytkownik. Osoba atakująca może zobaczyć wszystko, co widzi użytkownik, w tym dane logowania do bazy danych, i zmodyfikować każdą witrynę, do której użytkownik ma uprawnienia do zapisu.
Użyj protokołu przesyłania plików SSH (SFTP). Podczas gdy korzystanie z FTP powinno zostać porzucone ze względu na bezpieczeństwo (ponieważ wysyła zarówno hasła, jak i treść w postaci zwykłego tekstu), jego bezpieczny zamiennik SFTP ma również funkcję, która jest idealnym rozwiązaniem do wspólnego tworzenia stron internetowych.
Po wyodrębnieniu witryn i jednego użytkownika na witrynę musisz dać dostęp programistom, o co chodzi w tym pytaniu. Zamiast dawać im hasła dla tych użytkowników witryny - lub dostęp do plików witryny przy użyciu ich osobistych kont użytkowników, jak pierwotnie sugerowano - możesz użyć kluczy SSH do logowania.
Każdy programista może wygenerować parę kluczy i zachować klucz prywatny w tajemnicy. Następnie klucz publiczny jest dodawany do
~/.ssh/authorized_keys
pliku dla każdego konta użytkownika witryny, nad którym pracuje programista. Ma to wiele zalet w zakresie zarządzania hasłami i loginami:Każdy programista może mieć dostęp do dowolnej liczby stron internetowych bez konieczności zapamiętywania lub przechowywania wszystkich haseł związanych z umową użytkownika na witrynę.
Nie trzeba zmieniać i udostępniać haseł za każdym razem, gdy ktoś opuszcza firmę.
Możesz użyć bardzo silnych haseł lub całkowicie wyłączyć logowanie oparte na hasłach.
Użyj PHP-FPM . Jest to obecne podejście do uruchamiania PHP jako użytkownika. Utwórz nową pulę dla każdego użytkownika, tj. Jedną pulę na każdą witrynę. Jest to najlepsze pod względem bezpieczeństwa i wydajności, ponieważ można również określić, ile zasobów może zużyć pojedyncza witryna.
Zobacz np. Uruchom php-fpm z NeverEndingSecurity z osobnym użytkownikiem / identyfikatorem użytkownika i grupą w systemie Linux . Istnieją samouczki, takie jak HowtoForge Używanie PHP-FPM z Apache na Ubuntu 16.04 , który nie używa PHP-FPM do zwiększania bezpieczeństwa poprzez separację użytkowników, wskazując na użycie jednego gniazda FPM na serwerze.
źródło