Odczytywanie i prawidłowe ustawianie uprawnień plików na Państwa serwerze VPS
Każdy plik i każdy katalog na Państwa VPS ma właściciela, grupę i uprawnienia. Jeśli są ustawione zbyt szeroko, zhakowana strona internetowa lub usługa może zapisywać wszędzie. Jeśli są zbyt restrykcyjne, pojawiają się błędy takie jak "Permission denied" lub 403 na stronie. Poniżej wyjaśniamy, jak odczytywać uprawnienia i jak je prawidłowo ustawiać. Jeśli korzystają Państwo z pakietu hostingowego z DirectAdmin, prosimy zajrzeć do artykułu Dostęp zabroniony (403): Nie mają Państwo uprawnień dostępu do / na tym serwerze.
Odczytywanie uprawnień za pomocą ls -l
ls -l /var/www/example.com -rw-r--r-- 1 anna www-data 1520 index.html -rw-r----- 1 anna www-data 412 config.php drwxr-xr-x 2 anna www-data 4096 images drwxrwxr-x 2 www-data www-data 4096 uploads
Pierwszy znak oznacza typ: - to plik, d to katalog, l to dowiązanie symboliczne. Następnie występują trzy grupy po trzy znaki: co może właściciel, co może grupa i co mogą wszyscy pozostali. Dalej widoczni są właściciel (anna) i grupa (www-data).
| Litera | Dla pliku | Dla katalogu |
|---|---|---|
r | Odczyt | Wyświetlanie nazw w katalogu |
w | Modyfikacja | Tworzenie, zmiana nazwy i usuwanie plików |
x | Uruchamianie jako program | Wejście do katalogu i otwieranie znajdujących się w nim plików |
Prosimy zwrócić uwagę na dwie rzeczy. Bez x na katalogu nie ma dostępu do znajdujących się w nim plików, nawet jeśli są one czytelne. Natomiast kto ma w na katalogu, może usuwać z niego pliki, również te należące do kogoś innego.
Uprawnienia w postaci liczbowej
Uprawnienia często zapisuje się jako trzy cyfry: r liczy się jako 4, w jako 2, a x jako 1, sumowane dla każdej grupy.
| Liczba | Uprawnienia | Zastosowanie |
|---|---|---|
| 644 | rw-r--r-- | Zwykły plik, na przykład strona internetowa lub obraz |
| 755 | rwxr-xr-x | Katalog lub program, z którego może korzystać każdy |
| 640 | rw-r----- | Konfiguracja z hasłem, czytelna dla serwera WWW poprzez grupę |
| 600 | rw------- | Plik poufny, taki jak authorized_keys, klucz prywatny lub plik .env |
| 700 | rwx------ | Katalog prywatny, taki jak ~/.ssh |
Zmiana uprawnień i właściciela
chmod 640 /var/www/example.com/config.php chmod g+w /var/www/example.com/uploads sudo 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, z + lub -). chown właściciel:grupa zmienia właściciela i grupę; może to zrobić tylko root, dlatego należy użyć sudo.
W przypadku całego katalogu częstym błędem jest chmod -R 644: wszystkie podkatalogi tracą wtedy x i stają się bezużyteczne. Prosimy ustawiać uprawnienia osobno dla katalogów i plików za pomocą find:
sudo find /var/www/example.com -type d -exec chmod 755 {} +
sudo find /var/www/example.com -type f -exec chmod 644 {} +
Serwer WWW poprzez grupę
W systemach Debian i Ubuntu nginx i PHP-FPM domyślnie działają jako użytkownik www-data. Przejrzysty układ wygląda tak: to Państwo są właścicielem plików, a grupą jest www-data. Serwer WWW może wtedy odczytywać pliki poprzez grupę, a zapisywać tylko w katalogu, w którym jest to naprawdę konieczne, takim jak uploads (chmod g+w lub właściciel www-data wyłącznie dla tego katalogu). Prosimy nie nadawać serwerowi WWW prawa zapisu do plików PHP.
777. Wtedy każdy na serwerze może odczytywać, modyfikować i uruchamiać dany plik lub katalog. Jeśli kiedykolwiek dojdzie do włamania na jedną stronę lub usługę, intruz będzie mógł zapisywać wszędzie tam, gdzie ustawiono 777. Prawdziwym problemem jest niemal zawsze właściciel lub grupa: prosimy rozwiązać ten problem zamiast otwierać wszystko.Uprawnienia dla SSH
Serwer SSH sprawdza uprawnienia Państwa kluczy. Jeśli inni mogą zapisywać w katalogu .ssh lub w katalogu domowym, serwer zignoruje klucz i ponownie pojawi się prośba o hasło, bez jasnego komunikatu o błędzie. Prosimy ustawić to w ten sposób:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Jeśli utworzyli Państwo katalog jako root dla innego użytkownika, należy również prawidłowo ustawić właściciela, tak jak opisano w artykule Własny użytkownik z sudo. W systemach AlmaLinux i Rocky Linux SELinux może również odrzucić plik, który ma prawidłowe uprawnienia; w przypadku ręcznie utworzonego katalogu .ssh pomaga restorecon -Rv ~/.ssh.
s zamiast x, na przykład przy /usr/bin/passwd? To bit setuid: program działa wtedy z uprawnieniami właściciela. Kilka programów systemowych tego wymaga, ale nigdy nie należy ustawiać go samodzielnie na skrypcie. Nieoczekiwany plik z bitem setuid może wskazywać na włamanie, zob. Zhakowano? Pierwsze kroki.Chcą Państwo dowiedzieć się więcej? Zapraszamy na bezpłatny kurs VPS i administracji serwerem Linux, lekcja 3.1 Użytkownicy, grupy i uprawnienia plików.
