Przyznaj uprawnienia użytkownika do posiadanych danych / var / www


36

Mam prostą konfigurację serwera WWW dla niektórych stron internetowych, z układem podobnym do:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

Wcześniej używałem użytkownika root do zarządzania plikami, a następnie przywróciłem je do czasu, www-datagdy skończyłem (strony WordPress, potrzebne do działania przesyłania plików WP). To chyba nie jest najlepszy sposób.

Próbuję znaleźć sposób na utworzenie innego użytkownika (nazwijmy go użytkownik1), który ma uprawnienia do edycji plików na stronie 1, ale nie na stronie 2 i nie powstrzymuje plików, których właścicielem jest www-data. Czy jest jakiś sposób, aby to zrobić?

Odpowiedzi:


70

Jeśli sprawdzimy własność witryny 1, znajdziemy coś takiego,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Oznacza to, że katalog jest własnością użytkownika root, grupa root. Podczas gdy root użytkownika ma uprawnienia do zapisu (plus uprawnienia do odczytu i wykonywania) do katalogu, root grupy ma tylko uprawnienia do odczytu i wykonywania.

Będziemy chcieli zmienić własność grupy na inną (nową) grupę i dodać użytkownika 1 do tej konkretnej grupy. Damy również pozwolenie na pisanie tej grupie.

Utwórz nową grupę,

sudo addgroup site1

Dodaj użytkownika 1 do nowo utworzonej grupy,

sudo adduser user1 site1

Sprawdź, czy użytkownik 1 jest naprawdę w tej grupie,

groups user1

Dane wyjściowe powinny być listą w stylu:

user1 : <other-groups> site1

Teraz możemy zmienić własność grupy docelowego katalogu.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

Udziel uprawnienia do zapisu nowemu właścicielowi grupy,

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Sprawdź, czy wszystkie zmiany rzeczywiście istnieją,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Tak więc katalog jest teraz własnością użytkownika root, grupy site1. Zarówno użytkownik root, jak i witryna grupy 1 mają uprawnienia do zapisu (oraz uprawnienia do odczytu i wykonywania) do katalogu. Każdy użytkownik należący do grupy site1 będzie korzystać ze wszystkich uprawnień przyznanych tej grupie.

Teraz zaloguj się jako użytkownik1, przejdź do katalogu site1 i spróbuj utworzyć plik w tym katalogu,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Nie powiodło się, ponieważ najprawdopodobniej podstawową grupą użytkownika 1 nie jest witryna1. Przejdź do tej grupy.

newgrp - site1

Spróbuj odtworzyć plik (uwaga, że ​​zostałeś przeniesiony do katalogu domowego użytkownika 1 po zmianie grupy), to powinno działać teraz. Ponieważ utworzone pliki będą miały uprawnienia do odczytu na całym świecie, apache (lub serwer sieciowy) nie powinien mieć problemów z dostępem do nich.

EDYTOWAĆ

Ponadto, jak wskazał Dan08 w komentarzu, musisz dodać dane www do grupy site1.

sudo adduser www-data site1

W wielu (nie wszystkich) dystrybucjach www-data to użytkownik, pod którym działa serwer WWW Apache. Oznacza to również, że wszystko, co robi Apache (szczególnie skrypty PHP), będzie domyślnie wykonywane za zgodą użytkownika danych www (a także grupowania danych www). WordPress używa danych www użytkownika do zapisywania plików.

Jeśli chcesz zobaczyć, jak działa serwer WWW Apache, wydaj polecenie,

ps aux | grep apache2 | less

1
Musisz także dodać dane www do grupy site1. Podczas przesyłania i zmiany plików w interfejsie internetowym Wordpress. Zmiany są wprowadzane przez Apache przy użyciu użytkownika danych www. więc uprawnienia do odczytu przez większość czasu nie są wystarczające.
Dan

3
Permission deniedWiadomość nie jest spowodowane „grupy podstawowej”, lecz użytkownik nie został jeszcze faktycznie jest w tej grupie (o ile system operacyjny dotyczy). Po wylogowaniu i ponownym zalogowaniu będzie działać zgodnie z oczekiwaniami (bez uruchamiania newgrp - site1).
0b10011

Jak dokładnie będzie to różni się od wydawania www-datauprawnień do zapisu grupa jeśli kończy się konieczności dodawania www-datado site1anyways?
Matt

@MattBorja Twoje zapytanie nie jest bardzo jasne. Czy pytasz, co jest złego w podawaniu grupie o nazwie www-data' write permissions? If that is the question, www-data ”to nie grupa, to użytkownik. Daj mi znać, jeśli źle zrozumiem twoje pytanie.
Masroor,

myślę, że nie jest to bezpieczna konfiguracja, ponieważ użytkownicy mogą uzyskiwać dostęp do swoich stron za pośrednictwem skryptu php, na przykład menedżera plików php.
qdinar

7

Utwórz dwie grupy: site1grpisite2grp

sudo groupadd site1grp && sudo groupadd site2grp

Dodaj www-datado obu grup.

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Dodaj użytkownika 1 i użytkownika 2 do odpowiednich grup

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Zmień uprawnienia do folderów witryny, aby właścicielem użytkownika była strona www, a właścicielem grupy była odpowiednia grupa

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Teraz www-datama uprawnienia użytkownika i grupy w obu witrynach, a każdy użytkownik ma uprawnienia grupy dla swojej odpowiedniej witryny.


4

Dla tych, którzy mają folder główny Wordpress w swoim folderze domowym:

Ubuntu / apache

  1. Dodaj użytkownika do grupy danych www:

    KREDYT Przyznanie uprawnień do zapisu grupie danych www

    Chcesz zadzwonić do usermodużytkownika. To by było:

    sudo usermod -aG www-data yourUserName
    

    Zakładając, że www-datagrupa istnieje

  2. Sprawdź, czy użytkownik jest w www-datagrupie:

    groups yourUserName
    

    Powinieneś dostać coś takiego:

    yourUserName : yourUserGroupName www-data
    

    twojaUserGroupName jest zwykle podobna do twojej nazwy użytkownika

  3. Rekurencyjnie zmieniaj własność grupową folderu zachowując własność użytkownika

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Zmień katalog na folder WebSiteFolder

    cd yourWebSiteFolder
    
  5. Rekurencyjnie zmieniaj grupy uprawnień folderów i podfolderów, aby umożliwić uprawnienia do zapisu:

    find . -type d -exec chmod -R 775 {} \;
    

    tryb /home/yourUserName/yourWebSiteFolder/'zmieniony z 0755 (rwxr-xr-x)na0775 (rwxrwxr-x)

  6. Rekurencyjnie zmieniaj grupy uprawnień plików i podplików, aby umożliwić uprawnienia do zapisu:

    find . -type f -exec chmod -R 664 {} \;
    

    Wynik powinien wyglądać mniej więcej tak:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Równoważny:

    chmod -R ug+rw foldername
    

    Uprawnienia będą jak 664 lub 775.


3

Musisz utworzyć nową grupę dla tzw. „Nowego użytkownika”, a następnie dodać dane www i „nowego użytkownika” do tej grupy:

sudo gpasswd -a new_user new_group

Następnie możesz zmienić właściciela new_useri zgrupować w new_group:

sudo chown -R new_user:new_group /var/www/site1

Następnie musisz przyznać grupie dostęp do witryny1. www-data nadal będzie mieć dostęp do strony, ponieważ należy ona do nowej_grupy, a new_user nie będzie mógł uzyskać dostępu do witryny2, ponieważ nie będzie należeć do grupy www-data, która jest właścicielem strony2.


Twoja odpowiedź jest myląca, „dając dostęp na poziomie grupy do witryny 1”, czy miałeś na myśli „zmianę grupy witryny 1 na nową grupę” lub zmianę trybu ( chmod)? Twoja odpowiedź nie wspomina nigdzie o trybie, który może wpłynąć na bezpieczeństwo (lub zniszczyć).
Lekensteyn,

Miałem na myśli zmianę trybu ( chmod) poprzez odwołanie wszystkich uprawnień dla INNYCH.
errikos,

1

Zakładając, że wszystkie pliki należą już do www-dataużytkownika (możesz to sprawdzić za pomocą ls -slahpolecenia), który należy do www-datagrupy (następna kolumna po nazwie użytkownika na liście plików), możesz po prostu dodać użytkownika do tej samej www-datagrupy, aby umożliwić edycję tych plików

# usermod -aG www-data username

dla istniejącego użytkownika lub

# adduser username www-data

dla nowo utworzonego

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.