5.3 Lekcja 1
Certyfikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
5 Bezpieczeństwo i uprawnienia do plików |
Cel nauki: |
5.3 Zarządzanie uprawnieniami do plików i prawami własności plików |
Lekcja: |
1 z 1 |
Wstęp
Linux, jako system wielu użytkowników musi wiedzieć, kto jest właścicielem każdego pliku i czy użytkownik może wykonywać działania na określonych plikach, czy nie może. Tylko w ten sposób można zagwarantować prywatność użytkowników, którzy chcą, aby zawartość ich plików była traktowana jako poufna. Jednocześnie umożliwia to współpracę, poprzez udostępnienie określonych plików innym użytkownikom.
Odbywa się to za pośrednictwem trzypoziomowego systemu autoryzacji. Każdy plik na dysku jest własnością użytkownika i grupy użytkowników oraz ma trzy zestawy uprawnień: jeden dla właściciela tego pliku, jeden dla grupy będącej właścicielem pliku i jeden dla wszystkich innych użytkowników. W tej lekcji dowiesz się, jak sprawdzać uprawnienia do pliku i jak nimi zarządzać.
Zapytanie o informacje o plikach i katalogach
Polecenie ls
służy do wyświetlania zawartości dowolnego katalogu. W podstawowej formie otrzymujesz tylko nazwy plików i katalogów:
$ ls Another_Directory picture.jpg text.txt
Jednakże jest dostepnych wiele bardziej szczegółowych informacji o każdym pliku, w tym typ, rozmiar, dane o właścicielu i inne. Aby zobaczyć te informacje, użyj polecenia ls
z parametrem -l
dla uzyskania “długiej listy” (“long form”):
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Każda kolumna powyższego wyniku posiada następujące znaczenie:
-
Pierwsza kolumna na liście pokazuje typ pliku i prawa dostępu, na przykład
drwxrwxr-x
:-
Pierwsza litera
d
wskazuje typ pliku (np. plik, katalog, link). -
Następne trzy znaki,
rwx
, wskazują uprawnienia dla właściciela pliku, określanego również jako lubu
(user). -
Następne trzy znaki,
rwx
, wskazują uprawnienia dla grupy, będącej właścicielem pliku, nazywanej również jakog
(group). -
Ostatnie trzy znaki,
r-x
, wskazują uprawnienia dla pozostałych osób, znane również jako inne lubo
(other).
-
-
Druga kolumna pokazuje liczbę twardych linków kierujących do tego pliku. W przypadku katalogu oznacza to liczbę podkatalogów oraz łącze do samego siebie (
.
) i do katalogu nadrzędnego (..
). -
Trzecia oraz czwarta kolumna pokazują właścicieli lub użytkowników i grupy będące właścicielami pliku.
-
Piąta kolumna pokazuje rozmiar pliku w bajtach.
-
Szósta kolumna pokazuje dokładną datę i godzinę lub znacznik czasu, kiedy plik był ostatnio modyfikowany.
-
Siódma oraz ostatnia kolumna pokazują nazwę pliku.
Jeśli chcesz zobaczyć rozmiary plików w formacie “czytelnym dla człowieka”, dodaj parametr -h
do polecenia ls
. Pliki o rozmiarze mniejszym niż jeden kilobajt są wyświetlane w bajtach. Dla plików większych niż jeden kilobajt, ale mniejszych niż jeden megabajt, po rozmiarze zostanie dodana litera K
, wskazująca, że rozmiar jest wyrażony w kilobajtach. To samo dotyczy rozmiarów plików w zakresie megabajtów (M
) i gigabajtów (G
):
$ ls -lh total 1,2G drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip -rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh -rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt -rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip
Aby wyświetlić tylko informacje o określonym zestawie plików, dodaj nazwy tych plików do polecenia ls
:
$ ls -lh HugeFile.zip test.sh total 1,2G -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
A co z katalogami?
Jeśli spróbujesz zapytać o informacje o katalogu za pomocą polecenia ls -l
, wówczas wyświetli się lista zawartości katalogu:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Aby tego uniknąć i uzyskać informacje dotyczące samego katalogu, dodaj parametr -d
(directory) do polecenia ls
:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Zobacz pliki ukryte
Lista katalogów, którą uzyskaliśmy wcześniej za pomocą ls -l
jest niekompletna:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
W tym katalogu znajdują się trzy inne pliki, ale są one ukryte. W systemie Linux pliki z nazwami zaczynającymi się od kropki (.
) są automatycznie ukrywane. Aby je zobaczyć, musimy dodać parametr -a
(all) po poleceniu ls
:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
Plik .thisIsHidden
jest ukryty, ponieważ jego nazwa zaczyna się od kropki .
.
Katalogi .
oraz ..
są katalogami specjalnymi. Kropka .
jest wskaźnikiem do bieżącego katalogu, podczas gdy dwukropek ..
jest wskaźnikiem do katalogu nadrzędnego (katalogu, który zawiera katalog bieżący). W systemie Linux każdy katalog zawiera przynajmniej te dwa katalogi specjalne.
Tip
|
Możesz łączyć wiele parametrów dla polecenia |
Zapoznanie z typami plików
Wspomnieliśmy wcześniej, że pierwsza litera w każdym wierszu polecenia ls -l
opisuje typ pliku. Trzy najpopularniejsze typy plików to:
-
(zwykły plik)-
Plik może zawierać dane dowolnego typu. Pliki można modyfikować, przenosić, kopiować i usuwać.
d
(katalog)-
Katalog zawiera inne pliki lub katalogi i pomaga zorganizować system plików. Z technicznego punktu widzenia katalogi są specjalnym typem plików.
l
(miękki link)-
Ten “plik” jest wskaźnikiem do innego pliku lub katalogu w dowolnym miejscu w systemie plików Linuxa.
Oprócz tego istnieją trzy inne typy plików, o których powinieneś przynajmniej wiedzieć, ale które wykraczają poza zakres tej lekcji:
b
(urządzenie blokowe)-
Ten plik reprezentuje urządzenie wirtualne lub fizyczne, zwykle dyski twarde lub inne rodzaje urządzeń magazynujących. Na przykład pierwszy dysk twardy w systemie może być reprezentowany przez
/dev/sda
. c
(urządzenie znakowe)-
Ten plik oznacza urządzenie wirtualne lub fizyczne. Terminale (jak np. główny terminal na
/dev/ttyS0
) i porty szeregowe są typowymi przykładami urządzeń znakowych. s
(gniazdo)-
Gniazda działają jak “kanały”, które przekazują informacje między dwoma programami.
Warning
|
Nie zmieniaj żadnych uprawnień na urządzeniach blokowych, urządzeniach znakowych ani gniazdach, chyba że wiesz, co robisz. W przeciwnym razie system może przestać działać! |
Zrozumienie uprawnień
W danych wyjściowych polecenia ls -l
, uprawnienia do plików są wyświetlane bezpośrednio po typie pliku jako trzy grupy po trzy znaki każda, w kolejności r
, w
oraz x
. Należy pamiętać, że myślnik -
oznacza brak konkretnego pozwolenia.
Uprawnienia do plików
r
-
Oznacza read (czytaj) i ma wartość ósemkową
4
(nie martw się, wkrótce omówimy wartości ósemkowe). Oznacza to uprawnienie do otwierania pliku i odczytywania jego zawartości. w
-
Oznacza write (pisz) i ma wartość ósemkową
2
. Oznacza to uprawnienie do edycji lub usuwania pliku. x
-
Oznacza execute (wykonaj) i ma wartość ósemkową
1
. Oznacza to, że plik można uruchomić jako plik wykonywalny lub skrypt.
Na przykład plik z uprawnieniami rw-
może być odczytywany i zapisywany, ale nie może być wykonany.
Uprawnienia do katalogów
r
-
Oznacza read (czytaj) i ma wartość ósemkową
4
. Oznacza to pozwolenie do otwierania pliku i odczytywania jego zawartości, na przykład nazw plików. Nie oznacza to jednak pozwolenia na samodzielne odczytywanie plików. w
-
Oznacza write (pisz) i ma wartość ósemkową
2
. Oznacza to upoważnienie do tworzenia lub usuwania plików w katalogu lub do zmiany ich nazw, praw i właścicieli. Jeśli użytkownik ma uprawnienia do zapisu w katalogu, może zmienić uprawnienia dowolnego pliku w katalogu, nawet jeśli nie ma uprawnień do pliku lub jeśli właścicielem pliku jest inny użytkownik. x
-
Oznacza execute (wykonaj) i ma wartość ósemkową
1
. Oznacza to pozwolenie na wejście do katalogu, ale nie do wyświetlania listy jego plików (do tego potrzebne jest uprawnienier
).
Ostatni fragment dotyczący katalogów może wydawać się nieco zagmatwany. Wyobraźmy sobie na przykład, że istnieje katalog o nazwie Another_Directory
z następującymi uprawnieniami:
$ ls -ld Another_Directory/ d--xr-xr-x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Ponadto załóżmy, że w tym katalogu znajduje się skrypt powłoki o nazwie hello.sh
z następującymi uprawnieniami:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Jeśli jesteś użytkownikiem carol
i spróbujesz wyświetlić zawartość katalogu Another_Directory
, wówczas otrzymasz komunikat o błędzie, ponieważ Twój użytkownik nie ma uprawnień do odczytu tego katalogu:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
Jednak użytkownik carol
posiada uprawnienia do wykonywania, co oznacza, że może wejść do katalogu. Dlatego użytkownik carol
może uzyskać dostęp do plików w katalogu, pod warunkiem, że ma odpowiednie uprawnienia do odpowiedniego pliku. W tym przykładzie użytkownik ma pełne prawa do skryptu hello.sh
, więc może wykonać skrypt, nawet jeśli nie może odczytać zawartości katalogu, w którym się on znajduje. Potrzebna jest tylko pełna nazwa pliku.
$ sh Another_Directory/hello.sh Hello LPI World!
Jak wspomniano wcześniej, uprawnienia są określane w następującej kolejności: najpierw dla właściciela pliku, następnie dla grupy będącej właścicielem, a następnie dla innych użytkowników. Za każdym razem, gdy ktoś próbuje wykonać akcję na pliku, prawa są sprawdzane zawsze w ten sam sposób. System najpierw sprawdza, czy plik jest właścicielem bieżącego użytkownika, a jeśli tak, to stosowany jest tylko pierwszy zestaw uprawnień. W przeciwnym razie system sprawdza, czy bieżący użytkownik należy do grupy, do której należy plik. W takim przypadku stosuje tylko drugi zestaw uprawnień. W każdym innym przypadku system zastosuje trzeci zestaw uprawnień. Oznacza to, że jeśli bieżący użytkownik jest właścicielem pliku, obowiązują tylko uprawnienia właściciela, nawet jeśli uprawnienia grupy lub inne mają większe uprawnienia niż uprawnienia właściciela.
Modyfikowanie uprawnień do plików
Polecenie chmod
służy do modyfikowania uprawnień do pliku i przyjmuje co najmniej dwa parametry: pierwszy opisuje, które uprawnienia należy zmienić, a drugi wskazuje plik lub katalog, w którym dokonywana jest zmiana. Jednak uprawnienia do zmiany można opisać na dwa różne sposoby lub “moduły”.
Pierwszy z nich, zwany trybem symbolicznym (symbolic mode), oferuje precyzyjną kontrolę, która pozwala dodawać lub cofać pojedyncze uprawnienia bez modyfikowania innych w zestawie. Drugi tryb, zwany trybem numerycznym (numeric mode) jest łatwiejszy do zapamiętania i szybszy w użyciu, jeśli chcesz ustawić wszystkie wartości uprawnień od razu.
Oba tryby prowadzą do tego samego wyniku końcowego. Na przykład polecenia:
$ chmod ug+rw-x,o-rwx text.txt
oraz
$ chmod 660 text.txt
utworzą plik z tymi samymi uprawnieniami:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Przyjrzyjmy się teraz bliżej tym dwóm trybom.
Tryb symboliczny (Symbolic Mode)
Opisując, które uprawnienia należy zmienić w trybie symbolicznym, kilka pierwszych znaków wskazuje, które uprawnienia zmienisz: te dla użytkownika (u
, user
), dla grupy (g
, group
), dla innych (o
, others
) i / lub dla wszystkich trzech razem (a
, all
).
Następnie musisz określić, co polecenie ma wykonać: możesz udzielić pozwolenia (+
), cofnąć pozwolenie (-
) lub ustawić pozwolenie na określoną wartość (=
).
Na koniec określasz, na które uprawnienia chcesz mieć wpływ: odczyt (r
, read
), zapis (w
, write
) lub wykonanie (x
, execute
).
Na przykład wyobraź sobie, że mamy plik o nazwie text.txt
z następującym zestawem uprawnień:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Jeśli chcesz przyznać uprawnienia do zapisu członkom grupy będącej właścicielem pliku, użyj parametru g+w
. Będzie łatwiej, jeśli pomyślisz o tym w ten sposób: “Dla grupy (g
) nadaj (+
) uprawnienia do zapisu (w
)”. Tak więc polecenie wyglądałoby tak:
$ chmod g+w text.txt
Sprawdźmy wynik za pomocą polecenia ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Jeśli chcesz usunąć uprawnienia do odczytu dla właściciela tego samego pliku, pomyśl o tym jako: “Dla użytkownika (u
) usuń (-
), uprawnienia do odczytu (r
)”. Tak więc polecenie z parametrem u-r
wyglądałoby tak:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Co powinniśmy zrobić, jeśli chcemy ustawić dla wszystkich uprawnienia dokładnie na rw-
? Pomyśl o tym jako: “Dla wszystkich (a
), ustaw dokładnie (=
), uprawnienia do odczytu (r
), uprawnienia do zapisu (w
) i brak uprawnień do wykonania (-
)”. Tak więc polecenie wyglądałoby tak:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Oczywiście istnieje możliwość jednoczesnej modyfikacji wielu uprawnień. W takim przypadku oddziel je przecinkiem (,
):
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Powyższy przykład można odczytać jako: “Dla użytkownika (u
), przyznaj (+
) uprawnienia do odczytu zapisu i wykonania (rwx
), dla grupy (g
) usuń (-
), uprawnienia do wykonania (x
)”.
Gdy polecenie chmod
jest uruchamiane w katalogu, wówczas modyfikuje uprawnienia tylko tego katalogu. Jednakże polecenie chmod
ma tryb rekurencyjny, przydatny, gdy chcesz zmienić uprawnienia do “wszystkich plików w katalogu i jego podkatalogach”. Aby to zrobić, dodaj parametr -R
po nazwie polecenia i przed uprawnieniami do zmiany, na przykład:
$ chmod -R u+rwx Another_Directory/
To polecenie można odczytać w następujący sposób: “Rekurencyjnie (-R
) dla użytkownika (u
) nadaj (+
) uprawnienia do odczytu, zapisu i wykonania (rwx
)”.
Warning
|
Bądź ostrożny i zastanów się dwa razy przed użyciem przełącznika |
Tryb numeryczny (Numeric Mode)
W trybie numerycznym uprawnienia są określane jako trzycyfrowa wartość liczbowa w notacji ósemkowej (system liczb o podstawie 8).
Każde zezwolenie ma odpowiednią wartość. Wartości te są określane w następującej kolejności: najpierw odczyt (r
) jest reprezentowany przez cyfrę 4
, potem zapis (w
) jest reprezentowany przez cyfrę 2
, a na końcu wykonanie (x
), jest reprezentowane przez cyfrę 1
. Brak pozwolenia jest reprezentowane przez cyfrę 0
. Tak więc uprawnienia rwx
będą wynosić 7
(4+2+1
), a uprawnienia r-x
będą wynosić 5
(4+0+1
).
Pierwsza z trzech cyfr w zestawie uprawnień reprezentuje uprawnienia użytkownika (u
, user
), druga dla grupy (g
, group
), a trzecia dla pozostałych (o
, other
). Gdybyśmy chcieli ustawić uprawnienia do pliku na rw-rw----
, wówczas wartością numeryczną byłoby 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Poza tym składnia w trybie numerycznym jest taka sama jak w trybie symbolicznym. Pierwszy parametr reprezentuje uprawnienia, które chcesz zmienić, a drugi wskazuje plik lub katalog, w którym zostanie dokonana zmiana.
Tip
|
Jeśli wartość uprawnienia jest nieparzysta, wówczas plik z pewnością jest wykonywalny! |
Której składni należy użyć? Tryb numeryczny jest zalecany, na przykład, gdy chcesz zmienić uprawnienia na określoną wartość 640
(rw- r-- ---
).
Tryb symboliczny jest bardziej przydatny, jeżeli chcesz zmienić tylko określoną wartość, niezależnie od bieżących uprawnień do pliku. Na przykład możesz dodać uprawnienia wykonywania dla użytkownika po prostu wpisując chmod u+x script.sh
bez konieczności rozważania lub nawet “dotykania” bieżących uprawnień dla grupy i innych.
Modyfikowanie własności pliku
Polecenie chown
służy do zmiany właściciela pliku lub katalogu. Składnia jest dość prosta:
chown username:groupname filename
Na przykład, spójrzmy na plik o nazwie text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
Użytkownikiem będącym właścicielem pliku jest obecnie carol
, a grupą jest również carol
. Teraz chcemy zmieńić grupę będącą właścicielem pliku, na inną grupę, np. na grupę students
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Pamiętaj, że użytkownik będący właścicielem pliku nie musi należeć do grupy będącej właścicielem pliku. W powyższym przykładzie, użytkownik carol
nie musi być członkiem grupy students
. Musi jednak być członkiem grupy, aby przenieść własność pliku na tę grupę.
Użytkownika lub grupę można pominąć, jeśli nie chcesz ich zmieniać. Tak więc, aby zmienić tylko grupę, do której należy plik, należy użyć polecenia chown :students text.txt
. Aby zmienić tylko użytkownika, nalezy użyć polecenia chown carol text.txt
. Alternatywnie możesz użyć polecenia chgrp students text.txt
, aby zmienić tylko grupę.
Jeśli nie jesteś administratorem systemu (root), nie możesz zmienić prawa własności pliku należącego do innego użytkownika lub grupy, której nie jesteś członkiem. Jeśli spróbujesz to zrobić, zostanie wyświetlony komunikat Operation not permitted
(Operacja niedozwolona
).
Grupy zapytań (Querying Groups)
Przed zmianą właściciela pliku warto wiedzieć, które grupy istnieją w systemie, którzy użytkownicy są członkami grupy i do których należy użytkownik. Możesz to zrobić za pomocą dwóch poleceń: groups
oraz groupmems
.
Aby zobaczyć, które grupy istnieją w Twoim systemie, po prostu wpisz groups
:
$ groups carol students cdrom sudo dip plugdev lpadmin sambashare
A jeśli chcesz wiedzieć, do których grup należy użytkownik, dodaj nazwę użytkownika jako parametr:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Aby zrobić odwrotnie i wyświetlić, którzy użytkownicy należą do grupy, użyj polecenia groupmems
. Parametr -g
określa grupę, a prametr -l
wyświetla listę wszystkich jej członków:
$ sudo groupmems -g cdrom -l carol
Tip
|
|
Uprawnienia specjalne
Oprócz uprawnień do odczytu, zapisu i wykonywania dla użytkownika, grup i innych, każdy plik może mieć trzy inne specjalne uprawnienia, które mogą zmieniać funkcjonalność katalogu lub wykonanie programu. Można je określić w trybie symbolicznym lub numerycznym i zostały opisane poniżej.
Sticky Bit
Sticky bit, znany również jako flaga ograniczonego usuwania, ma wartość ósemkową 1
, a w trybie symbolicznym jest reprezentowany przez t
w ramach uprawnień innych osób. Dotyczy to tylko katalogów, a w systemie Linux uniemożliwia użytkownikom usunięcie lub zmianę nazwy pliku w katalogu, jeśli nie są właścicielami tego pliku lub katalogu.
Katalogi z ustawionym Sticky bit wyświetlają t
, które zastepuje x
w uprawnieniach dla innych użytkowników po wykonaniu polecenia ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
W trybie numerycznym uprawnienia specjalne są określane za pomocą “notacji czterocyfrowej”, przy czym pierwsza cyfra oznacza ustawione uprawnienia specjalne. Na przykład, aby ustawić sticky bit o wartości 1
dla katalogu Another_Directory
w trybie numerycznym z uprawnieniami 755
, polecenie powinno wyglądać tak:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Set GID
Set GID, zwany również SGID lub ustawianie bitu dla identyfikatora ID grupy (Set Group ID bit), ma wartość ósemkową 2
, a w w trybie symbolicznym jest reprezentowane przez literę s
w uprawnieniach grupy. Ustawienie to można zastosować do plików wykonywalnych lub katalogów. W przypadku plików wykonywalnych, przyznaje to procesowi wynikającemu z wykonania pliku, dostęp do uprawnień grupy będącej właścicielem pliku. W przypadku katalogów każdy utworzony w nim plik lub katalog odziedziczy grupę z katalogu nadrzędnego.
Pliki i katalogi z bitem SGID pokazują s
zamiast x
w uprawnieniach grupy jako wynik polecenia ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol carol 33 Dec 11 10:36 test.sh
Aby dodać uprawnienia SGID do pliku w trybie symbolicznym, należy wykonac polecenie:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Poniższy przykład pomoże ci lepiej zrozumieć, jak SGID wpływa na katalog. Załóżmy, że istnieje katalog o nazwie Sample_Directory
, który należy do użytkownika carol
i grupy users
, z następującą strukturą uprawnień:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Teraz przejdźmy do tego katalogu i używając polecenia touch
utwórzmy w nim pusty plik. Wynik byłby taki:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Jak widać, właścicielem pliku jest użytkownik carol
i grupa carol
. Jeśli jednak katalog miałby ustawione uprawnienia SGID, wówczas wynik byłby inny. Najpierw dodajmy bit SGID do katalogu Sample_Directory
i sprawdźmy wynik:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
Litera s
w uprawnieniach grupy wskazuje, że bit SGID jest ustawiony. Teraz przejdźmy do tego katalogu i ponownie utwórzmy pusty plik za pomocą polecenia touch
.
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
Jak widać, grupa będąca właścicielem pliku to users
.Dzieje się tak, ponieważ bit SGID sprawił, że plik odziedziczył właściciela grupy z katalogu nadrzędnego, którym jest users
.
Set UID
SUID jest znane jako Set User ID (ustaw identyfikator użytkownika). Ma ono wartość ósemkową 4
i jest reprezentowane przez literę s
w uprawnieniach użytkownika w trybie symbolicznym. Dotyczy tylko plików, a jego zachowanie jest podobne do bitu SGID, z wyjątkiem tego, że proces jest wykonywany na uprawnieniach użytkownika, który jest właścicielem pliku. Pliki z bitem SUID pokazują s
zamiast x
w uprawnieniach użytkownika po wpisaniu polecenia ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Możesz połączyć wiele uprawnień specjalnych w jednym parametrze, dodając je razem. Na przykład, Aby ustawić SGID (wartość 2
) i SUID (wartość 4
) w trybie numerycznym dla skryptu test.sh
z uprawnieniami 755
, należy wpisać:
$ chmod 6755 test.sh
Wynik to:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Jeśli Twój monitor lub terminal obsługują kolor, a obecnie większość z nich to robi, możesz szybko sprawdzić, czy są ustawione te specjalne uprawnienia, patrząc na wynik polecenia |
Ćwiczenia z przewodnikiem
-
Utwórz katalog o nazwie
emptydir
za pomocą poleceniamkdir emptydir
. Teraz używając polecenials
, wyświetl uprawnienia do kataloguemptydir
. -
Utwórz pusty plik o nazwie
emptyfile
za pomocą poleceniatouch emptyfile
. Teraz używając poleceniachmod
z notacją symboliczną, dodaj prawa wykonywania dla właściciela plikuemptyfile
i usuń prawa zapisu i wykonania dla wszystkich innych użytkowników. Zrób to, używając tylko jednego poleceniachmod
. -
Jakie będą uprawnienia do pliku o nazwie
text.txt
po użyciu poleceniachmod 754 text.txt
? -
Załóżmy, że plik o nazwie
test.sh
jest skryptem powłoki z następującymi uprawnieniami i własnością:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Jakie są uprawnienia właściciela pliku?
-
Jeśli użytkownik
john
uruchomi ten skrypt, z jakimi uprawnieniami ten skrypt zostanie wykonany? -
Używając notacji numerycznej, jaka jest składnia polecenia chmod, aby “cofnąć” specjalne uprawnienia przyznane temu plikowi?
-
-
Spójrz na ten plik:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Jakim rodzajem pliku jest
sdb1
? A kto może ten plik modyfikować? -
Spójrz na następujące 4 pliki:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Zapisz odpowiednie uprawnienia dla każdego pliku i katalogu, używając 4-cyfrowej notacji numerycznej.
Another_Directory
-
foo.bar
-
HugeFile.zip
-
Sample_Directory
-
Ćwiczenia eksploracyjne
-
Spróbuj wykonać następujące czynności w terminalu. Utwórz pusty plik o nazwie
emptyfile
za pomocą poleceniatouch emptyfile
. Teraz “wyzeruj” uprawnienia do pliku za pomocą poleceniachmod 000 emptyfile
. Co się stanie, jeśli zmienisz uprawnienia dla plikuemptyfile
, przekazując tylko jedną wartość dlachmod
w trybie numerycznym, na przykładchmod 4 emptyfile
? Jaki będzie wynik, jeśli użyjesz dwóch wartości, na przykładchmod 44 emptyfile
? Co można z tego wywnioskować na temat sposobu, w jakichmod
odczytuje wartość liczbową? -
Czy możesz uruchomić plik, do którego wykonania masz uprawnienia, z wyjątkiem uprawnień do odczytu (
--x
)? Dlaczego tak lub dlaczego nie? -
Rozważ uprawnienia do katalogu tymczasowego
/tmp
w systemie Linux:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Użytkownik, grupa i inne osoby mają pełne uprawnienia. Ale czy zwykły użytkownik może usunąć dowolne pliki w tym katalogu? Dlaczego?
-
Plik o nazwie
test.sh
ma następujące uprawnienia:-rwsr-xr-x
, co oznacza, że ustawiony jest bit SUID. Teraz uruchom następujące polecenia:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Co zrobiliśmy? Co oznacza wielka litera
S
? -
W jaki sposób utworzyłbyś katalog o nazwie
Box
, w którym wszystkie pliki są automatycznie własnością grupyusers
i mogą być usunięte tylko przez użytkownika, który je utworzył?
Podsumowanie
Jako system wielu użytkowników Linux potrzebuje sposobu na śledzenie, kto jest właścicielem pliku i kto ma do niego dostęp. Odbywa się to za pomocą trójpoziomowego systemu uprawnień. W tej lekcji dowiedzieliśmy się wszystkiego o tym, jak działa ten system.
W tej lekcji nauczyłeś się, jak używać polecenia ls
, aby uzyskać informacje o uprawnieniach do plików, jak używać polecenia chmod
do kontrolowania lub zmiany, kto może tworzyć, usuwać lub modyfikować plik (zarówno w notacji numerycznej, jak i symbolicznej) oraz jak zmieniać własność plików za pomocą poleceń chown
oraz chgrp
.
W tej lekcji omówiono następujące polecenia:
ls
-
Wyświetla listę plików, opcjonalnie zawierającą szczegóły, takie jak uprawnienia.
chmod
-
Zmienia uprawnienia do pliku lub katalogu.
chown
-
Zmienia użytkownika będącego właścicielem i / lub grupę pliku lub katalogu.
chgrp
-
Zmienia grupę będącą właścicielem pliku lub katalogu.
Odpowiedzi do ćwiczeń z przewodnikiem
-
Utwórz katalog o nazwie
emptydir
za pomocą poleceniamkdir emptydir
. Teraz używając polecenials
, wyświetl uprawnienia do kataloguemptydir
.Dodaj parametr
-d
do polecenials
, aby wyświetlić atrybuty plików katalogu zamiast wyświetlać jego zawartość. Tak więc odpowiedź brzmi:ls -l -d emptydir
Dostaniesz dodatkowe punkty, jeśli połączysz te dwa parametry w jeden:
ls -ld emptydir
. -
Utwórz pusty plik o nazwie
emptyfile
za pomocą poleceniatouch emptyfile
. Teraz używając poleceniachmod
z notacją symboliczną, dodaj prawa wykonywania dla właściciela plikuemptyfile
i usuń prawa zapisu i wykonania dla wszystkich innych użytkowników. Zrób to, używając tylko jednego poleceniachmod
.Pomyśl o tym w ten sposób:
-
“Dla użytkownika będącego właścicielem pliku (
u
) dodaj (+
) uprawnienia do wykonania (x
)”, a więcu+x
. -
“Dla grupy (
g
) i innych użytkowników (o
) usuń (-
) uprawnienia do zapisu (w
) oraz uprawnienia do wykonywania (x
)”, a więcgo-wx
.Aby połączyć te dwa zestawy uprawnień, dodajemy między nimi przecinek. Tak więc ostateczny wynik to:
chmod u+x,go-wx emptyfile
-
-
Jakie będą uprawnienia do pliku o nazwie
text.txt
po użyciu poleceniachmod 754 text.txt
?Pamiętaj, że w zapisie numerycznym każda cyfra reprezentuje zestaw trzech uprawnień, z których każda ma odpowiednią wartość: odczyt (read) wynosi
4
, zapis (write) wynosi2
, wykonanie (execute) wynosi1
i brak uprawnień wynosi0
. Wartość cyfry uzyskujemy, dodając odpowiednie wartości do każdego uprawnienia. Wartość7
składa się z4+2+1
lubrwx
, wartość5
składa się z4+0+1
lubr-x
, a wartość4
jest tylko prawem do odczytu lubr--
. Uprawnienia dla plikutext.txt
będą wynosić:rwxr-xr--
-
Załóżmy, że plik o nazwie
test.sh
jest skryptem powłoki z następującymi uprawnieniami i własnością:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Jakie są uprawnienia właściciela pliku?
Uprawnienia właściciela (od 2 do 4 znaków wyświetlanych przy uzyciu polecenia
ls -l
) torwx
. Zatem odpowiedź brzmi: “do odczytu, zapisu i wykonywania pliku”. -
Jeśli użytkownik
john
uruchomi ten skrypt, z jakimi uprawnieniami ten skrypt zostanie wykonany?Zwróć uwagę na uprawnienia dla grupy. Są to
r-s
, co oznacza, że ustawiony jest bit SGID. Grupa, do której należy ten plik, toroot
, więc skrypt, nawet jeśli został uruchomiony przez zwykłego użytkownika, będzie uruchamiany z uprawnieniami użytkownika uprzywilejowanego. -
Używając notacji numerycznej, jaka jest składnia polecenia chmod, aby “cofnąć” specjalne uprawnienia przyznane temu plikowi?
Możemy “cofnąć” specjalne uprawnienia, przekazując czwartą cyfrę, tj.
0
do poleceniachmod
. Obecne uprawnienia to755
, więc polecenie będzie miało postaćchmod 0755
.
-
-
Spójrz na ten plik:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Jakim rodzajem pliku jest
sdb1
? A kto może ten plik modyfikować?Pierwszy znak wyniku polecenia
ls -l
wskazuje typ pliku. Literab
oznacza urządzenie blokowe; zwykle jest to dysk twardy (wewnętrzny lub zewnętrzny), który jest podłączony do komputera. Właściciel (root
) i wszyscy użytkownicy grupydisk
mogą na nim zapisywać. -
Spójrz na następujące 4 pliki:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Zapisz odpowiednie uprawnienia dla każdego pliku i katalogu, używając 4-cyfrowej notacji numerycznej.
Odpowiednie uprawnienia w notacji numerycznej są następujące:
Another_Directory
-
Odpowiedź:
1755
1
dla sticky bit,755
dla zwykłych użytkowników (rwx
dla użytkownika,r-x
dla grup i innych). foo.bar
-
Odpowiedź:
0044
Brak specjalnych uprawnień (więc pierwsza cyfra to
0
), brak uprawnień dla użytkownika (---
) i uprawnienia tylko do odczytu (r—r--
) dla grupy i innych. HugeFile.zip
-
Odpowiedź:
0664
Brak specjalnych uprawnień, więc pierwsza cyfra to
0
.6
(rw-
) dla użytkownika i grup,4
(r--
) dla innych. Sample_Directory
-
Odpowiedź:
2755
2
dla bitu SGID,7
(rwx
) dla użytkownika,5
(r-x
) dla grup i innych.
Odpowiedzi do ćwiczeń eksploracyjnych
-
Spróbuj wykonać następujące czynności w terminalu. Utwórz pusty plik o nazwie
emptyfile
za pomocą poleceniatouch emptyfile
. Teraz “wyzeruj” uprawnienia do pliku za pomocą poleceniachmod 000 emptyfile
. Co się stanie, jeśli zmienisz uprawnienia dla plikuemptyfile
, przekazując tylko jedną wartość dlachmod
w trybie numerycznym, na przykładchmod 4 emptyfile
? Jaki będzie wynik, jeśli użyjesz dwóch wartości, na przykładchmod 44 emptyfile
? Co można z tego wywnioskować na temat sposobu, w jakichmod
odczytuje wartość liczbową?Pamiętaj, że “wyzerowaliśmy” uprawnienia dla pliku
emptyfile
. Tak więc jego stan początkowy wyglądałby następująco:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Teraz wypróbujmy pierwsze polecenie,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Uprawnienia dla innych zostały zmienione. A co jeśli spróbujemy użyć dwóch cyfr, na przykład
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Teraz wpłynęło to na uprawnienia dla grupy i innych w ten sposób, że prawa grup i innych osób zostały zmienione. Z tego możemy wywnioskować, że w notacji numerycznej
chmod
odczytuje wartość “wstecz” od najmniej znaczącej cyfry (inni) do najbardziej znaczącej (użytkownik). Jeśli przekażesz jedną cyfrę, zmodyfikujesz uprawnienia dla innych. Za pomocą dwóch cyfr modyfikujesz uprawnienia dla grupy oraz innych, Za pomocą trzech cyfr modyfikujesz uprawnienia dla użytkownika, grupy oraz innych. Za pomocą czterech cyfr modyfikujesz uprawnienia dla użytkownika, grupy, innych oraz uprawnienia specjalne. -
Czy możesz uruchomić plik, do którego wykonania masz uprawnienia, z wyjątkiem uprawnień do odczytu (
--x
)? Dlaczego tak lub dlaczego nie?Na początku odpowiedź wydaje się oczywista: jeśli masz uprawnienia do wykonywania, plik powinien zostać uruchomiony. Jednak bez uprawnień do odczytu system nie może otworzyć pliku i odczytać jego zawartości w celu wykonania. Dlatego bez uprawnień do odczytu nie możesz uruchomić pliku, nawet jeśli masz do niego uprawnienia do wykonywania.
-
Rozważ uprawnienia do katalogu tymczasowego
/tmp
w systemie Linux:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Użytkownik, grupa i inne osoby mają pełne uprawnienia. Ale czy zwykły użytkownik może usunąć dowolne pliki w tym katalogu? Dlaczego?
Katalog
/tmp
jest tym, co nazywamy katalogiem z możliwością zapisu przez cały świat. Oznacza to, że każdy może zapisywać w tym katalogu. Ale my nie chcemy, aby jeden użytkownik modyfikował pliki utworzone przez innych, dlatego ustawiamy sticky bit (jak pokazuje nam litera wskazywany przezt
w uprawnieniach dla innych). Oznacza to, że użytkownik może usunąć pliki w katalogu/tmp
, ale tylko wtedy, gdy sam utworzył te pliki. -
Plik o nazwie
test.sh
ma następujące uprawnienia:-rwsr-xr-x
, co oznacza, że ustawiony jest bit SUID. Teraz uruchom następujące polecenia:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Co zrobiliśmy? Co oznacza wielka litera
S
?Usunęliśmy prawa wykonywania dla użytkownika, który jest właścicielem pliku. Litera
s
(lubt
) pojawia się zamiastx
podczas wykonywania polecenials -l
, więc system potrzebuje sposobu, aby pokazać, czy użytkownik ma uprawnienia do wykonywania, czy nie. Odbywa się to poprzez zmianę wielkości znaków specjalnych.Mała litera
s
w pierwszej grupie uprawnień oznacza, że użytkownik, który jest właścicielem pliku, ma uprawnienia do wykonywania, a bit SUID jest ustawiony. Wielka literaS
oznacza że użytkownik będący właścicielem pliku nie ma (-
) uprawnień do wykonywania i że ustawiony jest bit SUID.To samo dotyczy SGID. Mała litera
s
w drugiej grupie uprawnień oznacza, że grupa będąca właścicielem pliku ma uprawnienia do wykonywania i że ustawiony jest bit SGID. Wielka literaS
że grupa, do której należy plik, nie ma (-
) uprawnień do wykonywania i że bit SGID jest ustawiony.Dotyczy to również sticky bit, który jest reprezentowany przez
t
w trzeciej grupie uprawnień. Mała literat
oznacza, że sticky bit jest ustawiony, a inni mają uprawnienia do wykonywania. Wielka literaT
oznacza, że sticky bit jest ustawiony, a inni nie mają uprawnień do wykonywania. -
W jaki sposób utworzyłbyś katalog o nazwie
Box
, w którym wszystkie pliki są automatycznie własnością grupyusers
i mogą być usunięte tylko przez użytkownika, który je utworzył?To jest wieloetapowy proces. Pierwszym krokiem jest utworzenie katalogu:
$ mkdir Box
Chcemy, aby każdy plik utworzony w tym katalogu był automatycznie przypisywany do grupy
users
. Możemy to zrobić, ustawiając tę grupę jako właściciela katalogu, a następnie ustawiając na niej bit SGID. Musimy również upewnić się, że każdy członek grupy może zapisywać zmiany w tym katalogu.Ponieważ nie dbamy o inne uprawnienia i chcemy tylko “odwrócić” specjalne bity, wówczas sensowne jest użycie trybu symbolicznego:
$ chown :users Box/ $ chmod g+wxs Box/
Zauważ, że jeśli Twój bieżący użytkownik nie należy do grupy
users
, to będziesz musiał użyć poleceniasudo
przed powyższymi poleceniami, aby dokonać zmiany jako superużytkownik (root
).W ostatniej części chcemy upewnić się, że tylko użytkownik, który utworzył plik, będzie mógł go usunąć. Odbywa się to poprzez ustawienie sticky bit (reprezentowanego przez
t
) dla katalogu. Pamiętaj, że jest to ustawienie na uprawnienia dla innych (o
).$ chmod o+t Box/
Uprawnienia do katalogu
Box
powinny wyglądać następująco:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Oczywiście możesz określić SGID oraz sticky bit za pomocą tylko jednego polecenia
chmod
:$ chmod g+wxs,o+t Box/
Dostajesz dodatkowe punkty, jeśli o tym pomyślałeś.