Uprawnienia do plików i katalogów

Wstęp

Każdy plik posiada właściciela, grupę właścicieli i uprawnienia. Właścicielem zazwyczaj jest użytkownik, który stworzył plik, a grupą właścicieli jedna z grup, do której należy twórca. Zmienić właściciela pliku może tylko administrator. Właściciel pliku może zmienić grupę właścicieli na jedną z takich, której jest członkiem.

Uprawnienia (permissions) pliku, nazywane także czasem trybem (mode):

Mogą być przypisane w następujący sposób:

Daje to w sumie 9 bitów ustawień.

Aktualne uprawnienia plików można sprawdzić na wiele sposobów, na przykład:

 $ ls -l plik # długa lista: zawiera uprawnienia, właściciela, grupę
 $ stat plik # program stat podaje różne informacje o pojedynczym pliku

Uprawnienia mogą być wyświetlane na dwa sposoby:

Do zarządzania uprawnieniami służą programy chown i chmod, które odpowiednio zmieniają właściciela i/lub grupę oraz uprawnienia (tryb). Program chmod może używać zarówno uprawnień symbolicznych, jak i numerycznych. Przykłady użycia chmod (proszę sprawdzić w podręczniku chmod co robią dane argumenty wywołania):

$ chmod a=rwx file
$ chmod a= file
$ chmod u+r file
$ chmod ug+w file
$ chmod o-w file
$ chmod 664 file
 

Uprawnienia dotyczą wszystkich rodzajów plików, ale dla plików innych niż zwykłe, mogą mieć trochę inną interpretację. Dla katalogów:

Ćwiczenia

Jak zwykle, warto utworzyć odrębny katalog na ćwiczenie i wszystkie potrzebne pliki tworzyć tam.

  1. Test zapisu do pliku: utworzyć testowy plik z dowolną zawartością. Odebrać wszystkim (właścicielowi też) prawo do zapisu, pozostawiając prawo do odczytu, na przykład

    $ chmod a=r nazwa.pliku # tak
    $ chmod 444 nazwa.pliku # albo tak

    Spróbować wykonać następujące operacje:

    • dopisać tekst z użyciem operatora >>
    • dopisać tekst z użyciem operatora >
    • edytować plik z użyciem edytora nano
    • obejrzeć plik programem less
    • usunąć plik (!) – proszę zapamiętać to zachowanie, użycie specjalnych trybów katalogu pozwoli je zmienić.
  2. Wykonać próby z ćwiczenia 1. z ustawionym prawem do zapisu, a usuniętym odczytem: uprawnienia 200 (zapis tylko dla użytkownika).

  3. Programy – pliki wykonywalne. To ćwiczenie wymaga posiadania jakiegoś pliku wykonywalnego, na przykład programu napisanego C i skompilowanego. Proszę skompilować podany program zgodnie z instrukcją, na razie nie wnikając w to jak działa ten program i jak działa kompilator – te zagadnienia będą omówione na innych przedmiotach. Pobranie i kompilacja programu:

    $ wget http://www.mini.pw.edu.pl/~karwowskij/psu/hello.c
    $ gcc hello.c -o hello

    W efekcie powstał plik hello. Program ten można wykonać w następujący sposób:

    $ ./hello

    Proszę zwrócić uwagę na konieczność podania ścieżki do bieżącego katalogu poprzez ./ Podanie samej nazwy pliku spowodowałoby poszukiwanie programu w katalogach podanych w zmiennej środowiskowej PATH.

    Zaobserwować domyślne uprawnienia pliku hello i porównać z uprawnieniami plików w /bin/ls i /bin/cp:

    stat hello
    stat /bin/ls
    stat /bin/cp

    Spróbować wykonać program, gdy nie ma uprawnień do odczytu (–x–x–x) i gdy nie ma uprawnień do wykonania (r–r–r–). Jakie są efekty?

  4. Uprawnienia katalogów. Te same uprawnienia w stosunku do katalogów mają inne znaczenie niż w stosunku do plików.

    Utworzyć katalog testowy, dwa pliki o dowolnej zawartości. Jednemu z plików odebrać uprawnienia do odczytu i zapisu. Odebrać uprawnienie x do katalogu, pozostawić możliwość odczytu i zapisu. Spróbować następujących operacji (przypadku plików zastosować do obu – z każdym rodzajem uprawnień):

    • listowanie plików na różne sposoby (podstawić użytą przez Państwa nazwę katalogu i pliku):

      $ ls katalog # to czyta informacje o typie pliku
      $ ls -l katalog # to wywołanie czyta dużo informacji
      $ ls -f katalog # to wywołanie nie czyta nic poza nazwami plików
      $ ls -l katalog/plik 

      Zwrócić uwagę, że czytanie nazw plików to inna operacja niż dostęp do tych plików lub ich metadanych (uprawnienia, daty modyfikacji, itp.).

    • otwarcie i edycja pliku z katalogu w edytorze nano
    • odczytanie pliku z katalogu z użyciem less
    • zmiana nazwy pliku w katalogu z użyciem mv
    • usunięcie pliku z katalogu
    • utworzenie nowego pliku w katalogu

    Następnie przywrócić uprawnienia do katalogu i odtworzyć układ plików. Wykonać analogiczne próby z odebranym uprawnieniem do zapisu dla katalogu i uprawnieniem do odczytu dla katalogu.

    Czy odebranie uprawnień do zapisu plikowi ochroni go przed operacją usunięcia i utworzenia nowego o tej samej nazwie, ale z inną treścią?

  5. Właściciel pliku. Za pomocą chown spróbować zmienić właściciela dowolnego ze swoich plików. Czy jest to dopuszczalne? Podobnie spróbować zmieć grupę właścicieli.

  6. Ćwiczenie do wykonania w parach/zespołach. Katalogi domowe wszystkich użytkowników Wydziału znajdują się na jednej macierzy dyskowej. Oznacza to możliwości udostępnienia plików i wspólnej przestrzeni, na przykład w przypadku projektów zespołowych na starszych latach.

    Utworzyć w katalogu domowym podkatalog w którym udostępnią Państwo kolegom z grupy dziekańskiej jakiś plik (do odczytu).

    Ustawić odpowiednie (ale też nie za duże) uprawnienia do katalogów i pliku. Najlepiej zmieniać tylko uprawnienia dla grupy, dla pozostałych pozostawić brak dostępu. Uwaga: aby móc wykonać jakiekolwiek operacje na plikach wewnątrz katalogów domowego potrzebne jest uprawnienie x do wszystkich katalogów na ścieżce od korzenia drzewa katalogów do danego pliku.

    Sprawdzić, czy uprawnienia do katalogu domowego są bezpieczne. Nigdy nie ustawiać uprawnień do zapisu bezpośrednio do katalogu domowego komukolwiek innemu niż sobie. Właściwe uprawnienia do katalogu domowego to 700, gdy nie zawiera on żadnych udostępnionych w sposób powyższy katalogów lub 711 w przeciwnym przypadku. W przypadku uprawnień 710 lub 711 upewnić się, że zabraniają Państwo dostępu do plików wewnątrz katalogu domowego, które powinny być chronione.

  7. Wywołanie umask ma wpływ na uprawnienia nowo tworzonych plików. Wywołanie to ustawia wartość uprawnień, które będą usunięte z nowo tworzonych plików. Procedura jest następująca:

    1. program uruchomiony przez użytkownika żąda utworzenia nowego pliku i podaje startowe uprawnienia.
    2. z podanych uprawnień usuwane są uprawnienia z umask
    3. utworzony plik ma uprawnienia wyliczone w powyższy sposób.

    Wartości umask, podobnie jak zmienne środowiskowe są dziedziczone przez wywoływane programy, natomiast zmiany nie mają wpływu na programy już działające i ich potomków.

    $ umask # wypisuje aktualne ustawienie umask
    $ umask 077 # nowo tworzone pliki będą dostępne tylko dla właściciela

    Typową wartością umask jest 022 (usuń uprawnienia do zapisu dla innych niż właściciel).

    Spróbować ustawić kilka różnych wartości umask i utworzyć nowe pliki, na przykład z użyciem touch, przekierowania wyjścia, czy edytora nano. Sprawdzić ich uprawnienia.

    Uwaga: pliki konfiguracyjne powłoki, takie jak .bash_profile czy .bashrc mogą posłużyć do trwałego ustawienia umask.

Uprawnienia specjalne katalogów

Można ustawić dwa specjalne uprawnienia dostępu do katalogu: SGID – grupą właścicieli plików utworzonych w katalogu będzie grupa, która jest właścicielem katalogu. (Bez znaczenia, kto tworzy nowy plik) oraz tzw. prawo ograniczonego usunięcia – plik w katalogu może zostać usunięty tylko przez właściciela katalogu lub właściciela pliku (przypomnienie: w ćwiczeniu z prawami do katalogu plik mogli usunąć wszyscy, którzy mieli prawo w do katalogu.

  1. Na niektórych laboratoriach metodą oddawania prac do sprawdzenia, będzie umieszczenie plików z rozwiązaniem w katalogu wskazanym przez nauczyciela. W takiej sytuacji katalog będzie dostępny dla wszystkich i będzie miał ustawione uprawnienia specjalne. Dlaczego uprawnienia specjalne są w tym przypadku potrzebne? Udostępnione są trzy katalogi:

    • /home2/samba/karwowskij/u1
    • /home2/samba/karwowskij/u2
    • /home2/samba/karwowskij/u3

    Każdy z katalogów ma prawa rwx dla wszystkich. Różnicą jest tylko obecność (lub brak) uprawnień specjalnych. Można sprawdzić uprawnienia katalogów (proszę zwrócić uwagę na subtelne różnice, pojawienie się s i t zamiast odpowiednich liter w uprawnieniach. s oznacza sgid, t oznacza ograniczone prawo usunięcia):

    $ ls -ld /home2/samba/karwowskij/u[123]

    W tym ćwiczeniu należy dobrać się w pary/zespoły. Przynajmniej jedna z osób będzie musiała odgrywać role złego studenta, który będzie chciał ukraść lub usunąć pliki innych.

    Umieścić w każdym z katalogów plik z jakąś treścią, który będzie udawał rozwiązanie zadania laboratoryjnego. Nazwać go login.txt (login zastąpić swoim loginem).

    Sprawdzić dla których zestawów uprawnień specjalnych zły student może usunąć oddane przez Państwa rozwiązanie.

    Obejrzeć uprawnienia i właścicieli dodanych plików. Dla których zestawów uprawnień specjalnych mogą Państwo zabronić złemu studentowi dostępu do pliku (a więc kradzieży rozwiązania), tak aby pozostawić dostęp nauczycielowi (grupa teachers)?

  2. W każdym systemie UNIX znajdą Państwo katalog /tmp. Jakie uprawnienia ma ten katalog?