chmod
chmod (ang. change mode – zmiana atrybutu) – polecenie zmiany zezwoleń dostępu do plików w systemach uniksowych.
Użycie
chmod [opcje] uprawnienia plik
argument | znaczenie |
---|---|
-c, --changes | jak -v, ale podanie tylko kiedy zaszła zmiana |
--no-preserve-root | bez traktowania katalogu '/' w specjalny sposób (domyślnie) |
--preserve-root | odmowa rekursywnego działania na '/' |
-f, --silent, --quiet | wyłączenie większości komunikatów o błędach |
-v, --verbose | wypisanie informacji o każdym przetwarzanym pliku |
--reference=plik_wzorcowy | użycie uprawnień pliku plik_wzorcowy zamiast wartości uprawnienia |
-R, --recursive | zmiany też w plikach w podkatalogach |
--help | wyświetlenie tego opisu i zakończenie |
--version | wyświetlenie informacji o wersji i zakończenie |
Opis klas użytkowników
Uprawnienia
Istnieje kilka sposobów zapisu praw do danego pliku. Najpopularniejszymi są: system numeryczny, oraz literowy. Numerycznie chmod przyjmuje odpowiednią wartość potęgi dwójki dla każdego typu akcji (zapisu, odczytu, uruchomienia).
Typ zapisu | Prawo odczytu | Prawo zapisu | Prawo uruchomienia | Specjalne prawo uruchomienia | UID/GID | sticky bit |
---|---|---|---|---|---|---|
Potęga dwójki | 22 | 21 | 20 | |||
Wartość w ósemkowym systemie liczbowym | 4 | 2 | 1 | |||
Znak | r (ang. read) | w (ang. write) | x (ang. execute) | X | s | t |
Aby zapisać uprawnienia w systemie numerycznym należy dodać liczby odpowiadające uprawnieniom, które chcemy przyznać. Należy tak postąpić osobno dla właściciela, grupy oraz innych, np. właściciel – wszystkie prawa, grupa – odczyt, inni – brak należy zapisać jako: 740.
Aby zapisać uprawnienia w systemie znakowym należy wpisać znak u, g, o lub a (patrz Opis parametrów) następnie znak:
- + jeżeli chcemy dodać uprawnienia,
- – jeżeli chcemy odebrać uprawnienia,
- = jeżeli chcemy zmienić uprawnienia (tzn. przypisać takie, jakie podamy),
a następnie odpowiednie oznaczenia z tabeli. Po przecinku można dopisać kolejne uprawnienia (np. u=rwx,g+rw,o-r wprowadza następujące zmiany:
- dla właściciela – ustawiono odczyt, zapis oraz wykonanie, ale to ostatnie tylko wtedy jeżeli ono już jest ustawione, w innych plikach pozostanie wyłączone,
- dla grupy – dodano odczyt i zapis,
- dla innych – odebrano odczyt.)
By zobaczyć jakie prawa ma dany plik, lub katalog wystarczy użyć polecenia ls z (opcją -l).
$ ls -l razem 2844 drw-r--r-- 1 user admin 4096 maj 28 16:38 folder1/ drwxrwxr-x 6 user admin 4096 maj 25 19:18 folder2/ drw-rw-r-- 1 user admin 4096 maj 26 15:56 folder3/
Tabela z interpretacją kodów ósemkowych
Cyfra | Prawa | Litera | Binarnie |
---|---|---|---|
0 | Brak praw | --- | 000 |
1 | Wykonywanie | --x | 001 |
2 | Zapis | -w- | 010 |
3 | Zapis i wykonanie | -wx | 011 |
4 | Odczyt | r-- | 100 |
5 | Odczyt i wykonanie | r-x | 101 |
6 | Odczyt i zapis | rw- | 110 |
7 | Odczyt, zapis i wykonanie | rwx | 111 |
Przykłady uprawnień
Prawa dostępu | Wartość liczbowa | Opis |
---|---|---|
-rw------- | 600 | Tylko właściciel ma prawo do odczytu i zapisu. |
-rw-r--r-- | 644 | Właściciel ma prawo do zapisu i odczytu, a reszta tylko prawo odczytu. |
-rw-rw-rw- | 666 | Wszyscy mają prawo do odczytu i zapisu. |
-rwx------ | 700 | Tylko właściciel ma prawo do odczytu, zapisu, uruchomienia. |
-rwxr-xr-x | 755 | Właściciel ma wszystkie prawa do pliku, reszta tylko prawo do odczytu i uruchomienia. |
-rwxrwxrwx | 777 | Wszyscy mają wszystkie prawa do pliku. |
-rwx--x--x | 711 | Wszystkie prawa ma właściciel, reszta tylko prawo uruchomienia. |
drwx------ | 700 | Właściciel katalogu ma pełne prawa do niego (katalogi mają literkę 'd' na początku zamiast '-') |
drwxr--r-- | 744 | Właściciel ma pełne prawa do katalogu, reszta ma prawo do odczytu. |
-rwsr-xr-x | 4755 | Właściciel ma pełne prawa do pliku, grupa ma prawa odczytu i wykonania, reszta ma prawo odczytu i uruchamiania. Plik ma atrybut SUID (pierwsza cyfra w opcjach jest równa 4). Oznacza to, że plik wykonywalny, np. wywołuje proces i oddaje mu kontrole nad wykonaniem zadania. Bez opcji SUID proces działa z uprawnieniami użytkownika, który uruchomił plik, co czasami może powodować niewykonanie zadania, gdyż użytkownik nie miał dostatecznych uprawnień. Z opcją SUID proces pobiera uprawnienia właściciela pliku, najczęściej roota. Polecenie ping i uprawnienia do pliku wykonywalnego są przykładem wykorzystania tej opcji. |
Przykłady użycia
- $ chmod a+w plik.txt — nadaje wszystkim uprawnienia do zmiany 'plik.txt',
- $ chmod o-x plik.txt — usuwa możliwość wykonywania 'plik.txt' przez pozostałych użytkowników,
- $ chmod go-rx plik.txt — usuwa możliwość odczytywania i wykonywania "plik.txt" przez grupę i pozostałych użytkowników.
- $ chmod -R 777 /home/user — wszyscy będą mogli zmieniać zawartość katalogu
/home/user
oraz jego podkatalogów, jak też czytać go i wykonywać zawarte w nim pliki