Sudo chown – jak zmienić właściciela pliku w Linuksie

Oskar Gajzler
Przez
Oskar Gajzler
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak...
9 min czytania

1. Co to jest chown i po co go używać?

W systemach Linux każdy plik i katalog ma:

  • właściciela (użytkownika),
  • grupę,
  • zestaw uprawnień (odczyt, zapis, wykonanie).

Polecenie chown służy do zmiany właściciela oraz – opcjonalnie – grupy dla plików i katalogów.

Oto typowe zastosowania w codziennej pracy admina i developera:

  • przeniesienie plików między użytkownikami (np. z root do zwykłego użytkownika),
  • naprawa uprawnień po kopiowaniu lub przenoszeniu danych,
  • ustawienie właściciela plików serwera WWW (np. Apache, Nginx),
  • konfiguracja uprawnień dla usług (bazy danych, demony, aplikacje webowe).

2. Podstawowa składnia polecenia chown

Standardowa składnia wygląda następująco:

chown [OPCJE] WŁAŚCICIEL[:GRUPA] PLIK...

Najważniejsze elementy składni to:

  • WŁAŚCICIEL – nazwa użytkownika (np. jan, www-data);
  • GRUPA – nazwa grupy (np. users, www-data);
  • PLIK – plik lub katalog (ścieżka względna lub absolutna).

Przykład użycia z uprawnieniami administratora:

sudo chown WŁAŚCICIEL[:GRUPA] PLIK

3. Zmiana właściciela – najprostsze przykłady

3.1. Zmiana właściciela pliku

Polecenie:

sudo chown jan dokument.txt

Ten przykład ustawia użytkownika jan jako właściciela pliku dokument.txt. Grupa pozostaje bez zmian.

3.2. Zmiana właściciela katalogu

Polecenie:

sudo chown jan /var/www

Zmienia właściciela katalogu /var/www, ale nie modyfikuje plików w środku (bez opcji rekurencji).

4. Zmiana grupy za pomocą chown

chown może zmienić także samą grupę, bez zmiany właściciela.

4.1. Zmiana tylko grupy

Składnia i przykład:

sudo chown :www-data /var/www/index.html

To polecenie ustawia grupę www-data dla pliku index.html; właściciel pozostaje bez zmian.

5. Jednoczesna zmiana właściciela i grupy

Najczęściej używana forma wygląda tak:

sudo chown WŁAŚCICIEL:GRUPA PLIK

Praktyczny przykład:

sudo chown jan:www /home/jan/projekt.html

Plik projekt.html będzie należał do użytkownika jan i grupy www.

Warianty zapisu i ich działanie:

  • WŁAŚCICIEL:GRUPA – jednoczesna zmiana właściciela i grupy;
  • WŁAŚCICIEL: – zmiana właściciela i ustawienie grupy na domyślną grupę użytkownika (zależnie od systemu);
  • :GRUPA – zmiana tylko grupy.

6. Zmiana właściciela rekurencyjnie – katalog i wszystko w środku

Aby zmienić właściciela/grupę dla katalogu i wszystkich podkatalogów oraz plików, użyj opcji -R (rekurencyjnie).

6.1. Przykład rekurencyjnej zmiany

Polecenie:

sudo chown -R jan:www /var/www

To polecenie ustawia właściciela jan i grupę www dla katalogu /var/www.

Zmiana obejmuje również wszystkie pliki i podkatalogi w jego wnętrzu (/var/www/*).

W kontekście hostingu WWW może to wyglądać tak:

chown -R serwer:user /home/serwer/public_html

6.2. Uwaga na rekurencję

Opcja -R potrafi zmienić setki tysięcy plików – błąd w ścieżce może zniszczyć uprawnienia dużej części systemu.

Zawsze upewnij się, że wskazujesz właściwy katalog (np. /home/jan/projekt, a nie /home/jan).

Bezpieczna praktyka: wejść poziom wyżej i użyć ścieżki względnej:

cd /home
sudo chown -R bob:bob bob

7. Przydatne opcje chown

Poza -R warto znać kilka opcji, które często przydają się w administracji.

7.1. -R – rekurencyjna zmiana

Jak wyżej: obejmuje katalog i całe jego drzewo.

7.2. -h – nie podążaj za dowiązaniami symbolicznymi

Przydatne przy rekurencji, aby nie zmieniać własności plików, na które wskazują symlinki.

Przykład:

sudo chown -hR jan:www /srv/www

Zmienia właściciela i grupę katalogu oraz zawartości, ale nie podąża za dowiązaniami symbolicznymi.

7.3. --from=STARY – zmiana tylko gdy właściciel/grupa pasują

Opcja pozwala zmienić właściciela/grupę tylko jeśli plik ma obecnie wskazanego właściciela lub grupę.

Przykład zmiany właściciela z guest na pawel tylko wtedy, gdy plik należy do guest:

chown --from=guest pawel plik1

Przykład zmiany grupy z friends na family tylko wtedy, gdy plik jest w grupie friends:

chown --from=:friends :family plik1

To bardzo przydatne w skryptach, gdy nie chcesz nadpisywać ręcznie poprawionych własności.

7.4. --reference=PLIK – skopiuj właściciela i grupę z innego pliku

Zamiast podawać użytkownika i grupę ręcznie, użyj pliku referencyjnego:

chown --reference=plik1 plik2

Własność (właściciel + grupa) pliku plik1 zostanie skopiowana do plik2. Przydaje się, gdy chcesz zachować identyczne własności jak w pliku wzorcowym.

8. Jak sprawdzić aktualnego właściciela i grupę?

Najprościej użyć listowania długiego:

ls -l plik.txt

Przykładowy wynik polecenia:

-rw-r--r-- 1 jan www 1024 cze 1 12:00 plik.txt

Wynik oznacza, że właścicielem jest jan, a grupa to www.

Po wykonaniu chown sprawdź wynik poleceniem ls -l, aby potwierdzić, że zmiana się powiodła.

9. Rola sudo i uprawnień przy chown

Zmiana właściciela jest operacją zarezerwowaną dla superużytkownika (root).

Zwykły użytkownik może czasem zmienić grupę na taką, do której należy (zależnie od konfiguracji), ale co do zasady nie może zmienić właściciela na innego użytkownika.

Aby zmienić właściciela na innego użytkownika (np. z root na jan), użyj polecenia z uprawnieniami administratora:

sudo chown jan plik.txt

Na serwerach VPS/hostingowych sudo bywa dostępne, a użytkownik zwykle może modyfikować własność plików w obrębie swojego katalogu domowego lub konta serwerowego.

10. Przykłady praktyczne – webhosting, serwery WWW

Poniżej kilka typowych scenariuszy z serwerów WWW.

10.1. Ustawienie właściciela plików strony WWW

Załóżmy następującą konfigurację:

  • użytkownik systemowy: serwer,
  • grupa: users,
  • katalog z plikami strony: /home/serwer/public_html.

Polecenia do wykonania:

chown serwer:users /home/serwer/public_html/index.html
chown -R serwer:users /home/serwer/public_html

W pierwszym przypadku zmieniasz własność jednego pliku, w drugim – całej zawartości katalogu.

10.2. Naprawa uprawnień po kopii wykonanej jako root

Typowy błąd: kopia strony wykonana jako root, przez co pliki należą do root, a nie do użytkownika hostingu. Naprawisz to tak:

cd /home/serwer
sudo chown -R serwer:users public_html

Po tym kroku pliki znów należą do konta używanego przez serwer WWW.

11. Typowe błędy i jak ich uniknąć

11.1. chown na złej ścieżce

Przykład katastrofalnego błędu (rekurencja od katalogu głównego):

sudo chown -R jan:jan /

To może całkowicie zniszczyć uprawnienia systemu, włącznie z plikami systemowymi.

Jak się zabezpieczyć:

  • zawsze sprawdzaj ścieżkę przed wciśnięciem Enter,
  • użyj najpierw ls, aby potwierdzić zakres działania,
  • często bezpieczniej jest wejść poziom wyżej i użyć ścieżki względnej.

Przykład bezpieczniejszego podejścia:

cd /home
sudo chown -R bob:bob bob

11.2. Mieszanie chown i chmod

chown zmienia właściciela i/lub grupę pliku lub katalogu.

chmod zmienia uprawnienia (rwx) dla właściciela, grupy i innych.

Do kompletnej konfiguracji dostępu często używa się obu poleceń – najpierw chown, potem chmod.

12. Dokumentacja i pomoc z poziomu systemu

Skrócona pomoc dostępna jest pod poleceniem:

chown --help

Pełny podręcznik (manpage) znajdziesz tutaj:

man chown

W dokumentacji opisano m.in. opcje -H, -L, -P wpływające na zachowanie przy dowiązaniach i rekurencji.

13. Chown a poziom systemowy (dla ciekawych)

Na poziomie programistycznym zmiana właściciela realizowana jest przez funkcję systemową chown():

int chown (const char * filename, uid_t user, gid_t group);

Funkcja modyfikuje pola uid i gid w i-węźle (inode) przypisanym do pliku. Dla użytkownika powłoki kluczowe pozostaje jednak polecenie chown w terminalu.

14. Szybka ściągawka – najważniejsze wzorce użycia

Poniższa tabela zbiera najczęściej stosowane wzorce wraz z poleceniami:

Zadanie Polecenie
Zmiana właściciela pliku sudo chown jan plik.txt
Zmiana grupy sudo chown :www plik.txt
Zmiana właściciela i grupy sudo chown jan:www plik.txt
Rekurencyjna zmiana dla katalogu sudo chown -R jan:www /var/www
Zmiana tylko jeśli obecny właściciel to guest chown --from=guest jan plik.txt
Skopiowanie właściciela i grupy z innego pliku chown --reference=plik_wzor.txt plik_cel.txt
Udostępnij ten artykuł
Obserwuj
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak bezpiecznie korzystać z sieci i jak dobierać sprzęt oraz oprogramowanie. Prywatnie tropi nowinki technologiczne i testuje je, zanim opisze.
Brak komentarzy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *