1. Teoria

System Linux wywodzi się z rodziny systemów unixowych, których przeznaczeniem było głównie działanie jako systemy serwerowe obsługujące bardzo wielu użytkowników. Z tego powodu w systemie Linux istnieje stosunkowo rozbudowany system zarządzania użytkownikami. Każdy użytkownik rozpoznawany jest po nazwie użytkownika oraz jednocześnie w systemie po specjalnym numerze UID, który jest unikalny dla niego. Dodatkowo użytkownicy mogą przypisani być do grup. Grupy także rozpoznawane są za pomocą nazwy oraz specjalnego unikalnego numeru GID. Grupa powinny reprezentować pewną wspólna cechę wielu użytkowników. Głównym użytkownikiem systemu jest root który ma zawsze UID równy 0. Jest on także członkiem grupy root. Nazwy grup i użytkowników mogą się powtarzać, co jest w niektórych dystrybucjach domyślną polityką tworzenia grup dla użytkowników (nazwa grupy taka sama jak login).

1.1. Prawa dostępu do plików

1.1.1. Kategorie

Prawa dostępu do pliku definiujemy dla 3 kategorii:

  • user - użytkownik, czyli właściciel pliku

  • group - grupa przypisana do pliku

  • other - wszyscy pozostali

1.1.2. Rodzaje praw dostępu

Wyróżniamy 3 rodzaje praw:

  • read - odczyt zawartości pliku/katalogu (4 = 1002)

  • write - zapis do pliku/katalogu (2 = 0102)

  • execute - wykonanie pliku/otwarcie katalogu (1 = 0012)

Polecenie ls -l prezentuje prawa w zapisie symbolicznym: -rwxr-xr—x fizyk fizyk 0 kwi 16 13:09 plik

Pierwsza kolumna ma format tuuugggooo:

  • t - typ pliku

    • - - zwykły plik

    • d - katalog

    • l - dowiązanie symboliczne

  • u - uprawnienia użytkownika

  • g - uprawnienia grupy

  • o - uprawnienia wszystkich pozostałych

1.1.3. Sposoby reprezentacji praw

Typ zapisu Odczyt Zapis Wykonanie

binarny

22

21

20

liczbowy

4

2

1

symboliczny

r

w

x

1.2. chmod

Zmienia prawa dostępu do pliku.

Argument Opis

prawa ścieżka

zmienia prawa dostępu do podanego pliku

-R

rekurencyjnie ustawia prawa wszystkim plikom w podkatalogach

Prawa można podać w zapisie numerycznym lub symbolicznym.

1.2.1. Zapis numeryczny

Przy zapisie numerycznym dodajemy do siebie reprezentację liczbową dla każdej kategorii (osobno dla użytkownika, grupy i pozostałych), co daje nam 3 liczby, np 755.

1.2.2. Zapis symboliczny

Zapis symboliczny pozwala również na zmianę dotychczasowych praw za pomocą znaków:

  • = - ustawia podane prawa

  • + - dodaje podane prawa

  • - - usuwa podane prawa

Do każdej kategorii odwołujemy się przez odpowiednią literę (u,g lub o) stawiając za nim jeden z powyższych znaków i podając prawa, np. u=rwx,g+rw,o-r.

1.3. sudo

Uruchamia polecenie jako administrator.

Argument Opis

polecenie

uruchamia podane polecenia jako administrator

1.4. whoami

Wypisuje nazwę aktualnego użytkownika.

1.5. id

Wypisuje informacje o użytkowniku i grupach, do których należy.

1.6. adduser, addgroup

Dodaje użytkownika/grupę do systemu. Na podstawie informacji w /etc/adduser.conf konfiguracja obejmuje m.in.:

  • ustawienie powłoki na Bash

  • utworzenie katalogu domowego użytkownika

Argument Opis

nazwa

dodaje użytkownika/grupę o podanej nazwie

użytkownik grupa

dodaje użytkownika do grupy

1.7. /etc/passwd

passwd jest plikiem tekstowym z jednym rekordem na linię, z których każda opisuje jedno konto użytkownika. Każdy rekord (linia) składa się z siedmiu pól oddzielonych dwukropkami. Kolejność rekordów w pliku jest zazwyczaj nieistotna. Przykład: jsmith:x:1001:1000:Joe Smith, pokój 1007, (234) 555-8910, (234) 555-0044, e-mail:/home/jsmith:/bin/sh

Kolejne pola w rekordzie oznaczają:

  1. Nazwa użytkownika

  2. Drugie pole przechowuje informację używaną do sprawdzania hasła użytkownika. W nowych systemach wartość tego pola to "x", gdyż przechowywanie haseł, do których mają dostęp wszyscy użytkownicy nie jest bezpieczne. Obecnie stosuje się plik /etc/shadow. Ustawienie tego pola na gwiazdkę "*" wyłącza konto, aby zapobiec jego użyciu.

  3. Identyfikator użytkownika UID, numer, który system operacyjny używa do celów wewnętrznych.

  4. Identyfikator grupy GID. Liczba ta określa podstawową grupę użytkownika, wszystkie pliki, które są tworzone przez użytkownika są początkowo dostępne dla tej grupy.

  5. Piąte pole, zwane polem GECOS, jest komentarzem, który opisuje osoby lub konta. Zazwyczaj jest to zbiór wartości oddzielonych przecinkami w tym pełnej nazwy użytkownika i dane kontaktowe.

  6. Ścieżka do katalogu domowego użytkownika.

  7. Domyślna powłoka (shell). Program, który jest uruchamiany przy każdym zalogowaniu do systemu. Dla użytkownika interaktywnego, zazwyczaj jest to jeden z systemu tłumaczy linii komend np. bash.

1.8. /etc/group

group jest to plik, w którym przechowywane są informacje o grupach. Tak jak w przypadku pliku passwd jeden rekord stanowi jedna linia rozdzielana znakiem dwukropka. Przykład: cdrom:x:24:joe,admins,kate

Poszczególne pola w rekordzie oznaczają:

  1. Nazwa grupy

  2. Pole hasła, przeważnie nie używane. Umożliwia tworzenie specjalnych uprzywilejowanych grup.

  3. Identyfikator grupy GID.

  4. Lista użytkowników grupy rozdzielona przecinkami. Wszyscy użytkownicy wymienieni w tym polu należą do danej grupy i zyskują jej uprawnienia.

1.9. su

Zmienia użytkownika, na którego jesteśmy zalogowani.

Argument Opis

login

loguje się na podanego użytkownika

1.10. chgrp

Zmienia grupę, do której przypisany jest plik. Pozwala na zmianę grupy, na taką, do której należy użytkownik.

Argument Opis

grupa ścieżka

przypisuje grupę do podanego pliku/katalogu

1.11. chown

Zmienia użytkownika i grupę, do której przypisany jest plik. Zazwyczaj tylko administrator ma prawa do użycia tej komendy.

Argument Opis

[użytkownik][:grupa] ścieżka

przypisuje grupę/użytkownika do podanego pliku/katalogu

1.12. deluser, delgroup

Usuwa użytkownika/grupę.

Argument Opis

nazwa

usuwa użytkownika/grupę o podanej nazwie

--remove-home użytkownik

usuwa użytkownika wraz z jego katalogiem domowym

1.13. passwd

Zmienia hasło użytkownika.

Argument Opis

brak

zmienia hasło aktualnego użytkownika

login

zmienia hasło użytkownika o podanym loginie

2. Praktyka

2.1. Zadanie

Zapoznaj się z ideą wirtualizacji oraz narzędziem VirtualBox dostępnym na komputerach w laboratorium.

2.2. Zadanie

Pobierz i uruchom w VirtualBox obraz systemu Ubuntu z adresu: http://wierzba.wzks.uj.edu.pl/~kwrobel/SOS/Ubuntu9.ova

2.3. Zadanie

Important sudo, whoami

Uzyskaj prawa użytkownika root wykonując np. polecenie sudo bash. Hasło użytkownika ubuntu to reverse, sprawdź poleceniem whoami czy posiadasz dostęp jako użytkownik root.

2.4. Zadanie

Important adduser

Utwórz w systemie użytkowników: marek, ania, jurek.

2.5. Zadanie

Sprawdź jak zmienił się plik /etc/passwd.

2.6. Zadanie

Important addgroup

Utwórz w systemie grupy: marketing, zarzad.

2.7. Zadanie

Sprawdź jak zmienił się plik /etc/group.

2.8. Zadanie

Dodaj do grupy marketing użytkowników marek i ania, a do grupy zarzad tylko użytkownika ania.

2.9. Zadanie

Important su

Jako użytkownik marek utwórz katalog ~/projekt a w nim plik tekstowy z dowolną treścią o nazwie ~/projekt/zalozenia.

2.10. Zadanie

Important chmod, chgrp

Ustaw takie prawa dostępu do tego pliku aby mogły go odczytać wszystkie osoby ale edytować tylko z grupy marketing. Sprawdź, logując się jako marek lub ania, czy możesz wyświetlić plik i go zmodyfikować, a jako jurek możesz tylko wyświetlić.

2.11. Zadanie

Ustaw takie prawa dla katalogu projekt, aby wyświetlić jego zawartość mogła tylko osoba z grupy zarzad (czyli tylko ania) - pozostałe prawa pozostają niezmienione. Sprawdź czy jako marek znając pełną ścieżkę pliku nadal możesz wyświetlać plik ~/projekt/zalozenia.

2.12. Zadanie

Ustaw takie prawa do katalogu projekt, aby wejść do katalogu mogła tylko osoba z grupy zarzad. Sprawdź czy jako marek nadal możesz wyświetlać plik?

2.13. Zadanie

Utwórz katalog projekt2 i dodaj do niego pliki i katalogi (przynajmniej 2 poziomy). Spróbuj ustawić dowolne prawa dostępu rekurencyjnie wszystkim plikom i podkatalogom dla ~/projekt2. Np. prawa 666.

2.14. Zadanie

Important deluser, delgroup

Usuń grupy i użytkowników w systemie.