W Linuksie, dostęp do plików jest zarządzany poprzez uprawnienia do plików, atrybuty i własność. Zapewnia to, że tylko autoryzowani użytkownicy i procesy mogą uzyskać dostęp do plików i katalogów.
Ten poradnik omawia, jak używać polecenia chmod
do zmiany uprawnień dostępu do plików i katalogów.
Uprawnienia do plików w systemie Linux #
Przed przejściem dalej, wyjaśnijmy podstawowy model uprawnień w systemie Linux.
W systemie Linux każdy plik jest powiązany z właścicielem i grupą oraz przypisany z prawami dostępu do uprawnień dla trzech różnych klas użytkowników:
- Właściciel pliku.
- Członkowie grupy.
- Others (wszyscy inni).
Własność pliku można zmienić za pomocą poleceń chown
i chgrp
.
Do każdej klasy mają zastosowanie trzy typy uprawnień do pliku:
- Uprawnienie do odczytu.
- Uprawnienie do zapisu.
- Uprawnienie do wykonywania.
Pojęcie to pozwala określić, którzy użytkownicy mają prawo do odczytu pliku, zapisu do pliku lub wykonywania pliku.
Uprawnienia do plików można przeglądać za pomocą polecenia ls
:
ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type
Pierwszy znak wskazuje typ pliku. Może to być zwykły plik (-
), katalog (d
), dowiązanie symboliczne (l
) lub inny specjalny typ pliku.
Następne dziewięć znaków reprezentuje uprawnienia do pliku, trzy tryplety po trzy znaki każdy. Pierwszy trójkąt pokazuje uprawnienia właściciela, drugi uprawnienia grupy, a ostatni trójkąt pokazuje uprawnienia wszystkich innych. Uprawnienia te mogą mieć różne znaczenie w zależności od typu pliku.
W powyższym przykładzie (rw-r--r--
) oznacza, że właściciel pliku ma uprawnienia do odczytu i zapisu (rw-
), grupa i inni mają tylko uprawnienia do odczytu (r--
).
Każda z trzech trójek uprawnień może być zbudowana z następujących znaków i mieć różne skutki, w zależności od tego, czy są ustawione na plik, czy na katalog:
Efekt uprawnień na plikach
Pozwolenie | Znak | Znaczenie na pliku |
---|---|---|
Read | - |
Plik nie nadaje się do odczytu. Nie można wyświetlić zawartości pliku. |
r |
Plik jest możliwy do odczytania. | |
Zapis | - |
Plik nie może być zmieniony lub zmodyfikowany. |
w |
Plik może być zmieniony lub zmodyfikowany. | |
Execute | - |
Plik nie może zostać wykonany. |
x |
Plik może zostać wykonany. | |
s |
Jeśli znajduje się w trójce user , ustawia bit setuid . Jeśli znajduje się w trójkącie group , ustawia bit setgid . Oznacza to również, że ustawiona jest flaga x .Gdy flagi setuid lub setgid są ustawione na pliku wykonywalnym, plik jest wykonywany z uprawnieniami właściciela pliku i/lub grupy. |
|
S |
Tak samo jak s , ale nie jest ustawiana flaga x . Ta flaga jest rzadko używana w plikach. |
|
t |
Jeśli występuje w triadzie others , ustawia bit sticky .Oznacza również, że flaga x jest ustawiona. Ta flaga jest bezużyteczna na plikach. |
|
T |
Tak samo jak t , ale flaga x nie jest ustawiona. Ta flaga jest bezużyteczna dla plików. |
Wpływ uprawnień na katalogi (foldery)
W systemie Linux katalogi są specjalnymi typami plików, które zawierają inne pliki i katalogi.
Pozwolenie | Znak | Znaczenie na katalog |
---|---|---|
Odczytaj | - |
Zawartość katalogu nie może być pokazana. |
r |
Zawartość katalogu może zostać wyświetlona. (np. można wyświetlić listę plików wewnątrz katalogu za pomocą ls .) |
|
Write | - |
Zawartość katalogu nie może być zmieniana. |
w |
Zawartość katalogu może być zmieniana. (np. Można tworzyć nowe pliki, usuwać pliki ..itp.) |
|
Execute | - |
Katalog nie może być zmieniony. |
x |
Katalog może być nawigowany przy użyciu cd . |
|
s |
Jeśli znajduje się w triadzie user , ustawia bit setuid . Jeśli znajduje się w trójkącie group , ustawia bit setgid . Oznacza to również, że flaga x jest ustawiona. Gdy flaga setgid jest ustawiona na katalog, nowe pliki utworzone w nim dziedziczą identyfikator grupy katalogowej (GID), zamiast podstawowego identyfikatora grupy użytkownika, który utworzył plik.setuid nie ma wpływu na katalogi. |
|
S |
Tak samo jak s , ale flaga x nie jest ustawiona. Ta flaga jest bezużyteczna na katalogach. |
|
t |
Jeśli znajduje się w trójce others , ustawia bit sticky .Oznacza również, że ustawiona jest flaga x . Gdy bit sticky jest ustawiony na katalogu, tylko właściciel pliku, właściciel katalogu lub użytkownik administracyjny może usunąć lub zmienić nazwę plików w katalogu. |
|
T |
Tak samo jak t , ale flaga x nie jest ustawiona. Ta flaga jest bezużyteczna dla katalogów. |
Używanie chmod #
Polecenie chmod
ma następującą ogólną postać:
chmod MODE FILE...
Polecenie chmod
pozwala zmienić uprawnienia do pliku przy użyciu trybu symbolicznego lub numerycznego albo pliku referencyjnego. Tryby te wyjaśnimy bardziej szczegółowo w dalszej części artykułu. Polecenie może przyjąć jeden lub więcej plików i/lub katalogów oddzielonych spacją jako argumenty.
Tylko root, właściciel pliku lub użytkownik z uprawnieniami sudo może zmienić uprawnienia pliku. Zachowaj szczególną ostrożność podczas używania chmod
, zwłaszcza podczas rekursywnej zmiany uprawnień.
Metoda symboliczna (tekstowa) #
Składnia polecenia chmod
podczas używania trybu symbolicznego ma następujący format:
chmod perms… FILE...
Pierwszy zestaw flag (), flag użytkowników, określa, w których klasach użytkowników zmieniane są uprawnienia do pliku.
-
u
– Właściciel pliku. -
g
– Użytkownicy, którzy są członkami grupy. -
o
– Wszyscy inni użytkownicy. -
a
– Wszyscy użytkownicy, identycznie jakugo
.
Jeśli flaga users jest pominięta, domyślną jest a
, a uprawnienia ustawiane przez umaskare nie ulegają zmianie.
Drugi zestaw flag (), flag operacji, określa, czy uprawnienia mają być usuwane, dodawane czy ustawiane:
-
-
Usuwa określone uprawnienia. -
+
Dodaje określone uprawnienia. -
=
Zmienia bieżące uprawnienia na określone uprawnienia. Jeśli po symbolu=
nie określono żadnych uprawnień, usuwane są wszystkie uprawnienia z określonej klasy użytkownika.
Uprawnienia (perms...
) mogą być jawnie ustawione przy użyciu zera albo jednej lub więcej z następujących liter: r
, w
, x
, X
, s
i t
. Użyj pojedynczej litery z zestawu u
, g
i o
podczas kopiowania uprawnień z jednej do drugiej klasy użytkowników.
Przy ustawianiu uprawnień dla więcej niż jednej klasy użytkowników (), użyj przecinków (bez spacji), aby oddzielić tryby symboliczne.
Poniżej podano kilka przykładów użycia polecenia chmod
w trybie symbolicznym:
-
Nadaj członkom grupy uprawnienia do odczytu pliku, ale nie do zapisu i wykonania:
chmod g=r filename
-
Usuń uprawnienia do wykonania dla wszystkich użytkowników:
chmod a-x filename
-
Usuń uprawnienia do zapisu dla innych użytkowników:
chmod -R o-w dirname
-
Usuń uprawnienia do odczytu, zapisu i wykonania dla wszystkich użytkowników z wyjątkiem właściciela pliku:
chmod og-rwx filename
To samo można również osiągnąć za pomocą następującej postaci:
chmod og= filename
-
Nadaj uprawnienia do odczytu, zapisu i wykonywania dla właściciela pliku, uprawnienia do odczytu dla grupy pliku i brak uprawnień dla wszystkich innych użytkowników:
chmod u=rwx,g=r,o= filename
-
Dodaj uprawnienia właściciela pliku do uprawnień, jakie mają członkowie grupy właściciela pliku:
chmod g+u filename
-
Dodaj bit sticky do danego katalogu:
chmod o+t dirname
Metoda numeryczna #
Składnia polecenia chmod
podczas korzystania z metody numerycznej ma następujący format:
chmod NUMBER FILE...
Przy korzystaniu z trybu numerycznego można ustawić uprawnienia dla wszystkich trzech klas użytkowników (właściciel, grupa i wszyscy inni) jednocześnie.
Numer NUMBER
może być 3- lub 4-cyfrowy.
Gdy używany jest numer 3-cyfrowy, pierwsza cyfra reprezentuje uprawnienia właściciela pliku, druga – grupy pliku, a ostatnia – wszystkich innych użytkowników.
Każde uprawnienie zapisu, odczytu i wykonania ma następującą wartość liczbową:
-
r
(read) = 4 -
w
(write) = 2 -
x
(execute) = 1 - brak uprawnień = 0
Liczba uprawnień określonej klasy użytkowników jest reprezentowana przez sumę wartości uprawnień dla tej grupy.
Aby dowiedzieć się o uprawnieniach pliku w trybie numerycznym, po prostu oblicz sumy dla wszystkich klas użytkowników. Na przykład, aby dać uprawnienia do odczytu, zapisu i wykonania dla właściciela pliku, uprawnienia do odczytu i wykonania dla grupy pliku i tylko uprawnienia do odczytu dla wszystkich innych użytkowników, wykonałbyś następujące czynności:
- Właściciel: rwx=4+2+1=7
- Grupa: r-x=4+0+1=5
- Pozostali: r-x=4+0+0=4
Stosując powyższą metodę dochodzimy do liczby 754
, która reprezentuje pożądane uprawnienia.
Aby ustawić flagi setuid
, setgid
i sticky bit
należy użyć czterocyfrowego numeru.
Gdy używany jest numer czterocyfrowy, pierwsza cyfra ma następujące znaczenie:
- setuid=4
- setgid=2
- sticky=1
- bez zmian = 0
Następne trzy cyfry mają takie samo znaczenie jak przy użyciu numeru trzycyfrowego.
Jeżeli pierwszą cyfrą jest 0, można ją pominąć, a tryb można przedstawić za pomocą 3 cyfr. Tryb numeryczny 0755
jest taki sam jak 755
.
Aby obliczyć tryb numeryczny można również użyć innej metody (metoda binarna), ale jest to trochę bardziej skomplikowane. Wiedza jak obliczyć tryb numeryczny używając 4, 2, i 1 jest wystarczająca dla większości użytkowników.
Możesz sprawdzić uprawnienia do pliku w notacji numerycznej za pomocą polecenia stat
:
stat -c "%a" filename
644
Oto kilka przykładów użycia polecenia chmod
w trybie numerycznym:
-
Nadanie właścicielowi pliku uprawnień do odczytu i zapisu oraz uprawnień tylko do odczytu członkom grupy i wszystkim innym użytkownikom:
chmod 644 dirname
-
Nadanie właścicielowi pliku uprawnień do odczytu, zapisu i wykonania, uprawnień do odczytu i wykonania członkom grupy oraz braku uprawnień wszystkim innym użytkownikom:
chmod 750 dirname
-
Nadaj uprawnienia odczytu, zapisu i wykonania oraz lepki bit do danego katalogu:
chmod 1777 dirname
-
Recursywnie ustaw uprawnienia odczytu, zapisu i wykonania dla właściciela pliku oraz brak uprawnień dla wszystkich innych użytkowników na danym katalogu:
chmod -R 700 dirname
Używanie pliku referencyjnego #
Opcja --reference=ref_file
pozwala ustawić uprawnienia pliku tak, aby były takie same jak uprawnienia określonego pliku referencyjnego (ref_file
).
chmod --reference=REF_FILE FILE
Na przykład poniższe polecenie spowoduje przypisanie uprawnień pliku file1
do file2
chmod --reference=file1 file2
Rekursywna zmiana uprawnień pliku #
Aby rekurencyjnie operować na wszystkich plikach i katalogach pod danym katalogiem, należy użyć opcji -R
(--recursive
):
chmod -R MODE DIRECTORY
Na przykład, aby zmienić uprawnienia wszystkich plików i podkatalogów pod katalogiem /var/www
na 755
, użyłbyś:
chmod -R 755 /var/www
Operating on Symbolic Links #
Symbolic linksalways have 777
permissions.
Domyślnie, podczas zmiany uprawnień symlinka, chmod
zmieni uprawnienia do pliku, na który wskazuje link.
chmod 755 symlink
Możliwe, że zamiast zmiany własności celu, otrzymasz błąd „cannot access 'symlink’: Permission denied” error.
Błąd występuje, ponieważ domyślnie w większości dystrybucji Linuksa symlinki są chronione i nie można operować na plikach docelowych. Opcja ta jest określona w /proc/sys/fs/protected_symlinks
. 1
oznacza włączone, a 0
wyłączone. Zaleca się, aby nie wyłączać ochrony symlinków.
Zmiana uprawnień do plików masowo #
Czasami zdarzają się sytuacje, w których trzeba masowo zmienić uprawnienia do plików i katalogów.
Najczęstszym scenariuszem jest rekursywna zmiana uprawnień pliku witryny na 644
i uprawnień katalogu na 755
.
Użycie metody numerycznej:
find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;
Użycie metody symbolicznej:
find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;
find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;
Polecenie find
wyszuka pliki i katalogi pod /var/www/my_website
i przekaże każdy znaleziony plik i katalog do polecenia chmod
w celu ustawienia uprawnień.
Wniosek #
Polecenie chmod
zmienia uprawnienia pliku. Uprawnienia mogą być ustawione przy użyciu trybu symbolicznego lub numerycznego.
Aby dowiedzieć się więcej o chmod
, odwiedź stronę podręcznika chmod.
.