2013-09-16 13:33:11 +0000 2013-09-16 13:33:11 +0000
27
27

Nadanie uprawnień do zapisu dla grupy www-data

Tworzę stronę internetową i częścią funkcji jest wypisywanie danych generowanych przez użytkownika za pomocą php. Używam nginxa na Ubuntu 13.04. W tej chwili tylko testuję i wszystko jest obsługiwane przez nginx na locahost.

Mój skrypt php nie zapisuje pliku tekstowego (chociaż mogę to zrobić ręcznie) i myślę, że jest to problem z uprawnieniami do zapisu w moim katalogu /var/www/example.com/public_html.

W tej chwili ja (iain) jestem właścicielem tego katalogu, ale wydaje się, że bardziej sensowne byłoby przeniesienie własności katalogu /var/www i wszystkiego, co się w nim znajduje na użytkownika www-data (a może powinna to być grupa?) i dodanie siebie do grupy www-data. Czy poniższy sposób jest właściwy?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

Czy to oznacza, że każdy z grupy www-data może teraz czytać, pisać i wykonywać polecenia w katalogu /var/www?

Odpowiedzi (1)

53
53
53
2013-09-16 13:53:44 +0000

Po pierwsze, useradd tworzy nowego użytkownika. Ponieważ ty (iain) już istniejesz, chcesz zamiast tego wywołać usermod. Tak więc byłoby to:

sudo usermod -aG www-data iain
addgroup www-data

(zwróć uwagę na -a na serwerach opartych na Debianie (Ubuntu również), które doda cię do tej grupy i zachowa twoje członkostwo w innych grupach. Zapomnij o tym, a będziesz należał tylko do grupy www-data - może to być złe doświadczenie, jeśli jeden z nich był kołem. Na serwerach typu SUSE opcja ta ma postać -A zamiast -aG, więc przeczytaj uważnie man usermod, aby to zrozumieć).

Po drugie, nie chcesz, aby apache miał pełny dostęp rw do /var/www: jest to potencjalnie poważne naruszenie bezpieczeństwa. Jako ogólną zasadę, zezwalaj tylko na to, czego potrzebujesz, i nic więcej zasada najmniejszego przywileju ). W tym przypadku, potrzebujesz apache (www-data) i ciebie (grupa www-data) do pisania (i czytania) w /var/www/example.com/public_html, więc

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html

Edit : aby odpowiedzieć na twoje oryginalne pytanie, tak, każdy członek www-data może teraz czytać i wykonywać /var/www (ponieważ ostatni bit twoich uprawnień to 5 = read + exec). Ale ponieważ nie użyłeś przełącznika -R, odnosi się to tylko do /var/www, a nie do plików i podkatalogów, które zawiera. Teraz, czy mogą pisać, to już inna sprawa, i zależy od grupy /var/www, której nie ustawiłeś. Zgaduję, że zazwyczaj jest to root:root, więc nie, oni (prawdopodobnie) nie mogą pisać.

Edit on 2014-06-22 : dodana uwaga, że opcja -aG jest ważna na serwerach opartych na Debianie. Najwyraźniej różni się to w zależności od dystrybucji, więc przeczytaj man uważnie przed wykonaniem.