Prawa dostępu do plików i katalogów
W Linuxie prawie wszystko jest traktowane jako plik (o konkretnych właściwościach), także urządzenia czy terminale. Każdy plik to tak naprawdę zbiór znaków, pogrupowanych w wiersze (oddzielone znakiem \n), zakończony znakiem końca pliku EOF
Do wyświetlenia praw dostępu do plików i katalogów można posłużyć się poleceniem: ls -l
- typ pliku - pierwszy bit
- prawa dostępu dla właściciela: drugi, trzeci, czwarty bit
- prawa dostępu dla grupy: piąty, szósty, siódmy bit
- prawa dostępu dla pozostałych użytkowników: ósmy, dziewiąty, dziesiąty bit
Typy plików:
znak | znaczenie |
- | zwykły plik |
d | katalog |
c | plik specjalny |
b | plik specjalny przypisany |
l | dowiązanie symboliczne |
p | potoki nazwane |
s | gniazdo |
Prawa dostępu dla plików:
wartość | prawo dostępu, funkcja |
literowa | ósemkowa |
r | 4 | odczyt (read), możliwość wyświetlenia zawartości pliku |
w | 2 | zapis (write), mozliwość zapisania zmian w pliku |
x | 1 | wykonanie (execute), możliwość uruchomienia (programy binarne i skrypty) |
Prawa dostępu dla katalogów:
wartość | prawo dostępu, funkcja |
literowa | ósemkowa |
r | 4 | odczyt (read), możliwość zapoznania się z zawartością katalogu (tj. uzyskania informacji,
jakie nazwy i atrybuty plików i katalogów w nim występują) |
w | 2 | zapis (write), możliwość zmiany zawartości katalogu (tj. tworzenia i usuwania w nim plików i
katalogów, jak również do zmiany ich nazw i atrybutów) |
x | 1 | wykonanie (execute), możliwość "wejścia" do danego katalogu (czyli uczynienia go swoim katalogiem
bieżącym) |
Wszystkie kombinacje praw dostępu:
wartość | prawo dostępu |
ósemkowa | literowa |
0 | --- | brak |
1 | --x | wykonanie |
2 | -w- | zapis |
3 | -wx | zapis, wykonanie |
4 | r-- | odczyt |
5 | r-x | odczyt, wykonanie |
6 | rw- | odczyt, zapis |
7 | rwx | odczyt, zapis, wykonanie |
Ustawianie praw dostępu:
znak | znaczenie |
+ | dodawanie uprawnień |
- | odbieranie uprawnień |
= | przypisanie uprawnień |
u | użytkownik (właściciel) |
g | grupa |
o | pozostali |
a | wszyscy |
Nadawać i odbierać prawa dostępu do pliku lub katalogu może jego właściciel przy użyciu
polecenia chmod (change mode - zmień tryb). Polecenie to ma następującą postać:
chmod [ komu_jakie ] nazwa_obiektu
PRZYKŁADY:
chmod g+x plik
(członkom grupy właściciela do posiadanych już wcześniej praw zostaje
dodane prawo do wykonywania programu zawartego w danym pliku. Prawa właściciela i
innych użytkowników nie ulegają zmianie)
chmod o-w plik
(użytkownikom spoza grupy zostało odebrane prawo do zapisu w danym
pliku, wszelkie pozostałe prawa dostępu - bez zmian)
chmod u=rw plik
(właściciel ustalił, że będzie posiadał prawo do odczytu i zapisu, ale nie do
wykonywania danego pliku. Prawa grupy i innych - bez zmian)
UWAGA !!!
Nie należy odbierać samemu sobie praw dostępu do swojego katalogu domowego
(nie będzie możliwe odczytanie plików konfiguracyjnych ani startowych przez
oprogramowanie w trakcie otwierania sesji pracy - grozi wizyta u administratora systemu !). Ze względu na nowy serwer proszę także
nie odbierać sobie samemu praw do JAKIEGOKOLWIEK pliku lub katalogu, także za pomocą UMASK
Zaloguj się na Sigmę: ssh nazwa_konta@sigma.ug.edu.pl
Zad 1.
Znajdź wszystkie pliki na swoim koncie domowym, które twoja grupa (group) na
Sigmie może przeglądać (skorzystać z polecenia find i odpowiedniego przełącznika).
Zad 2.
Utworzyć we własnym katalogu domowym niedużą strukturę podkatalogów i plików
tekstowych. Poprzydzielać różne prawa dostępu, następnie spróbować wejść do katalogów
domowych innych uczestników zajęć i sprawdzić, które z obiektów są tam dla nas dostępne (i
w jakim sensie). Spróbować utworzyć własny plik w cudzym katalogu ("kukułcze jajko") oraz
spróbować usunąć cudzy plik we własnym katalogu (co można zaobserwować?).
Zad 3.
W zespołach 2- lub 3-osobowych wypróbować możliwość komunikacji przez
współdzielony plik: na jednym z kont w zespole utworzyć pusty plik i przydzielić
odpowiednie prawa dostępu (do pliku i do katalogu domowego). Wpisywać i odczytywać
komunikaty przy użyciu poleceń:
echo "swoje_imie: treść_komunikatu" >> plik
cat plik
POLECENIE UMASK
Każdy program, który tworzy nowy plik, tworzy go z pewnymi (domyślnymi) prawami
dostępu określonymi w tym programie (dokładniej: określonymi przez jeden z argumentów
funkcji tworzącej nowy plik). Jeżeli użytkownik programu chce (zazwyczaj ze względów
bezpieczeństwa) zmniejszyć te domyślne prawa, może zrobić to ustawiając odpowiednio
swoją maskę trybu pliku. Maska trybu pliku jest atrybutem danego procesu użytkownika
(dziedziczonym przez procesy potomne). W przypadku procesu interpretera poleceń maska
może być zmieniana przy użyciu polecenia wewnętrznego umask.
Zad. 4
W opisie bash'a przeczytać opis polecenia wewnętrznego umask i wypróbować jego
działanie sprawdzając, a następnie zmieniając swoją maskę trybu pliku i tworząc za każdym
razem nowe pliki (przy użyciu polecenia touch plik), a później sprawdzając uzyskane prawa
dostępu do nich (polecenie ls -l). Jaka operacja logiczna na bitach domyślnych praw dostępu
oraz maski jest wykonywana? Odpowiedz jakie będą prawa dostępu dla nowo utworzonego pliku
oraz katalogu, przy użyciu maski:
022
054
Zad 5.
W zespołach 2- lub 3-osobowych wypróbować możliwość tworzenia dowiązań (twardych i symbolicznych) do
cudzych plików. Jakie są minimalne prawa dostępu:
a) do katalogu, w którym znajduje się dany plik?;
b) do samego pliku, aby inni członkowie zespołu mogli utworzyć do niego
dowiązanie?
Czy późniejsze ograniczenie tych praw wpływa na możliwość dalszego
korzystania z utworzonego dowiązania (czyli dostępu do zawartości pliku)?
ROZSZERZONE PRAWA DOSTĘPU
Poza zwykle stosowanymi prawami dostępu r, w, x możliwe jest też stosowanie innych
atrybutów modyfikujących działanie nadanych praw. Atrybuty te są dodatkowymi bitami,
które możemy modyfikować tak jak poprzednie, za pomocą liter lub cyfr.
SUID - atrybut pliku, ustawiamy go poleceniem:
chmod 4---
nazwa_pliku lub chmod u+s nazwa_pliku
SGID - atrybut pliku, ustawiamy go poleceniem:
chmod 2---
nazwa_pliku lub chmod g+s
nazwa_pliku
Sticky bit - atrybut katalogu, ustawiamy go poleceniem:
chmod 1---
nazwa_katalogu lub chmod o+t
nazwa_katalogu
Bit Set User ID (SUID) pozwala aby, proces wykonujący program zawarty w pliku o takim
atrybucie będzie działać nie z prawami swojego rzeczywistego właściciela (tego, który go
uruchomił), ale z prawami właściciela pliku z programem (to nie musi być ten sam
użytkownik).
Używamy go kiedy uprawnienia root'a są potrzebne do wykonania niektórych czynności, np.
zmiana hasła lub kiedy nie chcemy podawać hasła pewnego użytkownika, ale chcemy móc
wykonać polecenia z jego uprawnieniami.
Program passwd
korzystając z uprawnień root'a pozwala edytować w ściśle określony sposób
plik /etc/shadow
, czyli zmienić wpis o swoim haśle ale nic ponadto.
Bit Set Group ID (SGID) pozwala aby, proces wykonujący program zawarty w pliku o takim
atrybucie będzie działać nie z prawami swojej rzeczywistej grupy, ale z prawami grupy
właściciela pliku z programem.
Sticky bit - atrybut katalogu, który sprawia, że pliki mogą być usuwane lub
przemianowywane tylko przez odpowiednie osoby. Jest często stosowany w katalogu /tmp,
do którego dostęp mogą mieć wszyscy użytkownicy systemu.
Zad 6.
Sprawdź, że plik /usr/bin/passwd
rzeczywiście ma takie uprawnienia. Które jeszcze
polecenia mają te uprawnienia?
Zad 7.
Stworzyć kilka plików i katalogów oraz nadać im uprawnienia z dodatkowymi
atrybutami. Poleceniem ls -l
sprawdzić wyniki. Spróbować odjąć uprawnienie wykonywania
(x) od pliku lub katalogu z ustawionymi dodatkowymi uprawnieniami. Co można
zaobserwować?
Zad 8.
W zespołach co najmniej 3-osobowych przeprowadzić następujący eksperyment: jedna
osoba (admin) przydziela odpowiednie prawa dostępu tak, aby umożliwić pozostałym
członkom zespołu usuwanie plików i wejście do swojego utworzonego katalogu, w którym
wszyscy tworzą jakieś własne pliki. Spróbować usunąć pliki innych użytkowników.
Następnie po aktywowaniu sticky bita przez admina na powyższym katalogu spróbować
ponownie. Co można zaobserwować?
PRAWDZIWE I EFEKTYWNE UID
Zad 9.
Wypróbować działanie poleceń:
echo $UID
oraz
echo $EUID
wyświetlających odpowiednio rzeczywisty oraz skuteczny identyfikator użytkownika.
Następnie utworzyć na swoim koncie nieduży plik tekstowy (plik.txt) i nadać mu prawa dostępu 600 (oktalnie) oraz stworzyć następujący program w C:
#include
main() {
int c;
FILE *f;
printf("Real UID=%u\n",getuid());
printf("Effective UID=%u\n\n",geteuid());
f=fopen(" ...nazwa ścieżkowa pliku tekstowego...","r");
while ((c=fgetc(f))!=EOF) putchar(c); // w przypadku pomyślnym
wyświetla zawartość pliku o podanej nazwie
fclose(f);
return;
}
W zespołach 2- lub 3-osobowych przeprowadzić następujący eksperyment: przydzielić
odpowiednie prawa dostępu tak, aby umożliwić pozostałym członkom zespołu wejście do
katalogu, w którym jest plik tekstowy (plik.txt) oraz skompilowany program. Następnie:
a) Przydzielić plikowi
zawierającemu program prawa 755 (oktalnie), wykonać go samemu i
zalecić to samo pozostałym członkom zespołu.
b) Podać polecenie chmod u=rws ścieżka_do_programu
i zalecić powtórne uruchomienie programu. Jaką różnicę można zaobserwować?