Zaktualizowano podsumowanie
Katalog / var / www jest własnością, root:root
co oznacza, że nikt nie może go używać i jest całkowicie bezużyteczny. Ponieważ wszyscy chcemy, aby serwer WWW faktycznie działał (i nikt nie powinien logować się jako „root”), musimy to naprawić.
Tylko dwa podmioty potrzebują dostępu.
PHP / Perl / Ruby / Python potrzebują dostępu do folderów i plików, ponieważ tworzą wiele z nich (tj
/uploads/
.). Te języki skryptowe powinny działać pod nginx lub apache (lub nawet innymi rzeczami, takimi jak FastCGI dla PHP).Deweloperzy
Jak uzyskują dostęp? Wiem, że ktoś już to kiedyś robił. Przy tak wielu miliardach stron internetowych można by pomyśleć, że będzie więcej informacji na ten temat.
Wiem, że 777 to pełne uprawnienie do odczytu / zapisu / wykonania dla właściciela / grupy / innej osoby. Nie wydaje się to konieczne, ponieważ daje losowym użytkownikom pełne uprawnienia.
Z jakich uprawnień należy korzystać /var/www
, aby:
- Kontrola źródła, taka jak git lub svn
- Użytkownicy w grupie takiej jak „strony internetowe” ( lub nawet dodani do „danych www” )
- Serwery takie jak apache lub lighthttpd
- I PHP / Perl / Ruby
czy wszyscy mogą tam czytać, tworzyć i uruchamiać pliki (i katalogi)?
Jeśli mam rację, skrypty Ruby i PHP nie są „wykonywane” bezpośrednio - ale przekazywane do tłumacza. Więc nie ma potrzeby wykonywania uprawnień do plików w /var/www
...? Dlatego wydaje się, że prawidłowe zgody byłoby chmod -R 1660
co uczyniłoby
- wszystkie pliki udostępniane przez te cztery podmioty
- wszystkie pliki niewykonalne przez pomyłkę
- całkowicie zablokuj wszystkich pozostałych w katalogu
- ustaw tryb uprawnień na „lepki” dla wszystkich przyszłych plików
Czy to jest poprawne?
Aktualizacja 1: Właśnie zdałem sobie sprawę, że pliki i katalogi mogą wymagać różnych uprawnień - mówiłem o plikach powyżej, więc nie jestem pewien, jakie powinny być uprawnienia do katalogu.
Aktualizacja 2: Struktura folderów /var/www
zmian drastycznie, ponieważ jeden z czterech powyższych podmiotów zawsze dodaje (a czasem usuwa) foldery i podfoldery o głębokości wielu poziomów. Tworzą również i usuwają pliki, do których inne 3 podmioty mogą potrzebować dostępu do odczytu / zapisu. Dlatego uprawnienia muszą wykonać cztery powyższe czynności zarówno dla plików, jak i katalogów. Ponieważ żaden z nich nie powinien potrzebować pozwolenia na wykonanie (patrz pytanie dotyczące ruby / php powyżej), zakładam, że rw-rw-r--
pozwolenie byłoby wszystkim, co jest potrzebne i całkowicie bezpieczne, ponieważ te cztery podmioty są obsługiwane przez zaufany personel (patrz # 2) i wszystkich innych użytkowników na system ma tylko dostęp do odczytu.
Aktualizacja 3: Dotyczy maszyn do rozwoju osobistego i serwerów prywatnych firm. Brak przypadkowych „klientów internetowych”, takich jak współdzielony host.
Aktualizacja 4: Ten artykuł autorstwa slicehost wydaje się najlepiej wyjaśniać, co jest potrzebne do skonfigurowania uprawnień do folderu www. Jednak nie jestem pewien, jak działa apache / nginx użytkownika lub grupy z PHP LUB svn / git i jak je zmienić.
Aktualizacja 5: W końcu (jak sądzę) znalazłem sposób, aby wszystko to zadziałało (odpowiedź poniżej). Nie wiem jednak, czy jest to właściwy i BEZPIECZNY sposób na zrobienie tego. Dlatego zacząłem nagrodę. Osoba, która ma najlepszą metodę zabezpieczenia katalogu www i zarządzania nim, wygrywa.