Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

so:users_chmod

Użytkownicy i grupy

W uniksopodobnych systemach istnieją użytkownicy i grupy.
Użytkownicy identyfikowani są po numerycznych identyfikatorach uid (user identifier), które są mapowane na nazwy użytkowników.
Podobnie grupy mają identyfikatory numeryczne o nazwie gid (group identifier), które też są mapowane na nazwy grup.

Każdy użytkownik jest w jednej podstawowej grupie (nazywanej jego grupą podstawową, primary group) i może należeć do dowolnie wielu grup (nazywanych jego grupami dodatkowymi, supplementary groups).

Lista dostępnych użytkowników i grup oraz powiązania uid/gid z nazwami zwykle są czytane z plików /etc/passwd i /etc/groups, ale po odpowiedniej konfiguracji może być pobierana też z innych źródeł.
Np. można wykorzystać serwer LDAP, czy kontroler domeny AD za pośrednictwem programu winbindd. Więcej informacji na tutaj.
Hasła lokalnych użytkowników i grup są przechowywane w /etc/shadow i /etc/gshadow

W systemie plików zapisane są uidy i gidy (a nie nazwy użytkowników), stąd np. podłączenie dysku z jednego komputera do drugiego przypisze pliki innym nazwom użytkowników i grup jeżeli mapowania uid/gid na nazwy nie są identyczne na obu systemach.
To dotyczy również kontenerów (sic!).

Dla procesów uniksopodobne systemy przechowują efektywny, zapisany i rzeczywisty uid (analogicznie gid).
Dla zwykłych procesów te identyfikatory są równe, dla procesów które zmieniały użytkownika mogą być różne. Więcej informacji na tutaj.
W tej chwili zakres uid'ów i gid'ów w Linuksie to 0÷(232-2)

Użytkownik o uid równym 0 nazywany jest superużytkownikiem (superuser) i ma zwyczajowo nadaną nazwę root.

Żeby sprawdzić swoją nazwę użytkownika, można skorzystać z komendy whoami.
Do sprawdzenia listy grup służy komenda groups [użytkownik]. Bez argumentów wyświetla grupy bieżącego użytkownika.

Zadanie 1 Przetestuj działanie komendy whoami.

Zadanie 2 Sprawdź listę grup w której jesteś. Sprawdź listę grup w której jest użytkownik student.

Komenda id [użytkownik] wyświetla nazwy i numery użytkownika, jego grupy podstawowej i grup dodatkowych.

Informację o użytkowniku można wyciągnąć poleceniem getent passwd użytkownik, o grupach – getent group grupa.

Zadanie 3 Sprawdź jaki masz uid i gid, zarówno poleceniem id jak i getent.

Zmiana hasła użytkownika jest wykonywana przy pomocy komendy passwd.
Root może przy pomocy passwd user ustawić hasło każdego użytkownika, może też zmienić czas ważności hasła bądź zablokować konto.

Podstawowe komendy administracyjne do zarządzania użytkownikami to:

  • dodawanie nowego użytkownika: useradd [-m] [-g grupa] nazwa
  • dodawanie nowej grupy: groupadd nazwa
  • dodanie użytkownika do grupy: gpasswd -a użytkownik grupa
  • zmiana/usunięcie użytkownika/grupy: usermod / userdel / groupmod / groupdel

Użytkownicy w systemie, historia logowania, komunikacja

Listę osób bieżąco używających systemu można wyświetlić komendą w -n oraz who.

Historię logowań można wyświetlić używając polecenia last [-n ile_ostatnich] [username].

Zadanie 4 Zaloguj się po ssh na polluksa. Sprawdź jacy inni użytkownicy są zalogowani.

Zadanie 5 Na polluksie sprawdź jacy trzej użytkownicy logowali się ostatnio.

Zadanie 6 Na polluksie sprawdź kiedy ostatnio logował się użytkownik root.

Zadanie 7 Sprawdź jacy użytkownicy byli zalogowaniu na polluksie w chwili 2023-03-03 13:30

Komendą write użytkownik [terminal] można wysłać tekst do wybranego użytkownika (kończąc wpisany tekst przez EOF, zwykle Ctrl+d).
Spowoduje to wyświetlenie mu podanego testu poprzedzonego komunikatem "message from…" w terminalu.
Otrzymywanie takich wiadomości można zablokować (bądź odblokować) komendą mesg {n|y}.

Można też wysłać wiadomość do wszystkich użytkowników komendą wall.

Zadanie 8 Napisz do sąsiada wiadomość. Zobacz na własnym ekranie wiadomość wysłaną od kogoś.

Istnieje też komenda talk użytkownik pozwalająca na rozmowę między dwoma użytkownikami.

Przełączenie się na innego użytkownika

Posiadając odpowiednie uprawnienia i/lub znając odpowiednie hasło (w zależności od ustawień systemu) można przełączyć się na innego użytkownika bądź wykonać komendę jako inny użytkownik.

Komenda su [-] [użytkownik] po autoryzacji uruchamia domyślną powłokę dla podanego użytkownika (domyślnie roota).
Komenda su -c komenda [-] [użytkownik] po autoryzacji uruchamia w domyślnej powłoce dla podanego użytkownika (domyślnie roota) podaną komendę.
su jest dostępna w każdym uniksopodobnym systemie. W domyślnych ustawieniach Linuksa komenda su wymaga podania hasła użytkownika docelowego (i w niektórych dystrybucjach przynależności do odpowiedniej grupy, zwykle wheel).

Na wielu dystrybucjach instalowana jest też komenda sudo która ma na celu zezwolenie wybranym użytkownikom na wykonywanie wybranych komend z uprawnieniami wskazanych użytkowników. Do autoryzacji sudo wykorzystuje hasło bieżącego bądź docelowego użytkownika. W niektórych dystrybucjach komenda sudo jest nadużywana do zastąpienia komendy su.

Zadanie 9 Zaloguj się na podany przez prowadzącego serwer przez ssh (prawdopodobnie ssh userN@fe80::1%br0). Zmień użytkownika na root. Zmień użytkownika na innego userN.

Do zmiany (w bieżącej sesji powłoki) grupy podstawowej można użyć komendy newgrp lub sg. Komenda sg może też (podobnie jak su) uruchomić wskazane polecenie ze zmienioną grupą podstawową.
Komenda newgrp jest w standardzie POSIX, ale część systemów uniksopodobnych jej nie dostarcza. sg jest specyficzne dla Linuksa.
Po wykonaniu komendy newgrp / sg lista grup do których użytkownik należy zostaje bez zmian, więc efektywne prawa dostępu do plików są identyczne niezależnie od bieżącej grupy podstawowej. Zmiana grupy podstawowej ma wpływ m. inn. na to do jakiej grupy należą nowo tworzone pliki i procesy.

Root może też korzystać z komend runuser i setpriv do uruchamiania komend z innym uid/gid/uprawnieniami.

Uprawnienia dostępu do plików

Rodzaje i zapis uprawnień

W uniksopodobnych systemach dostęp do pliku określają trzy podstawowe uprawnienia: odczytu (read), zapisu (write) i wykonania (execute).
Każde z tych uprawnień jest przyznawane osobno właścicielowi pliku (user), grupie pliku (group) i pozostałym użytkownikom (others).
Dodatkowo można ustawić trzy uprawnienia specjalne: set-user-id (suid, s), set-group-id (sgid, s) i sticky (t).

Przy dostępie do pliku, jeżeli plik należy do bieżącego użytkownika, brane są pod uwagę tylko uprawnienia użytkownika.
Jeżeli plik nie należy do użytkownika, ale użytkownik należy do grupy pliku, brane są pod uwagę tylko uprawnienia grupy.
Jeżeli plik nie należy do użytkownika i użytkownik nie należy do grupy pliku, brane są pod uwagę tylko uprawnienia pozostałych.
Zauważ że jeśli plik ma ustawione prawo do odczytu dla grupy ale nie ma prawa odczytu dla użytkownika, to właściciel pliku nie może wyświetlić tego pliku nawet jeśli należy do grupy pliku.

Prawo do wykonania dla pliku oznacza możliwość uruchomienia go (jako skrypt, program etc.), dla katalogu – wejścia do niego.

Suid/sgid nadany zwykłym plikom oznacza, że po uruchomieniu proces będzie działać z efektywnym uid/gid właściciela pliku.
Zauważ że skrypt są interpretowane przez inny program, nie uruchamiane. Nadanie skryptowi suid/sgid nie ma wpływu na jego działanie.
Suid pozwala np. zwykłemu użytkownikowi zmienić hasło (czyli zmienić plik /etc/shadow do którego zwykły użytkownik nie ma dostępu).
Sgid pozwala np. zwykłemu użytkownikowi uruchamiać maszyny wirtualne w VirtualBoxie czy analizować pakiety sieciowe w Wiresharku.

Sticky bit nadany katalogowi D oznacza, że plik X z katalogu D może usunąć tylko właściciel pliku X bądź katalogu D.
Sticky bit ustawiany jest w katalogu /tmp i innych, gdzie każdy użytkownik może tworzyć pliki o to, by tylko właściciel (bądź root) mogli usunąć pliki.

Suid/sgid dla innych plików niż zwykłe i sticky bit dla innych plików niż katalogi nie mają spójnego znaczenia w uniksopodobnych systemach.

Przy montowaniu systemu plików można ustawić opcję nosuid która wyłącza działanie suid/sgid

Uprawnienia są przechowywane jako liczba, gdzie wartości kolejnych bitów oznaczają (od najstarszego bitu): prawa specjalne (w kolejności suid, sgid, sticky), i prawa dla użytkownika, grupy, innych (w kolejności odczyt, zapis, wykonanie).
Numerycznie uprawnienia zapisuje się w systemie ósemkowym, np: 4751 gdzie kolejne cyfry oznaczają uprawnienia specjalne (tutaj: suid), użytkownika (tutaj: wszystkie), grupy (tutaj: odczyt i wykonanie) i innych (tutaj: wykonanie).

Tekstowo uprawnienia zapisuje się jako: rwxrwxrwx, gdzie kolejne trójki to właśnie uprawnienia użytkownika, grupy i innych.
Brak danego uprawnienia zapisuje się przez -.
Zwykle przed tak zapisanymi uprawnieniami pojawia się dodatkowa litera określająca typ pliku.
Uprawnienia specjalne zapisuje się na pozycji uprawnień wykonania: suid i prawo do wykonanie to s, suid i brak prawa do wykonania to S na pozycji użytkownika. Analogicznie prezentowany jest sgid na pozycji grupy, i sticky bit z literami t i T na pozycji pozostałych.
Przykładowo: rw-r--r-- oznacza że użytkownik ma prawo zapisu i odczytu, a grupa i pozostali tylko do odczytu (równoważne 644),
a rwx--x--x pozwalają właścicielowi na odczyt, zapis i wykonanie pliku, a grupie i pozostałym tylko na wykonanie (711).

Aby zobaczyć szczegółowe informacje o pliku, w tym uprawnienia, można wykonać stat plik.
Uprawnienia są też wyświetlane w wynikach ls -l i tree -p.
Wszystkie powyższe polecenia dodają na początek uprawnień literę określającą rodzaj pliku.

Zadanie 10 Sprawdź jakie uprawienia mają (na twoim komputerze):

  • twój katalog domowy
  • podkatalog .ssh w twoim katalogu domowym
  • plik .bash_history w twoim katalogu domowym
  • plik /etc/passwd i /etc/shadow
  • katalog /tmp
  • plik /usr/bin/passwd i /usr/bin/write

Zadanie 11 Sprawdź jakie mają uprawnienia i jakim są rodzajem plików:

  • /var/run
  • /dev/sda lub /dev/nvme0n1
  • /dev/null
  • /run/initctl
  • /run/rpcbind.sock

Zmiana uprawnień, grupy i użytkownika pliku

Domyślnie uprawnienia nadawane plikom i katalogom określa maska którą można odczytać poleceniem umask (i zmienić dla bieżącej powłoki poleceniem umask oktalnie).

Do zmiany uprawnień służy komenda chmod uprawnienia plik.
chmod przyjmuje uprawnienia w postaci ósemkowej, np. chmod 644 plik lub w postaci symbolicznej.
Postać symboliczna to oddzielone przecinkami wyrażenia na które składa się:

  • litera u, g, o lub a (user, group, others lub all - wszyscy)
  • operacja +, - lub = (dodaj, usuń lub ustaw te prawa)
  • uprawnienia r, w, x, s lub t.

Np. chown u+x,o= plik doda użytkownikowi prawo do zapisu i ustawi brak praw dla innych (a prawa grupy zostaną bez zmian).
Pominięcie litery [ugoa] przed operacją ma specjalne znaczenie, szczegóły w podręczniku systemowym.

Uprawnienia dostępu może zmieniać tylko właściciel pliku (i root).

Właściciel pliku będący w kliku grupach może użyć komendy chgrp grupa plik do zmiany grupy do której należy plik.

Tylko root może zmienić właściciela (i grupę) pliku poleceniem chown [właściciel][:[grupa]] plik.

Zarówno chmod, chgrp i chown przyjmują przełączniki -R (--recursive) dla rekursywnej zmiany i --reference=plik dla ustawienia uprawnień/grupy/właściciela identycznego jak we wskazanym pliku.

Ćwiczenia wykonuj na podanym przez prowadzącego serwerze.
Do tworzenia plików możesz wykorzystać np. komendę
fortune > plik.

Zadanie 12 Stwórz plik. Ustaw takie prawa dostępu, żeby tylko właściciel mógł odczytać plik.
Sprawdź poprawność nadanych praw przełączając się na innych użytkowników.

Zadanie 13 Stwórz plik. Ustaw korzystając z ósemkowego zapisu takie prawa dostępu, żeby właściciel mógł zmodyfikować i odczytać plik, a grupa mogła tylko odczytać plik. Sprawdź poprawność nadanych praw.

Zadanie 14 Stwórz plik. Ustaw korzystając z symbolicznego zapisu takie prawa dostępu, żeby właściciel mógł zmodyfikować i odczytać plik, a grupa mogła tylko odczytać plik.

Zadanie 15 Zmień grupę pliku z poprzedniego zadania.

Zadanie 16 Stwórz plik. Ustaw takie prawa dostępu, żeby tylko właściciel i pozostali mogli odczytać plik. Sprawdź czy osoba należąca do grupy pliku może go odczytać.

Zadanie 17 Stwórz katalog ze zwykłym plikiem w środku. Odbierz prawo do wykonywania katalogu. Spróbuj wylistować katalog, wejść do katalogu i wyświetlić plik bez wchodzenia do katalogu.

Zadanie 18 Zmień prawa dostępu katalogu na u=rwx,go=rx. Stwórz w tym katalogu zwykły plik. Wyświetl plik jako inny użytkownik. Wyświetl zawartość katalogu jako inny użytkownik.
Następnie zmień prawa do katalogu u=rwx,go=x. Spróbuj ponownie wyświetlić plik i zawartość katalogu jako inny użytkownik.

Zadanie 19 Stwórz katalog z prawami dostępu 777 i stwórz w nim dwa pliki. Jednemu z nich ustaw prawa 600. Z innego użytkownika spróbuj usunąć oba pliki.

Zadanie 20 W katalogu użytkownika A z prawami dostępu 777 stwórz jako użytkownik B dwa katalogi: jeden pusty, jeden z plikiem w środku. Spróbuj usunąć te katalogi jako użytkownik A.

Zadanie 21 Czy możesz zmienić nazwę katalogu K który nie dał się usunąć w poprzednim zadaniu? Czy możesz przenieść katalog K do innego? Czy możesz przenieść katalog zawierający K do innego?

Zadanie 22 Stwórz plik i katalog z plikiem w środku i odbierz wszystkim trzem wszystkie uprawnienia. Zmień użytkownika na root i spróbuj wyświetlić oba pliki.

Zadanie 23 Z roota zmień właściciela wybranego pliku. Następnie zmień grupę innego pliku na www-data.

Data utworzenia, modyfikacji, dostępu

Linuksowe system plików zwykle przechowują datę zmiany metadanych (change, ctime), zmiany treści (modify, mtime) i ostatniego dostępu (access, atime) dla każdego pliku. Niektóre systemy plików dodatkowo przechowują też czas utworzenia pliku.
Montując system plików często wyłącza się rejestrowanie czasu ostatniego dostępu podając opcję noatime lub ustawia zmianę tego czasu tylko w szczególnych przypadkach podając opcję relatime. Komenda mnt i findmnt wyświetlają z jakimi opcjami zamontowano system plików.

Polecenie stat plik pokazuje te czasy.

Komenda touch plik ustawia czas dostępu i modyfikacji pliku, domyślnie na teraz.
Podając -d data lub --reference=plik można wybrać inną datę, a -a, -c i -m wybierają który czas zmodyfikować.
Jeśli plik docelowy nie istnieje, domyślnie komenda touch go stworzy. Jest to często używane do tworzenia pustych plików.

Zadanie 24 Sprawdź daty dla pliku /var/log/wtmp

Zadanie 25 Zmień daty do swojego katalogu domowego.

Zadanie 26 Zmień datę zmiany zawartości wybranego pliku na 13:30 PDT Saturday month ago.

so/users_chmod.txt · ostatnio zmienione: 2024/03/13 13:59 przez jkonczak