Prawidłowe uprawnienia dla / var / www i wordpress

41

Skonfigurowałem serwer LAMP i mam dostęp przez SSH oraz do strony „to działa” z przeglądarki internetowej z mojej sieci (poprzez adres IP) i z zewnątrz za pomocą dyndns.

Mamy kilka projektów Wordpress, które znajdują się w podkatalogach w / var / www / wordpress1 / var / www / wordpress2 itd. Nie mogę uzyskać dostępu do tych podkatalogów z przeglądarki, aby skonfigurować WP - lub (zakładam) zobaczyć treść w przeglądarce. W mojej przeglądarce pojawia się błąd 403 Forbidden.

Zakładam, że jest to problem z uprawnieniami. Czy możesz mi powiedzieć odpowiednie ustawienia uprawnień do:

  1. Pozwól mi i programistom czytać / pisać.
  2. aby umożliwić WP skonfigurowanie i zrobienie tego
  3. Zezwalaj odwiedzającym na uzyskiwanie dostępu do witryny (witryn) za pośrednictwem sieci.

Powinienem również wspomnieć, że podfolder to tak naprawdę linki do folderu na innym wewnętrznym dysku twardym - nie sądzę, że to coś zmieni, ale pomyślałem, że powinienem to ujawnić.

total 12
drwxr-xr-x  2 root root 4096 2012-07-12 10:55 .
drwxr-xr-x 13 root root 4096 2012-07-11 20:02 ..
lrwxrwxrwx  1 root root   43 2012-07-11 20:45 admin_media ->     /root/django_src/django/contrib/admin/media
-rw-r--r--  1 root root  177 2012-07-11 17:50 index.html
lrwxrwxrwx  1 root root   14 2012-07-11 20:42 media -> /hdd/web/media
lrwxrwxrwx  1 root root   18 2012-07-12 10:55 wordpress -> /hdd/web/wordpress

Oto wynik użycia chown -R www-data:www-data /var/www

total 12
drwxr-xr-x  2 www-data www-data 4096 2012-07-12 10:55 .
drwxr-xr-x 13 root     root     4096 2012-07-11 20:02 ..
lrwxrwxrwx  1 www-data www-data   43 2012-07-11 20:45 admin_media -> /root/django_src/django/contrib/admin/media
-rw-r--r--  1 www-data www-data  177 2012-07-11 17:50 index.html
lrwxrwxrwx  1 www-data www-data   14 2012-07-11 20:42 media -> /hdd/web/media
lrwxrwxrwx  1 www-data www-data   18 2012-07-12 10:55 wordpress -> /hdd/web/wordpress

Nadal nie mogę uzyskać dostępu za pośrednictwem przeglądarki.

dpbklyn
źródło
Proszę zamieścić dane wyjściowe polecenia ls -la /var/www.
SirCharlo,
proszę podać tę informację w swoim pytaniu!
Jorge Castro,
OK, zajęło mi sekundę, aby zapamiętać, jak
napisać
Dobra, spróbujchown -R www-data:www-data /var/www
SirCharlo,
2
Myślę, że Twoim problemem jest to, że używasz linków. Apache nie będzie podążał za linkami. Powinieneś przenieść te pliki do / var / www i skonfigurować apache do używania vitrualhosts. Zobacz help.ubuntu.com/10.04/serverguide/httpd.html Alternatywne, jeśli chcesz użyć, /hdd/web/wordpressto poprawnie skonfigurować Apache (katalog główny). Możesz skonfigurować apache, aby używał linków, ale nie radzę tego. Zobacz także help.ubuntu.com/community/WordPress
Panther

Odpowiedzi:

81

Po pierwsze, upewnij się, że Twoja nazwa użytkownika jest uwzględniona w www-datagrupie. Jeśli nie, możesz dodać swoją nazwę użytkownika jako www-datagrupę

sudo adduser $USER www-data

Następnie powinieneś zmienić własność / var / www na swoją nazwę użytkownika

sudo chown $USER:www-data -R /var/www

Następny krok, dla ogólnej praktyki , powinieneś zmienić uprawnienie na 755 (rwxr-xr-x), nie zalecając zmiany uprawnienia na 777 ze względów bezpieczeństwa

sudo chmod u=rwX,g=srX,o=rX -R /var/www

W związku z konkretnym zezwoleniem na wordpress lub laravel lub inną platformę możesz odpowiednio przeczytać dokumentację.

Mam nadzieję, że to pomoże...

metamorf
źródło
1
nie działało dla mnie, dodaję do użyciasudo chown www-data:www-data -R mywordpressdirectory/
Louis
Po zmianie właściciela należy również zmienić uprawnienia. Czy zmieniłeś swoje pozwolenie na 755?
metamorf
1
Zrobił z chmod. Zmienia pozwolenie na 755 z lepkimi bitami (aby zachować nowe pliki będące własnością www-data.)
Zachary Dahan
Najlepsze wyjaśnienie, jakie mogłem znaleźć, krótkie i słodkie. Dzięki.
Banago,
1
Dlatego nie będziesz mógł instalować / usuwać wtyczek / motywów itp. Z panelu administracyjnego, ponieważ WordPress nie będzie miał uprawnień do zapisu.
Igor Skoldin,
3

Najwyraźniej tak zaleca się Przewodnik po Ubuntu Server:

Rozdział 11. Serwery WWW.

1.4 Udostępnianie uprawnienia do zapisu

Aby więcej niż jeden użytkownik mógł pisać w tym samym katalogu, konieczne będzie przyznanie uprawnień do zapisu grupie, którą współużytkują. Poniższy przykład przyznaje wspólne uprawnienie do zapisu do / var / www / html grupie „webmasterzy”

Korzystam z danych www . Po prostu zastąp „webmasterów” swoją grupą, pamiętaj oczywiście o dodaniu użytkownika do grupy.

sudo chgrp -R webmasters /var/www/html
sudo find /var/www/html -type d -exec chmod g=rwxs "{}" \;
sudo find /var/www/html -type f -exec chmod g=rws "{}" \;

Właśnie przetestowałem go w programie Dreamweaver na moim komputerze Mac i przesłałem i zastąpiłem pliki, dodałem pliki itp. I zachowuje prawidłowe uprawnienia z jednym wyjątkiem, użytkownik lokalny staje się właścicielem nowych plików wraz z danymi www, ale wszelkie pliki utworzone przez root w katalog html zachowuje swoją własność jako root, ale są edytowalne przez lokalnego użytkownika.

$ls -l
$-rw-rw-r-- 1 localUser www-data 11505 May 28 09:56 index2.html
$-rw-rwSr-- 1 root  www-data 11535 May 28 09:58 index.html

Mam nadzieję, że to wyjaśnia i pomaga znużonym, bo wiem, że zawsze byłem zmęczony tą sytuacją, ale teraz jest dla mnie jasne.

Aha, gorąco polecam użycie sftp z kluczami do uzyskania dostępu do ftp, działa świetnie dla mnie i nie potrzebuje PureFTP ani żadnej innej niepewnej metody dostarczania plików na stronę. Na stronie Digital Ocean jest kilka samouczków na temat zabezpieczania serwera za pomocą kluczy SSH:

Jak skonfigurować uwierzytelnianie oparte na kluczach SSH na serwerze z systemem Linux

MagicCamera
źródło
1) pozostawia setgid bity w plikach. Wygląda dziwnie, nic nie robi, otwiera drzwi do problemów bezpieczeństwa, jeśli użytkownicy mogą sprawić, że pliki będą wykonywalne i je uruchomić. Ale jeśli jesteś zadowolony z setgid dla plików, zamień złożone finds na just sudo chmod -R g=srwX /var/www/html.
temoto
2) find -exec chmododrodzi osobny program dla każdego pliku, co jest czasochłonne i wywiera niepotrzebną presję na system, jeśli masz wiele plików. Rozwiązanie: sudo find /var/www/html -type f -print0 |sudo xargs -0 chmod g=rw. xargs spróbuje podać jak najwięcej ścieżek do jednego wystąpienia chmod.
temoto
0

Sprawdź, czy Apache ma uprawnienia do wykonywania dla /hdd/web/mediai /hdd/web/wordpress.

Biegać:

chmod o+x /root /root/site /root/site/about

Ponadto Apache musi być skonfigurowany, aby umożliwić dostęp do katalogu w systemie plików. Musi to zrobić administrator systemu, wstawiając dyrektywę do plików konfiguracyjnych apache (httpd.conf).

Ponieważ rzeczywisty katalog znajduje się w katalogu głównym, musi on być dostępny, ale dla tego katalogu może nie być włączona funkcja FollowSymLinks - należy to również dodać do dyrektywy.

Zobacz http://httpd.apache.org/docs/2.0/mod/core.html#directory

jaśmin
źródło
Dzięki wszystkim ... Zdecydowałem się pójść ścieżką najmniejszego oporu ... usunąłem dowiązania symboliczne. Wszystko działa idealnie.
dpbklyn
0

Czytanie podręcznika instalacji Ubuntu ..

chown -R www-data /usr/share/wordpress

Może może być łatwiej zainstalować w ten sposób, zamiast próbować rozpakować pliki /var/www

https://help.ubuntu.com/community/WordPress ...

w jakikolwiek sposób Wordpress działa na Apache ... prawda? jeśli chcesz to zrobić w ten sposób .. pokaż jako @metamorph, a następnie daj zezwolenie na apache2 w httpd.confnastępujący sposób:

<VirtualHost *:80>
        ServerName site
        ServerName site.domain
        DocumentRoot /srv/www/wordpress.site

        DirectoryIndex index.php

</VirtualHost>

i potem default-server.conf.

<Directory "/srv/www/wordpress.site">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

Być może najlepiej jest zrobić krok po kroku https://help.ubuntu.com/community/WordPress

maniat1k
źródło