Nadzorowanie uprawnień plików

Z SOISK systemy operacyjne i sieci komputerowe
Skocz do: nawigacja, szukaj

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

  • u - użytkownik (ang. user)
  • g - grupa (ang. group)
  • o - inni (ang. others)
  • a - wszyscy (ang. all)

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 2^2 2^1 2^0
Numer dziesiętny 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 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 interperetacją kodów ósemkowych

Cyfra Prawa Litera
0 Brak praw
1 Wykonywanie x
2 Pisanie w
3 Wykonywanie i pisanie wx
4 Czytanie r
5 Czytanie i wykonywanie rx
6 Czytanie i pisanie rw
7 Czytanie, pisanie i wykonywanie rwx

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ą pełne prawa (nie zalecane).
-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.
-rwxr-xr-x 4755 Właściciel ma pełne prawa do pliku, grupa ma prawa odczytu i wykonania, reszta ma prawo uruchamiania. Plik ma atrybut SUID -pierwsza cyfra w opcjach(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ć nie wykonanie 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ą świetnym przykładem ustawienia tej opcji.

Przykłady użycia

  • $ chmod a+w plik.txt – wszyscy będą mogli edytować 'plik.txt'
  • $ chmod o-x plik.txt – usunie możliwość wykonywania 'plik.txt' przez pozostałych użytkowników
  • $ chmod go=rx plik.txt – pozostali użytkownicy, oraz grupa będą mogli tylko czytać i wykonywać.
  • $ 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 [1].

Małe podsumowanie

Dla łatwiejszego zrozumienia zebrałem wcześniejsze informacje i zamknąłem w poniższym obrazku.

Chmod.jpg

Sprawdzanie uprawnień ls -l

Ls-l.jpg

Pierwsza kolumna oznacza uprawnienia. 1 znak to identyfikator typu obiektu, 3 kolejne znaki to uprawnienia użytkownika, kolejne 3 to uprawniania grupy i 3 ostatnie to uprawniania innych.

Identyfikatory typu obiektu:

- zwykły plik

b specjalny plik blokowy

c specjalny plik znakowy

d katalog

l połączenie symboliczne

p nazwany potok

s gniazdo (socket)

Trzecia kolumna oznacza kto jest właścicielem (użytkownikiem).

Czwarta kolumna pokazuje nazwę grupy.

Ćwiczenia

  1. Przedstaw w sposób tradycyjny. Prawa do katalogu 777, 754, 666, 740, 750. Prawa do pliku 700, 766, 541, 633, 765.
  2. Wejdź jako root do katalogu domowego ucznia. Stwórz plik klasa.txt. Edytuj go wykorzystując mcedit. Dopisz imiona kilku osób z klasy. W 2 powłoce jako zwykły użytkownik spróbuj dopisać kolejne nazwiska. Dlaczego nie możesz zapisać pliku? Zrób coś z tym. Zadanie ma być wykonane.
  3. Jako root załóż katalog szkoła. Jako zwykły użytkownik spróbuj skopiować klasa.txt do katalogu szkoła. Dlaczego nie możesz? Zadanie ma być wykonane.
  4. Jako root ustaw do folderu szkoła prawa 753, czyli pozostali nie mają odczytu. Czy możesz wejść do katalogu jako zwykły użytkownik? Czy możesz sprawdzić jego zawartość? Czy możesz odczytać plik klasa.txt?
  5. Jako root ustaw do folderu szkoła prawa 756, czyli pozostali nie mają wykonywania. Czy możesz wejść do katalogu jako zwykły użytkownik? Czy możesz sprawdzić jego zawartość? Czy możesz odczytać plik klasa.txt?
  6. Jako zwykły użytkownik założ folder technik. Odbierz pozostałym wykonywanie. Czy root będzie miał dostęp do tego folderu?
  7. Jako root załóż folder admin. Odbierz sobie i grupie wszelkie prawa (007). Czy root ma dostęp do tego folderu?

Zmiana właściciela pliku

chown

Zmiana przypisania pliku do grupy

chgrp