Udzielanie uprawnień do zapisu grupie www-data

27

Tworzę stronę internetową i częścią tej funkcji jest zapisywanie danych generowanych przez użytkownika za pomocą php. Używam nginx na Ubuntu 13.04. W tej chwili testuję tylko 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 (iain) jestem właścicielem tego katalogu, ale wydaje się, że sensowniej byłoby przenieść własność katalogu / var / www i wszystkiego w nim użytkownika www-data (czy powinna to być grupa?) I dodać się do grupa danych www. Czy podążanie za tym jest właściwym sposobem?

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 w grupie danych www może teraz czytać, pisać i wykonywać w / var / www?

lipny
źródło

Odpowiedzi:

53

Najpierw useraddtworzy nowego użytkownika. Ponieważ ty (iain) już istniejesz, usermodzamiast tego chcesz zadzwonić . To by było:

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

(zwróć uwagę -ana serwery oparte na Debianie (w tym Ubuntu), które dodadzą cię do tej grupy i utrzymają twoje członkostwo w innych grupach. Zapomnij o tym, a będziesz należeć tylko do grupy danych www - może to być złe doświadczenie, jeśli jeden z było to koło. Na serwerach typu SUSE opcja jest -Azamiast, -aGwięc man usermoduważnie przeczytaj, aby zrobić to dobrze.)

Po drugie, nie chcesz, aby apache miał pełny dostęp do rw /var/www: jest to potencjalnie poważne naruszenie bezpieczeństwa. Zasadniczo zezwalaj tylko na to, czego potrzebujesz, i nic więcej ( zasada najmniejszego przywileju ). W takim przypadku potrzebujesz apache ( www-data) i ty ( www-datagrupa) do pisania (i czytania) /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

Edycja : aby odpowiedzieć na twoje pierwotne pytanie, tak, każdy członek www-datamoże teraz czytać i wykonywać /var/www(ponieważ ostatni bit twoich uprawnień to 5 = czytaj + exec). Ponieważ jednak nie użyłeś -Rprzełącznika, dotyczy to tylko /var/wwwplików i podkatalogów, które zawiera. To, czy potrafią pisać, to inna sprawa i zależy od grupy /var/www, której nie ustawiłeś. Sądzę, że tak jest zazwyczaj root:root, więc nie, oni (prawdopodobnie) nie mogą pisać.

Edycja 22.06.2014 : dodano uwagę, że -aGopcja jest poprawna na serwerach opartych na Debianie. Wygląda na to, że różni się w zależności od dystrybucji, więc przeczytaj manuważnie przed uruchomieniem.

Calimo
źródło
Dobra, widzę. Grupa / var / www jest rzeczywiście root: root. Dzięki za link. Bardziej rozsądne wydaje się przyzwyczajanie się do dawania tego, co jest wymagane, niż wygoda. Dziękuję za wskazówki.
duff
2
Ok, więc właśnie próbowałem napisać na /var/www/example.com/public_html za pomocą cp -r php /var/www/example.com/public_htmli odmówiono mi pozwolenia. Jestem w grupie danych www, która ma uprawnienia rwxrwx --- do tego katalogu. Dlaczego to?
duff
Może tu być wiele rzeczy. Na przykład nie mogłeś mieć uprawnień do czytania niektórych rzeczy w php lub nie wylogowałeś się i nie zalogowałem po usermod (zaktualizowałem moją odpowiedź w tym punkcie za pomocą addgroup, aby tego uniknąć, i sprecyzowałem, gdzie użyć sudo).
Calimo
Ze wszystkich odpowiedzi dotyczących www-data:www-datatego, ten rozwiązał problem z brakującymi uprawnieniami. Dziękuję Ci.
Eugene