Przejdź do treści

Ustawienia plików cookie

Prosimy wybrać, na które rodzaje plików cookie Państwo zezwalają. Wybór można zmienić w dowolnym momencie w Ustawieniach plików cookie na dole każdej strony. Polityka prywatności

Niezbędne

Zawsze włączone

Potrzebne do logowania, zachowania koszyka i zapamiętania wyborów. Są zawsze włączone.

Jakie pliki cookie?
  • weboke_sessie, weboke_klant, weboke_remember: sesja i pozostanie zalogowanym
  • weboke_basket: koszyk
  • wkBtwIncl: wyświetlanie cen z VAT lub bez VAT
  • wok_cookies: wybór dotyczący plików cookie, 12 miesięcy

Mierzą, która reklama prowadzi do odwiedzin lub zamówienia, abyśmy nie płacili za reklamy, które nic nie dają.

Jakie pliki cookie?
  • Google Ads przez Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, reklamy w ChatGPT
  • wok_aff: przez którego partnera trafili Państwo do nas (program partnerski), 60 dni

4,6

Kraj i język

Każdy kraj ma własną stronę z cenami i stawką VAT tego kraju.

Wyświetl

Użytkownicy, grupy i uprawnienia do plików

Moduł 3: Użytkownicy, uprawnienia i sudo · Czas czytania: 12 min

Cel lekcji: Po tej lekcji będą Państwo potrafili tworzyć i przeglądać użytkowników oraz grupy, odczytywać uprawnienia pliku lub katalogu w ls -l i poprawnie je ustawiać za pomocą chmod oraz chown, nie otwierając wszystkiego na oścież.

Kluczowe pojęcia: root (UID 0), zwykły użytkownik, użytkownik systemowy, /etc/passwd, /etc/shadow, grupa, adduser, id, rwx, właściciel, grupa, pozostali, zapis ósemkowy (644, 755, 600), chmod, chown, umask, setuid, 777

Każdy jest numerem

Linux od początku był tworzony z myślą o wielu użytkownikach na jednej maszynie. Każdy uruchomiony proces działa w imieniu jakiegoś użytkownika, a każdy plik ma właściciela. Dla systemu użytkownik to przede wszystkim numer, czyli UID:

  • root ma UID 0. Root może wszystko: odczytać i zmienić każdy plik, zatrzymać każdą usługę, utworzyć każdego użytkownika. Nie ma tu pytania "czy na pewno?".
  • Zwykli użytkownicy, tacy jak anna, otrzymują w Debianie i Ubuntu UID od 1000 wzwyż. Mogą zapisywać w swoim katalogu domowym, a poza nim niewiele.
  • Użytkownicy systemowi mają niski numer i zwykle nie mają ani hasła, ani powłoki. Pod takimi użytkownikami działają usługi: nginx pod www-data, PostgreSQL pod postgres. Jeśli taka usługa zostanie zhakowana, włamywacz ma tylko uprawnienia tego użytkownika, a nie uprawnienia roota.

Kim Państwo są, sprawdzą Państwo poleceniem id:

anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)

Anna ma UID 1000, własną grupę anna, a do tego należy również do grup sudo i users.

Gdzie zapisani są użytkownicy

Lista użytkowników znajduje się w /etc/passwd, po jednym wierszu na użytkownika:

anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bash

Pola, rozdzielone dwukropkami, to: nazwa, x (hasło jest przechowywane gdzie indziej), UID, grupa główna, opis, katalog domowy, powłoka. Przy www-data jako powłoka widnieje /usr/sbin/nologin: zalogowanie się nie jest możliwe.

Same hasła są przechowywane w postaci zaszyfrowanej (jako skróty, hash) w /etc/shadow. Ten plik może odczytać tylko root. Znak ! lub * na początku pola hasła oznacza, że logowanie hasłem nie jest możliwe. W ten sposób root jest domyślnie zablokowany w Ubuntu, a w Debianie wtedy, gdy podczas instalacji nie podali Państwo hasła roota.

Tworzenie użytkowników i grup

W Debianie i Ubuntu używa się przyjaznego polecenia adduser:

root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...

adduser tworzy użytkownika, własną grupę o tej samej nazwie, katalog domowy i prosi o hasło. Istnieje też niskopoziomowe useradd (w AlmaLinux i Rocky Linux jest to standardowe polecenie), ale bez opcji robi mniej: nie ustawia hasła, a w niektórych systemach nie tworzy katalogu domowego.

Grupa to sposób na nadanie uprawnień kilku użytkownikom jednocześnie. Dodanie użytkownika do grupy:

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # to samo, działa wszędzie

Proszę zwrócić uwagę na -a przy usermod: bez -a zastępują Państwo wszystkie dodatkowe grupy użytkownika tylko tą jedną. Nowa grupa zaczyna obowiązywać dopiero po ponownym zalogowaniu.

Zablokowanie konta bez jego usuwania (na przykład konta byłego współpracownika):

root@web1:~# usermod -L -e 1 jan

-L blokuje hasło, -e 1 powoduje wygaśnięcie konta. Uwaga: zablokowane hasło nie zawsze powstrzyma klucz SSH. Dlatego proszę usunąć również klucze w /home/jan/.ssh/authorized_keys (lekcja 2.3); wygasłe konto (-e 1) sshd natomiast odrzuca.

Odczytywanie uprawnień

anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna     www-data  1520 Nov  9 10:12 index.html
-rw-r----- 1 anna     www-data   412 Nov  9 10:14 config.php
drwxr-xr-x 2 anna     www-data  4096 Nov  9 10:15 images
drwxrwxr-x 2 www-data www-data  4096 Nov  9 10:20 uploads

Pierwszy blok dziesięciu znaków jest kluczem do wszystkiego:

  • Znak 1: typ. - to zwykły plik, d katalog (directory), l dowiązanie symboliczne (symlink).
  • Znaki od 2 do 4: co może właściciel.
  • Znaki od 5 do 7: co może grupa.
  • Znaki od 8 do 10: co mogą pozostali (wszyscy inni).

Dalej następują liczba dowiązań, właściciel, grupa, rozmiar i data.

Litery oznaczają w przypadku pliku:

LiteraZnaczenie dla pliku
rodczyt
wmodyfikacja
xuruchamianie jako program lub skrypt

A w przypadku katalogu coś nieco innego:

LiteraZnaczenie dla katalogu
rwyświetlanie nazw plików w katalogu
wtworzenie, zmiana nazw i usuwanie plików w katalogu
xwejście do katalogu i otwieranie znajdujących się w nim plików

To ostatnie zaskakuje wiele osób. Bez x na katalogu nie dostaną się Państwo do znajdujących się w nim plików, nawet jeśli same pliki są czytelne. A kto ma w na katalogu, może usuwać znajdujące się w nim pliki, nawet jeśli należą do kogoś innego.

W przykładzie: index.html może czytać każdy; config.php (z hasłem do bazy danych) Anna może czytać i modyfikować, grupa www-data (czyli serwer WWW) tylko czytać, a pozostali nic. W uploads serwer WWW może zapisywać, ponieważ tam trafiają pliki przesyłane przez odwiedzających.

Uprawnienia jako liczba

Uprawnienia często zapisuje się jako trzy cyfry, czyli liczbę w zapisie ósemkowym. Każda litera ma wartość: r = 4, w = 2, x = 1. Wartości sumuje się dla każdej grupy osobno:

UprawnieniaLiczbaZastosowanie
rw-r--r--644zwykły plik, który każdy może czytać
rw-r-----640plik dla właściciela i grupy, na przykład konfiguracja z hasłem
rw-------600plik poufny, taki jak authorized_keys lub klucz prywatny
rwxr-xr-x755katalog lub program, z którego każdy może korzystać
rwx------700katalog prywatny, taki jak ~/.ssh

Zmiana uprawnień: chmod i chown

anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.php

chmod zmienia uprawnienia, za pomocą liczby lub liter (u, g, o dla właściciela, grupy i pozostałych; + lub - i litera). chown eigenaar:groep zmienia właściciela i grupę; może to robić tylko root. Z -R oba polecenia działają na całym katalogu i właśnie tu często dochodzi do błędów: chmod -R 644 na katalogu sprawia, że wszystkie podkatalogi stają się bezużyteczne, ponieważ katalogi potrzebują x. Dla całego drzewa lepiej użyć find:

root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +

Nigdy 777

"Nie działało, więc ustawiłem 777." 777 oznacza: każdy na serwerze może to czytać, modyfikować i uruchamiać. Jeśli kiedykolwiek jedna usługa lub jedna strona na Państwa serwerze zostanie przejęta, włamywacz może zapisywać wszędzie tam, gdzie ustawiono 777, łącznie z Państwa plikami PHP. Prawdziwym problemem jest niemal zawsze właściciel lub grupa: proszę nadać serwerowi WWW przez grupę dokładnie to uprawnienie, którego potrzebuje, i tylko na tym katalogu, na którym jest ono potrzebne.

Uprawnienia domyślne i bity specjalne

Nowe pliki otrzymują uprawnienia na podstawie umask. Przy typowej wartości umask 022 nowe pliki dostają 644, a nowe katalogi 755. Swoją wartość umask zobaczą Państwo poleceniem umask.

Czasem zamiast x widać s, na przykład przy /usr/bin/passwd (-rwsr-xr-x). To bit setuid: program działa z uprawnieniami właściciela (roota), nawet gdy uruchamia go zwykły użytkownik. Jest to potrzebne kilku programom systemowym, ale proszę nigdy samodzielnie nie ustawiać go na skrypcie. Nieoczekiwany plik z setuid to znany sygnał włamania; za pomocą find / -perm -4000 -type f 2>/dev/null zobaczą Państwo wszystkie takie pliki.

W AlmaLinux i Rocky Linux

adduser jest tam inną nazwą dla useradd; proszę użyć useradd -m anna, a następnie passwd anna. Grupy dodaje się za pomocą usermod -aG. SELinux dokłada dodatkową warstwę obok uprawnień opisanych w tej lekcji: plik z prawidłowymi uprawnieniami może mimo to zostać odrzucony, jeśli ma niewłaściwą etykietę SELinux (pokazuje ją ls -Z).

Podsumowanie

  • Każdy użytkownik ma UID; root (0) może wszystko, a usługi działają pod własnymi użytkownikami systemowymi bez powłoki.
  • Użytkownicy są zapisani w /etc/passwd, skróty haseł w /etc/shadow. Użytkowników tworzy się poleceniem adduser, a grupy dodaje poleceniem usermod -aG.
  • ls -l pokazuje typ, uprawnienia właściciela, grupy i pozostałych, a następnie właściciela i grupę. W przypadku katalogu x oznacza wejście, a w tworzenie i usuwanie plików.
  • Typowe wartości: 644 i 755 dla treści publicznych, 640 dla konfiguracji z danymi poufnymi, 600 i 700 dla treści prywatnych. Nigdy 777.
  • Do ustawiania uprawnień na całym drzewie proszę używać find; proszę zwracać uwagę na pliki z setuid.

Quiz

1. Co oznacza -rw-r----- w przypadku pliku, którego właścicielem jest anna, a grupą www-data?



2. Co się dzieje, gdy katalog ma uprawnienia drw-r--r-- (czyli nigdzie nie ma x)?



3. Wykonują Państwo usermod -G www-data anna (bez -a). Jaki jest skutek?



4. Wtyczka nie może zapisywać w /var/www/example.com/uploads. Jakie jest najlepsze rozwiązanie?



5. Dlaczego nginx działa pod użytkownikiem www-data, a nie pod rootem?



Zadanie

Zadanie Z3.1: Odczytywanie uprawnień. Proszę otworzyć przykładowy plik rechten-1.txt: zawiera on wynik id dla trzech użytkowników oraz wynik ls -l w katalogu WWW. Przy każdym pytaniu proszę odpowiedzieć, kto co może (na przykład: "czy serwer WWW może zmodyfikować config.php?", "który plik ma zbyt szerokie uprawnienia?", "jaka liczba odpowiada .env?"). Program porównuje Państwa odpowiedzi z ustalonym kluczem i przy każdym pytaniu wyjaśnia dlaczego.

Zadanie Z3.1: Odczytywanie uprawnień

Plik do tego zadania: rechten-1.txt










Wprowadzone dane i wyniki sprawdzania nie są zapisywane. Przeglądarka zapamiętuje udzielone odpowiedzi oraz informację, czy zadanie zostało zaliczone. Po zalogowaniu w Moje kursy zapisywana jest jedynie informacja, że zadanie zostało zaliczone (lub prawie zaliczone); tam można ją również usunąć.

Przeczytaj więcej

Kroki opisane w tych artykułach dotyczą pakietów hostingowych i serwerów VPS WebOké; u innych dostawców działa to podobnie.

Chwileczkę…

Konfiguracja domen

Dla każdej domeny można ustawić serwery nazw, powiązanie z hostingiem oraz to, kto zostanie właścicielem.

Wczytywanie domen…