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

Typy plików:
znakznaczenie
-zwykły plik
dkatalog
cplik specjalny
bplik specjalny przypisany
ldowiązanie symboliczne
ppotoki nazwane
sgniazdo

Prawa dostępu dla plików:
wartośćprawo dostępu, funkcja
literowaósemkowa
r4odczyt (read), możliwość wyświetlenia zawartości pliku
w2zapis (write), mozliwość zapisania zmian w pliku
x1wykonanie (execute), możliwość uruchomienia (programy binarne i skrypty)

Prawa dostępu dla katalogów:
wartośćprawo dostępu, funkcja
literowaósemkowa
r4odczyt (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ą)
w2zapis (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)
x1wykonanie (execute), możliwość "wejścia" do danego katalogu (czyli uczynienia go swoim katalogiem bieżącym)

Wszystkie kombinacje praw dostępu:
wartośćprawo dostępu
ósemkowaliterowa
0---brak
1--xwykonanie
2-w-zapis
3-wxzapis, wykonanie
4r--odczyt
5r-xodczyt, wykonanie
6rw-odczyt, zapis
7rwxodczyt, zapis, wykonanie

Ustawianie praw dostępu:
znakznaczenie
+dodawanie uprawnień
-odbieranie uprawnień
=przypisanie uprawnień
uużytkownik (właściciel)
ggrupa
opozostali
awszyscy

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:
  1. 022
  2. 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ć?