uprawnienia do danych www?

108

Mam więc katalog w / var / www (nazywany ciastem) i muszę zezwolić www-data na zapis do niego, ale chcę też pisać do niego (bez konieczności używania sudo). Boję się zmienić uprawnienia na 777 na wypadek, gdyby inny użytkownik na moim komputerze (lub haker) próbował zmodyfikować pliki w tym katalogu. Jak zezwolić na dostęp tylko dla siebie i danych www Apache?

q3d
źródło

Odpowiedzi:

168
sudo chown -R yourname:www-data cake

następnie

sudo chmod -R g+s cake

Pierwsze polecenie zmienia właściciela i grupę.

Drugie polecenie dodaje atrybut s, który zachowa nowe pliki i katalogi w cieście z tymi samymi uprawnieniami grupowymi.

James L.
źródło
3
Dlaczego chmod G + s jest rekurencyjny?
Ben Rogmans,
nie wiedziałem o Google+. bardzo przydatne!
FRAGA
1
co użytkownik może zrobić z plikami utworzonymi przez sam plik www-data in cake, a plikami utworzonymi przez www-data w katalogu utworzonym przez www-data? na przykład o operacjach edycji, zmiany nazwy, usuwania? jak rozumiem, zmiana nazwy i usuwanie nie jest możliwe wewnątrz katalogu utworzonego przez www-data, a edycja plików utworzonych przez www-data nie jest w ogóle możliwa dla użytkownika.
qdinar
49

Jak stwierdzono w artykule Slicehost :

Konfiguracja użytkownika

Zacznijmy więc od dodania głównego użytkownika do grupy użytkowników Apache:

sudo usermod -a -G www-data demo

To dodaje „demo” użytkownika do grupy „www-data”. Upewnij się, że używasz obu opcji -a i -G z poleceniem usermod pokazanym powyżej.

Będziesz musiał się wylogować i zalogować ponownie, aby umożliwić zmianę grupy.

Sprawdź grupy teraz:

groups
...
# demo www-data

Więc teraz jestem członkiem dwóch grup: mojej własnej (demo) i grupy Apache (dane www).

Konfiguracja folderu

Teraz musimy upewnić się, że folder public_html jest własnością głównego użytkownika (demo) i jest częścią grupy Apache (www-data).

Ustawmy to:

sudo chgrp -R www-data /home/demo/public_html

Skoro mówimy o uprawnieniach, dodam krótką uwagę dotyczącą polecenia sudo: dobrym zwyczajem jest używanie ścieżek bezwzględnych (/ home / demo / public_html), jak pokazano powyżej, zamiast ścieżek względnych (~ / public_html). Zapewnia, że ​​sudo jest używane we właściwej lokalizacji.

Jeśli masz folder public_html z dowiązaniami symbolicznymi, bądź ostrożny z tym poleceniem, ponieważ będzie ono podążać za dowiązaniami symbolicznymi. W przypadku działającego folderu public_html, zmień każdy folder ręcznie.

Setgid

Jak dotąd dobrze, ale pamiętaj, że polecenie, które właśnie wydaliśmy, dotyczy tylko istniejących folderów. A co z czymś nowym?

Możemy ustawić własność, aby wszystko, co nowe, znajdowało się również w grupie „www-data”.

Pierwsze polecenie zmieni uprawnienia do katalogu public_html, tak aby zawierał bit „setgid”:

sudo chmod 2750 /home/demo/public_html

Dzięki temu nowe pliki otrzymają grupę „www-data”. Jeśli masz podkatalogi, będziesz chciał uruchomić to polecenie dla każdego podkatalogu (ten typ uprawnienia nie działa z „-R”). Na szczęście nowe podkatalogi zostaną utworzone z bitem „setgid” ustawionym automatycznie.

Jeśli musimy zezwolić na dostęp do zapisu w Apache, na przykład do katalogu uploads, ustaw uprawnienia dla tego katalogu w następujący sposób:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

Uprawnienia należy ustawić tylko raz, ponieważ nowym plikom zostanie automatycznie przypisana właściwa własność.

Kwadz
źródło
To rozwiązanie działa u mnie. Wcześniej zawsze uruchamiałem serwer z terminala za pomocą użytkownika root. Dzięki takiemu rozwiązaniu mogę przesłać plik do katalogu, który ma uprawnienia 770. To jest super, ponieważ wcześniej mogę przesłać plik tylko z uprawnieniem 777.
Ifan Iqbal