Laboratorium 1 i 2: acl, syslog

Mechanizmy lokalnej kontroli dostępu

Listy kontroli dostępu (ang. Access Control List, ACL) rozszerzają standardowy mechanizm uprawnień, kontrolujący dostęp do plików (a także katalogów, urządzeń, gniazd i innych obiektów systemu plików).

Standardowe uprawnienia definiują prawo do odczytu (r), zapisu (w) i wykonania (x) dla:

  • właściciela pliku (lub innego obiektu reprezentowanego przez plik, od tego momentu nie będziemy już tego powtarzać),
  • grupy, do której należy właściciel,
  • pozostałych użytkowników.

ACL pozwalają na bardziej rozbudowaną kontrolę - dają możliwość przydzielania trzech wymienionych uprawnień (rwx) nie tylko dla właściciela pliku, ale dla dowolnie wskazanego użytkownika, nie tylko dla grupy pliku, ale dla dowolnie wskazanej grupy.

ACL są wspierane przez różne linuksowe systemy plików, mi.in.: xfs, ext2, ext3, ext4, reiserfs, nfs, jfs.
Co ciekawe spośród znanych systemów plików nie obsługują ACL: FAT16, FAT32, zaś system plików exFAT w jednej z wersji systemu Windows je obsługiwał, ale współczesne wersje tego systemu list ACL w exFAT nie obsługują.

Uważa się, że ACL są zgodne ze standardem POSIX. W rzeczywistości opisujące je standardy POSIX 1003.1e i 1003.2c draft 17 nie zostały oficjalnie przyjęte. ACL są również wspierane w systemach firmy Microsoft, jednak nie zachowują one pełnej zgodności ze standardem i są wspierane jedynie przez system plików NTFS.

Linux

1. Lista Kontroli Dostępu

Minimalna lista kontroli dostępu pokrywa się ze standardowymi uprawnieniami, natomiast lista rozszerzona zawiera dodatkową pozycję - maskę i może zawierać także pozycje dla poszczególnych użytkowników i grup.

W liście ACL wyróżniamy następujące typy pozycji (w nawiasach słowa kluczowe):

  • właściciel (user:: lub u::)
  • nazwany użytkownik (user:nazwa_użytkownika: lub u:nazwa_użytkownika:)
  • grupa właściciela (group:: lub g::)
  • nazwana grupa (group:nazwa_grupy: lub g:nazwa_grupy:)
  • maska (mask::)
  • pozostali (other::)

(Uwaga: obecna w literaturze frazeologia nazwany użytkownik czy nazwana grupa ma to do siebie, że dobrze kojarzy się z angielską terminologią, jednak spośród wielu znaczeń angielskiego słowa name najbardziej pasujące tutaj to to mention explicitly : specify).

2. Maska

Rozszerzone listy kontroli dostępu oferują możliwość maskowania uprawnień, co oznacza, że podczas obliczania efektywnych uprawnień, oprócz uprawnień zdefiniowanych dla danego użytkownika, brana jest pod uwagę także maska. Z dwoma wyjątkami: uprawnienia zdefiniowane dla właściciela i dla tzw. pozostałych (other) są zawsze efektywne (maska nie ma na nie wpływu).

Efektywne uprawnienia do pliku są koniunkcją bitową maski i uprawnień zdefiniowanych w odpowiedniej pozycji (dla nazwanego użytkownika, grupy właściciela lub nazwanej grupy).

Przykład

Jeżeli prawa do pliku zdefiniowane są w następujący sposób:

user:testowy:r-x
mask::rw-

to efektywne uprawnienia użytkownika "testowy" to: r--

Uwaga: domyślnie maska jest aktualizowana automatycznie i określa maksymalne uprawnienia dla użytkowników należących do nazwanych użytkowników, grupy właściciela lub grup nazwanych.

3. Algorytm sprawdzania uprawnień dostępu

Rozszerzone uprawnienia są stosowane wg następującego algorytmu:

  • jeżeli użytkownik jest właścicielem pliku - zastosuj uprawnienia właściciela,
  • jeżeli użytkownik jest na liście nazwanych użytkowników - zastosuj efektywne (patrz punkt 2) uprawnienia nazwanego użytkownika,
  • jeżeli jedna z grup użytkownika jest grupą właściciela i posiada odpowiednie efektywne prawa - zezwól na dostęp,
  • jeżeli jedna z grup użytkownika występuje jako grupa nazwana i posiada odpowiednie efektywne prawa - zezwól na dostęp,
  • jeżeli jedna z grup użytkownika jest grupą właściciela lub należy do grup nazwanych, ale nie posiada dostatecznych efektywnych uprawnień - dostęp jest zabroniony,
  • jeżeli nie zachodzi żadne z powyższych - uprawnienia tzw. pozostałych określają możliwość dostępu.

4. Polecenia

Do zarządzania listami ACL służą dwa polecenia:

  • getfacl
  • setfacl

Polecenie "getfacl" wypisuje rozszerzone uprawnienia do plików.

Przykład

% touch plik-testowy
% ls -l plik-testowy
-rw-r--r-- 1 janek bsk 0 2016-10-05 14:46 plik-testowy
% getfacl plik-testowy
# file: plik-testowy
# owner: janek
# group: bsk
user::rw-
group::r--
other::r--
% getfacl plik-testowy –-omit-header
user::rw-
group::r--
other::r--

Polecenie "setfacl" pozwala modyfikować uprawnienia.

a) Zmiana uprawnień - opcja -m

Jeżeli chcemy dodać lub zmienić uprawnienia używamy opcji -m (jak modify), a następnie podajemy: pozycję z listy (patrz punkt 1), jakie uprawnienia chcemy nadać (rwx) i jakiemu plikowi.

Przykład

% setfacl -m u:ala:rwx plik-testowy
% getfacl plik-testowy
# file: plik-testowy
# owner: janek
# group: bsk
user::rw-
user:ala:rwx
group::r--
mask::rwx
other::r--
% ls -l plik-testowy
-rw-rwxr--+ 1 janek bsk 0 2016-10-05 14:46 plik-testowy

Zwróćmy uwagę na wiersz powyżej. Znak + oznacza, że plik posiada rozszerzone uprawnienia, a zamiast uprawnień grupy widzimy maskę (co nie powinno dziwić, bo maska opisuje maksymalne uprawnienia dla wszelkich grup).

Maskę możemy zmieniać korzystając z setfacl (mask::), a także poprzez chmod (zmiana praw dla grupy powoduje zmianę maski).

b) Usunięcie uprawnień - opcja -x

Opcji -x (jak exclude) używa się tak:

% setfacl -x u:ala plik-testowy
% getfacl plik.txt –-omit-header
user::rw-
group::r--
mask::r--
other::r--
% ls -l plik.txt
rw-r--r--+ 1 janek bsk 0 2016-10-05 14:46 plik-testowy

Inne opcje pozwalają na przykład na usunięcie uprawnień dotyczących wszystkich pozycji (-b, jak blank), czy modyfikację uprawnień rekurencyjnie w drzewie katalogów (-R).

5. Domyślne prawa dostępu

Uprawnienia domyślne dotyczą tylko katalogów. Jeżeli katalogowi nadamy domyślne uprawnienia rozszerzone, to nowo utworzone pozycje w tym katalogu będą je dziedziczyć.

Do modyfikowania uprawnień domyślnych służy opcja -d (jak default) polecenia setfacl, po której następują znane już -m, -x itd.

Przykład dodania uprawnień domyślnych

% setfacl -d -m group:testowa:wx bsk-lab1
% getfacl bsk-lab1 –-omit-header
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:testowa:-wx
default:mask::rwx
default:other::r-x

Opcja -k kasuje domyślne uprawnienia.

Windows

Poniższe obrazki ilustrują działanie ACL w systemie Windows XP.

System plików NTFS umożliwia związanie z każdym plikiem (lub katalogiem) list kontroli dostępu. Dostęp do prostych ustawień ACL pliku jest możliwy z poziomu np. Eksploratora Windows w opcji Właściwości (menu Plik lub kontekstowe). Rozszerzone listy ACL są dostępne po wyborze uprawnień Zaawansowanych.


System Windows nie zapewniał obsługi ACL dla swoich pierwotnych systemów plików FAT (FAT16 i FAT32). W Windows CE 6 wprowadzono obsługę ACL dla systemu plików exFAT, jednak w późniejszych wersjach systemu Windows nie została ona wprowadzona.

Podsumowanie

Zalety ACL:

  • Elastyczność, możliwość nadawania dowolnie skomplikowanych uprawnień bez konieczności tworzenia dużej liczby grup.
  • Ułatwienie migracji, tworzenia i konfigurowania heterogenicznych środowisk z systemami operacyjnymi Windows i Linux (oprogramowanie Samba wspiera ACL).

Problemy: nie wszystkie narzędzia wspierają ACL:

  • Edytory, które automatycznie zapisują zawartość w nowym pliku, a następnie zmieniają jego nazwę na oryginalną, mogą tracić informację o rozszerzonych uprawnieniach.
  • Programy archiwizujące (np. tar) nie potrafią zapisywać informacji o listach kontroli dostępu.

Jedną z metod radzenia sobie z drugim problemem jest zapamiętywanie informacji ACL. Na przykład polecenie:

% getfacl -R --skip-base . >backup.acl

spowoduje zapisanie do pliku "backup.acl" informacji o ACL z całego drzewa systemu plików (opcja -R) z pominięciem domyślnych uprawnień (--skip-base). Używając polecenia setfacl z opcją --restore=backup.acl, można potem przywrócić rozszerzone uprawnienia.

Czytaj też

man 5 acl

man do poleceń: getfacl, setfacl, chmod, umask

Ćwiczenia

Ćwiczenie 1

1. Sprawdź czy istnieje użytkownik "testowy", a jeżeli nie to załóż konto o takim loginie.

2. Stwórz katalog "bsk1" z prawami 0755 i obejrzyj standardowe uprawnienia oraz listę rozszerzonych uprawnień do tego katalogu.

3. Dodaj (rozszerzone) uprawnienia do odczytu, zapisu i przeszukiwania do powyższego katalogu użytkownikowi "testowy". Ponownie sprawdź uprawnienia.

4. Zaloguj się jako "testowy" i sprawdź, czy możesz zapisać jakiś plik do katalogu "bsk1" stworzonego w poprzednim punkcie.

5. Zabierz grupie właściciela prawo do pisania dla katalogu "bsk1".

6. Zaloguj się jako "testowy" i sprawdź, czy możesz zapisać jakiś plik do katalogu "bsk1" stworzonego w poprzednim punkcie. Wyjaśnij powody zaistniałej sytuacji.

7. Po zakończeniu ćwiczenia usuń katalog "bsk1" wraz z zawartością.

Ćwiczenie 2

1. Stwórz katalog "bsk2" z prawami 0777 i obejrzyj standardowe uprawnienia oraz listę rozszerzonych uprawnień do tego katalogu.

2. Dodaj (rozszerzone) uprawnienia do odczytu i przeszukiwania do powyższego katalogu użytkownikowi "testowy".

3. Zaloguj się jako "testowy" i sprawdź, czy możesz zapisać jakiś plik do katalogu "bsk2" stworzonego w poprzednim punkcie. Wyjaśnij powody zaistniałej sytuacji.

4. Po zakończeniu ćwiczenia usuń katalog "bsk2" wraz z zawartością.

Ćwiczenie 3

1. Sprawdź, czy istnieje grupa "testowa", a jeżeli nie, to załóż grupę o takiej nazwie.

2. Stwórz katalog "bsk3" z prawami 0750. Jakie uprawnienia będą miały pliki założone w tym katalogu?

3. Stwórz plik "plik3a" w katalogu "bsk3".

4. Dodaj domyślne uprawnienia do katalogu "bsk3": do odczytu, zapisu i wykonywania dla grupy "testowa" oraz do odczytu i wykonywania dla pozostałych.

5. Stwórz plik "plik3b" oraz katalog "kat3" w katalogu "bsk3".

6. Porównaj uprawnienia obiektów z katalogu "bsk3".

7. Po zakończeniu ćwiczenia usuń katalog "bsk3" wraz z zawartością.


System rejestrujący - syslog

Jądro systemu, usługi systemowe i różne aplikacje zapisują informacje o swoim działaniu w dziennikach systemowych (logach). Dlatego pierwszym miejscem, do którego należy zajrzeć, kiedy jakaś usługa nie uruchamia się poprawnie, jest odpowiedni dziennik.

W systemach uniksowych i linuksowych dominującym systemem rejestracji zdarzeń jest syslog. Poznamy bliżej jedną z jego nowszych wersji o nazwie rsyslog.

Pliki dzienników

Pliki dzienników znajdują się z reguły w katalogu:

/var/log

Ważniejsze pliki które możesz tam znaleźć to :

  • messages lub syslog - główny dziennik systemowy
  • dmesg - komunikaty o urządzeniach wykrytych w trakcie startu systemu i o ładowanych sterownikach do tych urządzeń, do ich obejrzenia można posłużyć się programem dmesg
  • boot.log - komunikaty skryptów startowych
  • daemon.log - komunikaty usług
  • kern.log - wszystkie komunikaty generowanie przez jądro
  • auth.log - komunikaty pochodzące z części systemu odpowiedzialnej za uwierzytelnianie użytkowników (np. informacje o poleceniach wykonanych przez sudo)
  • mail.log - komunikaty związane z obsługą poczty
  • wtmp - zapisy logowania użytkowników do systemu, do ich oglądania służy polecenie last
  • lastlog - informacja o ostatnich logowaniach, do jej oglądania służy polecenie lastlog

Wpis do dziennika jest najczęściej pojedynczym wierszem zawierającym datę i czas wystąpienia zdarzenia, a także jego rodzaj i poziom ważności.

Konfigurowanie demona (r)syslog - podstawowe reguły

Za zbieranie informacji o działaniu systemu i umieszczania ich w plikach odpowiada usługa systemowa syslogd (lub nowsza rsyslogd). Plikiem konfiguracyjnym dla syslogd jest /etc/syslog.conf a dla rsyslogd /etc/rsyslog.conf (zachowana jest zgodność wstecz).

(r)syslog umożliwia sortowanie komunikatów ze względu na źródło ich pochodzenia i stopień ważności oraz na kierowanie ich w różne miejsca: do plików, na terminale użytkowników a także na inne komputery.

Plik konfiguracyjny opisuje reguły systemu rejestrowania. Podstawowy format jest następujący:

usługa.poziom <co najmniej jeden znak tabulacji> 	przeznaczenie

Usługa określa z jakiej części systemu pochodzi informacja. Może przyjąć następujące wartości: auth, authpriv, cron, daemon, kern, ftp, local0-7, lpr, mail, mark, news, syslog, user, uucp.

Poziom określa priorytety komunikatów. Wszystkie wiadomości o tym lub wyższym priorytecie trafiają do dziennika. Poziomy ważności są następujące (w kolejności rosnącego znaczenia): debug, info, notice, warning (warn), error (err), crit, alert, emerg (panic).
Znak "=" przed nazwą poziomu wskazuje, że należy zbierać wiadomości o dokładnie takim poziomie, a "!" oznacza "oprócz tego i wyższych poziomów". Symbol "*" oznacza wszystkie usługi i poziomy a "none" - "żaden poziom". W pojedynczej regule może występować wiele usług oddzielonych przecinkami lub par usługa-poziom oddzielonych średnikami.

Przeznaczenie określa gdzie trafiają zebrane komunikaty. Może to być między innymi:

  • plik - należy podać pełną ścieżkę np. /var/log/messages
  • łącze nazwane (przydatne przy debugowaniu) - nazwa łącza jest poprzedzona znakiem |
  • terminal np. tty6
  • maszyna zdalna - nazwa maszyny poprzedzona jest znakiem @, np. @192.168.0.1
  • lista użytkowników np: root,admin (stara składnia) lub :omusrmsg:root,admin (składnia rsyslog); * lub :omusrmsg:* spowoduje wyświetlenie komunikatu wszystkim zalogowanym użytkownikom
  • śmietnik: ~

Nazwa pliku poprzedzona "-" oznacza, że system plików nie powinien być synchronizowany po zapisaniu każdego wpisu do dziennika (włączone buforowanie).

Przykład

mail.info		/var/log/mail.log

Powyższy wpis spowoduje, że komunikaty systemu pocztowego o poziomach info i wyższych będą trafiały do pliku /var/log/mail.log a następujący:

*.emerg;user.none	             *

że wszystkie komunikaty awaryjne oprócz takich, które są generowane przez procesy użytkownika, pojawią się na ekranach wszystkich zalogowanych użytkowników.

Przykładowy plik rsyslog.conf znajdziesz na końcu scenariusza.

Aby zmusić demona (r)syslog działającego nieprzerwanie do ponownego odczytania pliku konfiguracyjnego należy wysłać do niego sygnał HUP. Pid procesu demona jest zapisany w pliku /var/run/rsyslogd.pid, więc właściwe polecenie ma następującą postać:

% kill -HUP $(cat /var/run/(r)syslogd.pid)

Co można zrobić również w następujący sposób:

% /etc/init.d/rsyslog restart

Do sprawdzenia poprawności składniowej pliku konfiguracyjnego służy polecenie:

% rsyslogd -f /etc/rsyslog.conf -N1

Nowe możliwości rsyslog

System rejestrujący pozwala także na korzystanie z tzw. modułów - wtyczek zapewniających różnorodną funkcjonalność. Polecenia dołączenia odpowiednich modułów powinny znaleźć się na początku pliku konfiguracyjnego. Dzięki schematom (templates) można określić format logowanej wiadomości.

Rsyslog umożliwia także filtrowanie wiadomości na podstawie jej zawartości. Udostępnia operacje porównywania takie jak: contains, isequal, startswith, regex. Ogólna postać polecenia jest następująca:

:własność,[!]operacja, "wzorzec"

gdzie najczęściej wykorzystywaną własnością jest :msg (treść komunikatu).

Przykład

:msg,contains,"iptables"                     /var/log/iptables.log
:msg,regex,"fatal .* error"                   /var/log/fatal-error.log

Rsyslog może także zapisywać informacje do baz danych MySQL lub PostgreSQL (po instalacji pakietu rsyslog-mysql lub rsyslog-pgsql). Jako miejsce przeznaczenia można wtedy podać nazwę tabeli.

Kolejną możliwością rsyslog jest wybór protokołu TCP lub RELP zamiast UDP. Nazwę maszyny przeznaczenia należy poprzedzić znakiem @@ (TCP) lub :omrelp: (RELP). Wcześniej należy załadować odpowiedni moduł.

Po instalacji rsyslog domyślnie czas jest zapisywany w skróconej formie: np. 2016-10-05 14:17:42 odpowiada za to poniższa linia w pliku konfiguracyjnym (by włączyć dokładne zapisywanie czasu - trzeba zamienić ją na komentarz).

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

Logger

Polecenie logger jest interfejsem do systemu syslog z poziomu interpretera poleceń (powłoki). Warto je wykorzystać do testowania zmian w pliku konfiguracyjnym. Na przykład aby sprawdzić regułę:

local2.info		/tmp/test.log

możesz wydać polecenie:

% logger -p local2.info "test local2 info"

Logrotate

Samo zbieranie i czytanie dzienników to nie wszystko o co powinien zadbać administrator - na maszynach z setką intensywnie pracujących użytkowników mogą one przyrastać bardzo szybko powodując przepełnienie systemu plików. Należy pamiętać, że samo skasowanie pliku nie rozwiązuje problemu (i-węzeł pliku nie zostanie zwolniony, dopóki plik nie zostanie zamknięty). Aby ułatwić zadania administratorowi system udostępnia polecenie logrotate, które umożliwia rotację plików z dziennikami, ich kompresję, przesyłanie pocztą do użytkowników i usuwanie. Jest zazwyczaj uruchamiany codziennie jako zadanie regularne przez podsystem cron. Jego plik konfiguracyjny to /etc/logrotate.conf

Analiza dzienników

Istnieją również narzędzia wspomagające analizowanie dzienników, tworzące odpowiednie raporty i przesyłające je pod wskazany adres. Przykładami takich narzędzi są swatch i logcheck.

Zobacz też

man rsyslog.conf
man rsyslogd
man logger
man logrotate

http://www.rsyslog.com/doc/rsyslog_conf.html

Alternatywa dla syslog: systemd

Ćwiczenia

1. Przejrzyj zawartość katalogu /var/log. Sprawdź czasy ostatniej modyfikacji plików. Czy znajdują się tam pliki skompresowane? Wyświetl ostatnie wpisy wybranych logów (skorzystaj z tail).

2. Wykonaj polecenie sudo su, a następnie sprawdź, w którym pliku pojawiła się informacja o tym (przydatne może okazać się polecenie ls -ltr).

3. Znajdź w plikach konfiguracyjnych logrotate zasady rotowania plików dla kern.log i syslog.

4. Wykonaj polecenia dmesg i last.

5. Przeczytaj /etc/rsyslog.conf i przy pomocy polecenia logger sprawdź kilka reguł. Spróbuj wskazać komunikaty, które trafiają do więcej niż jednego dziennika.

6. Zmodyfikuj plik konfiguracyjny i skorzystaj z polecenia logger do wysłania komunikatu do wszystkich użytkowników, wybranego użytkownika, na wybrany terminal, na inny komputer.

7. Zastosuj filtrowanie wiadomości na podstawie jej zawartości.

ZałącznikWielkość
rsyslog.conf_.txt2.56 KB

Ćwiczenia z rozwiązaniami

Ćwiczenia z rozwiązaniami

Ćwiczenie 1.

* Sprawdź czy istnieje użytkownik "testowy", a jeżeli nie to załóż konto o takim loginie.

$ useradd -m testowy

* Stwórz katalog "bsk1" z prawami 0755 i obejrzyj standardowe uprawnienia oraz listę rozszerzonych uprawnień do tego katalogu.

$ mkdir bsk1 -m 0755
$ ls -ld bsk1
drwxr-xr-x 2 root root 6 Sep 17 08:04 bsk1
$ getfacl bsk1
# file: bsk1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

* Dodaj (rozszerzone) uprawnienia do odczytu, zapisu i przeszukiwania do powyższego katalogu użytkownikowi "testowy". Ponownie sprawdź uprawnienia.

$ setfacl -m u:testowy:rwx bsk1
$ ls -ld bsk1
drwxrwxr-x+ 2 root root 6 Sep 17 08:04 bsk1
$ getfacl bsk1
# file: bsk1
# owner: root
# group: root
user::rwx
user:testowy:rwx
group::r-x
mask::rwx
other::r-x

* Zaloguj się jako "testowy" i sprawdź, czy możesz zapisać jakiś plik do katalogu "bsk1" stworzonego w poprzednim punkcie.

testowy może utworzyć plik

* Zabierz grupie właściciela prawo do pisania dla katalogu "bsk1".

$ chmod g-w bsk1
$ ls -ld bsk1
drwxr-xr-x+ 2 root root 17 Sep 17 08:11 bsk1
$ getfacl bsk1
# file: bsk1
# owner: root
# group: root
user::rwx
user:testowy:rwx		#effective:r-x
group::r-x
mask::r-x
other::r-x

* Jako "testowy" sprawdź czy możesz zapisać jakiś plik do katalogu "bsk1" stworzonego w poprzednim punkcie. Wyjaśnij powody zaistniałej sytuacji.

testowy nie może założyć pliku, bo nie ma efektywnych uprawnień do pisania w katalogu "bsk1"

* Po zakończeniu ćwiczenia usuń katalog "bsk1" wraz z zawartością.

$ rm -rf bsk1

Ćwiczenie 2.

* Stwórz katalog "bsk2" z prawami 0777 i obejrzyj standardowe uprawnienia oraz listę rozszerzonych uprawnień do tego katalogu.

$ mkdir bsk2 -m 0777
$ ls -ld bsk2
drwxrwxrwx 2 root root 6 Sep 17 08:28 bsk2
$ getfacl bsk2
# file: bsk2
# owner: root
# group: root
user::rwx
group::rwx
other::rwx

* Dodaj uprawnienia do odczytu i przeszukiwania do powyższego katalogu użytkownikowi "testowy".

$ setfacl -m u:testowy:rx bsk2
$ ls -ld bsk2
drwxrwxrwx+ 2 root root 6 Sep 17 08:28 bsk2
$ getfacl bsk2
# file: bsk2
# owner: root
# group: root
user::rwx
user:testowy:r-x
group::rwx
mask::rwx
other::rwx

* Zaloguj się jako "testowy" i sprawdź czy możesz zapisać jakiś plik do katalogu "bsk2" stworzonego w poprzednim punkcie. Wyjaśnij powody zaistniałej sytuacji.

testowy nie może założyć pliku, bo nie ma efektywnych uprawnień do pisania w katalogu "bsk2", uprawnienia efektywne to koniunkcja
uprawnień określnonych dla użytkownika testowy i maski, a więc r-x.

* Po zakończeniu ćwiczenia usuń katalog "bsk2" wraz z zawartością.

$ rm -rf bsk2

Ćwiczenie 3.

* Sprawdź, czy istnieje grupa "testowa", a jeżeli nie to załóż grupę o takiej nazwie.

* Stwórz katalog "bsk3" z prawami 0750. Jakie uprawnienia będą miały pliki założone w tym katalogu?

$ mkdir bsk3 -m 0750
$ umask
0077

* Stwórz plik "plik3a" w katalogu "bsk3".

$ touch bsk3/plik3a
$ ls -l bsk3/plik3a
-rw------- 1 root root 0 Sep 17 08:51 plik3a

* Dodaj domyślne uprawnienia do katalogu "bsk3": do odczytu, zapisu i wykonywania dla grupy "testowa" oraz do odczytu i wykonywania dla pozostałych.

setfacl -d -m g:testowa:rwx,o:rx bsk3
$ ls -ld bsk3
drwxr-x---+ 2 root root 29 Sep 17 08:53 bsk3
$ getfacl bsk3
# file: bsk3
# owner: root
# group: root
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:testowa:rwx
default:mask::rwx
default:other::r-x

* Stwórz plik "plik3b" oraz katalog "kat3" w katalogu "bsk3".
* Porównaj uprawnienia obiektów z katalogu "bsk3".

$ touch bsk3/plik3b
$ ls -l bsk3
total 0
-rw-------  1 root root 0 Sep 17 08:53 plik3a
-rw-rw-r--+ 1 root root 0 Sep 17 09:00 plik3b
$ getfacl bsk3/plik3b
# file: bsk3/plik3b
# owner: root
# group: root
user::rw-
group::r-x			#effective:r--
group:testowa:rwx		#effective:rw-
mask::rw-
other::r--

* Po zakończeniu ćwiczenia usuń katalog "bsk3" wraz z zawartością.

$ rm -rf  bsk3

Zaliczenie 2009

Część 1

Należy na wybranej maszynie (A) zmienić konfigurację usługi rlogin w taki sposób, aby:
- dostęp zdalny był dozwolony tylko z maszyn w sieci lokalnej (maszyny solab01 - solab15),
- wymagał od wszystkich podania hasła,
- zapisywał w dzienniku informację, z jakiej maszyny nastąpiło zdalne logowanie i zawierającą słowo RLOGIN.

Część 2

Następnie należy zmienić ustawienia w ten sposób, aby:
- zdalny dostęp do konta X bez podawania hasła mieli użytkownicy X i Y z komputera B,
- właściciel i użytkownik Y mieli wszystkie prawa, a pozostali żadnych praw do katalogu domowego użytkownika X,
- domyślne uprawnienia do katalogu domowego użytkownika X były takie, aby mógł on modyfikować i usuwać obiekty stworzone przez Y w tym katalogu.

Zaliczenie 2010

Część 1

Napisz skrypt, który skonfiguruje rozszerzone prawa dostępu do katalogu domowego A i obiektów, które będą tworzone w katalogu
domowym A, ale nie w jego podkatalogach (chodzi o nowo utworzone obiekty, nie zmieniamy zastanych uprawnień) w taki sposób, aby:
- użytkownicy A i B mieli wszystkie możliwe prawa,
- grupa właściciela i grupa B mogły je przeczytać, ale nie modyfikować
- pozostali nie mieli żadnych praw.

Część 2

Skonfiguruj wybraną usługę (inną niż tftp) w ten sposób, aby dostęp do niej był możliwy ze wyłącznie z komputerów z laboratorium 5490 oprócz jednego, dowolnie wybranego (np. oprócz solab10). W pliku /var/log/connections.log powinny znaleźć się wpisy o połączeniach zawierające nazwę usługi i informacje o kliencie: adres, port i login.

Zaliczenie 2011

Część 1

Jako root załóż katalog /home/public i skonfiguruj go w następujący sposób:

1. Użytkownik admin ma wszelkie uprawnienia do katalogu /home/public i jego zawartości.

2. Grupa G1 ma prawo do odczytu plików, które powstaną w katalogu /home/public.

3. Grupa G2 ma prawo do odczytu, wykonywania i modyfikacji plików, które powstaną w katalogu /home/public, nie ma natomiast prawa do tworzenia nowych plików w tym katalogu.

4. Pozostali nie mają żadnych praw do katalogu /home/public.

Część 2

Zainstaluj usługi telnet i rlogin na swoim serwerze i skonfiguruj je w następujący sposób:

1. Użytkownicy z maszyny solab06 mogą korzystać z usługi telnet. Przy próbie dostępu do pliku /var/log/connections.log dopisywany jest komunikat "TELNET from nazwa-hosta, ip adres-ip, port port".

2. Użytkownicy z maszyny solab06 nie mogą korzystać z usługi rlogin.

3. Użytkownicy z pozostałych maszyn, których nazwy zaczynają się na solab nie mogą korzystać z żadnej z wymienionych usług, a przy próbie dostępu otrzymują komunikat "Use ssh instead of nazwa-usługi from adres-ip".

4. Użytkownicy z wszystkich pozostałych maszyn nie mają dostępu do żadnej z wymienionych usług. Przy próbie niedozwolonego dostępu (także z solab06) do pliku /var/log/connections.log dopisywany jest komunikat "nazwa-usługi attempt from nazwa-hosta, ip adres-ip, port port".

Zaliczenie 2012

Część 1

Jako root załóż katalog /home/public i skonfiguruj go w następujący sposób:

1. Użytkownik nowy będzie mógł odczytywać pliki, które powstaną w katalogu /home/public.

2. Użytkownik guest ma prawo do odczytu i modyfikacji plików, które powstaną w katalogu /home/public, nie ma natomiast prawa do tworzenia nowych plików w tym katalogu.

3. Pozostali nie mają żadnych praw do katalogu /home/public.

Część 2

Zainstaluj usługi telnet i finger na swoim serwerze i skonfiguruj je w następujący sposób:

1. Z usługi telnet można korzystać tylko z maszyny solab15.

2. Z usługi finger można korzystać z dowolnej maszyny oprócz solab15.

3. Udane i nieudane próby skorzystania z usługi telnet są odnotowane w odpowiednich logach i zawierają frazę "BSK TELNET" oraz nazwę i adres klienta.

4. W przypadku próby skorzystania z usługi finger wykonaj i zapisz do logów wynik wykonania polecenia safe_finger do łączącego się klienta.

Zaliczenie 2013

Część 1

Jako root załóż katalog /home/public i skonfiguruj go w następujący sposób:

1. użytkownik admin ma wszelkie uprawnienia do katalogu /home/public i jego zawartości,

2. grupa students ma prawo do odczytu plików, które powstaną w katalogu /home/public,

3. użytkownik guest ma prawo do odczytu, wykonywania i modyfikacji plików, które powstaną w katalogu /home/public, nie ma natomiast prawa do tworzenia nowych plików w tym katalogu,

4. pozostali nie mają żadnych praw do katalogu /home/public i jego zawartości.

Część 2

Skonfiguruj rsyslog w taki sposób, aby:

1. wszystkie zapisy z poziomu debug trafiały do pliku /var/log/debug.log i tylko tam,

2. komunikaty z kategorii daemon, kern, lpr, mail i user znajdowały się w osobnych plikach,

3. komunikaty związane z uwierzytelnianiem użytkowników trafiały do pliku /var/log/auth.log,

4. w głównym dzienniku /var/log/syslog były wszystkie informacje oprócz tych związanych z uwierzytelnianiem, drukowaniem i podsystemem cron,

5. komunikatu z poziomu emerg pochodzące od jądra, usług lub od local2 (na potrzeby testowania) trafiały do wszystkich zalogowanych użytkowników,

6. korzystając z xconsole można było śledzić informacje przekazywane przez usługi i związane z uwierzytelnianiem,

7. do użytkownika admin trafiały komunikaty usług z poziomu co najmniej error oraz związane z drukowaniem i pocztą z poziomu co najmniej warning.

Zaliczenie 2014

Część 1

Jako root załóż katalog /home/public i skonfiguruj go w następujący sposób:

1. grupa staff ma prawo do odczytu, wykonywania i modyfikacji plików, które powstaną w katalogu /home/public, nie ma natomiast prawa do tworzenia nowych plików w tym katalogu ani do usuwania już istniejących,

2. użytkownik admin należący do grupy staff ma wszelkie uprawnienia do katalogu /home/public i jego zawartości,

3. wszyscy pozostali użytkownicy mają prawo do odczytu plików, które powstaną w katalogu /home/public.

Przetestuj poprawność swojej konfiguracji.

Część 2

Zmień konfigurację rsyslog w taki sposób, aby:

1. wszystkie zapisy z poziomu debug trafiały do pliku /var/log/debug.log i nie zaśmiecały żadnych innych plików,

2. komunikaty pochodzące od usług: o priorytecie nie większym niż warn znajdowały się w pliku /var/log/daemon-info, a o priorytecie co najmniej crit można było śledzić za pomocą xconsole,

3. wszystkie komunikaty poziomu co najmniej crit poza komunikatami związanymi z pocztą trafiały do pliku /var/log/critical,

4. komunikaty z poziomu emerg pochodzące od jądra lub od local2 (na potrzeby testowania) trafiały do wszystkich zalogowanych użytkowników,

5. korzystając z xconsole można było śledzić błędy (co najmniej poziom err) związane z uwierzytelnianiem.

Użyj polecenia logger do sprawdzenia poprawności konfiguracji.

Zaliczenie 2015

Część 1

Jako root załóż katalog /home/public i skonfiguruj prawa dostępu w następujący sposób:

1. grupa Staff ma wszelkie uprawnienia do katalogu /home/public i jego zawartości,

2. grupa Students ma prawo do odczytu i wykonywania plików, które powstaną w katalogu /home/public,

3. użytkownik Editor ma prawo do odczytu i modyfikacji plików, które powstaną w katalogu /home/public, nie ma natomiast prawa do tworzenia nowych plików w tym katalogu ani do usuwania już istniejących,

4. wszyscy pozostali użytkownicy mogą sprawdzić jaka jest zawartość katalogu /home/public nie mogą natomiast odczytywać, wykonywać ani modyfikować żadnych znajdujących się tam plików.

Przetestuj poprawność swojej konfiguracji.

Część 2

Zmień konfigurację rsyslog w taki sposób, aby:

1. wszystkie zapisy z poziomu debug trafiały do pliku /var/log/debug.log i nie zaśmiecały żadnych innych plików,

2. korzystając z xconsole można było śledzić informacje (co najmniej poziom notice) związane z uwierzytelnianiem,

3. wszystkie komunikaty o błędach poziomu co najmniej error i co najwyżej alert, dotyczące poczty i drukowania trafiały do użytkownika root,

4. komunikaty z poziomu emerg poza komunikatami związanymi z pocztą trafiały do wszystkich zalogowanych użytkowników.

Użyj polecenia logger do sprawdzenia poprawności konfiguracji.

Zaliczenie 2016

Część 1

Wyobraź sobie, że jesteś nauczycielem informatyki w liceum i chcesz na szkolnym serwerze założyć i skonfigurować strukturę katalogów dla klas o profilu mat-fiz-inf w następujący sposób:

1. Identyfikatorem użytkownika jest numer jego legitymacji. W klasie 1e są to numery od 424201 do 424215, w klasie 2e - numery od 424401 do 424415, a w klasie 3e - numery od 424601 do 424615.

2. Katalogi domowe uczniów znajdują się w /home.

3. W każdym katalogu domowym ucznia znajduje się podkatalog public.

4. Każdy uczeń ma prawo do odczytu i wykonywania plików, które powstaną w katalogu /home/424xxx/public należącym do ucznia z tej samej klasy.

5. Grupa staff ma prawo do odczytu, wykonywania i modyfikacji plików/katalogów, które powstaną w katalogach /home/424xxx/public, nie ma natomiast prawa do tworzenia nowych plików w tym katalogu ani do usuwania już istniejących.

6. Użytkownik master ma wszystkie uprawnienia do plików i katalogów, które powstaną w katalogach /home/424xxx/public.

7. Do pozostałych katalogów i plików, które powstaną w katalogu domowym ucznia ma wyłączne (wszystkie) prawa jego właściciel.

8. Użytkownicy, którzy nie zostali wymienieni wyżej nie mają żadnych praw do katalogów domowych uczniów.

Napisz skrypt, który założy konta Twoim uczniom i odpowiednio skonfiguruje strukturę katalogów. Stwórz potrzebne grupy użytkowników. Przetestuj poprawność swojej konfiguracji.

Przydatne polecenia (oprócz setfacl):

useradd - zakłada użytkownika, opcja -m powoduje założenie katalogu domowego dla nowego użytkownika
groupadd - zakłada grupę
adduser - dodaje użytkownika do grupy
chown/chgrp - zmienia właściciela/grupę pliku lub katalogu

Część 2

Zmień konfigurację rsyslog w taki sposób, aby:

1. wszystkie zapisy z poziomu debug trafiały do pliku /var/log/debug.log i nie pojawiały się w żadnych innych plikach katalogu /var/log,

2. wszystkie komunikaty o poziomie wyższym niż debug dotyczące uwierzytelniania użytkowników były zapisywane do pliku /var/log/useradm.log,

3. wszystkie komunikaty zawierające wzorzec "424" trafiały do pliku /var/log/students.log,

4. korzystając z xconsole można było śledzić informacje związane z drukowaniem z poziomów od notice do alert,

5. komunikaty najwyższego poziomu pochodzące od jądra lub local2 zostały wypisane na ekranach wszystkich zalogowanych użytkowników,

6. konfiguracja elementów nie wymienionych wyżej pozostała domyślna, czyli taka jaka jest w oryginalnym pliku konfiguracyjnym rsyslog

Użyj polecenia logger do sprawdzenia poprawności konfiguracji.
Sprawdź zawartość dzienników po uruchomieniu skryptu z części 1.

Zaliczenie 2018

Część 1

Wyobraź sobie, że razem kolegą prowadzicie kółko informatyczne w Twojej byłej szkole. Lista uczestników znajduje się w pliku tekstowym, gdzie każdy wiersz ma postać:
identyfikator_ucznia imię nazwisko
Chcesz udostępnić uczniom trzy katalogi: documents, tasks i solutions.
Napisz skrypt, który stworzy odpowiednią strukturę katalogów, założy uczestnikom konta oraz skonfiguruje dostęp do katalogów w taki sposób aby:

1. każdy uczeń z listy miał prawo do odczytu plików, które powstaną w katalogu documents, a twój kolega miał prawo do odczytu i zmiany plików z tego katalogu, nie mógł natomiast nic do niego dodać ani usunąć,

2. każdy uczeń z listy miał prawo do odczytu plików, które powstaną w katalogu tasks, a Twój kolega miał do niego wszystkie prawa,

3. każdy uczeń z listy miał prawo do umieszczenia swojego rozwiązania w katalogu solutions/identyfikator_ucznia-nr_zadania,

4. Twój kolega miał wszystkie prawa do poddrzewa solutions, natomiast uczniowie nie widzieli rozwiązań swoich kolegów.

Plik z listą uczniów, identyfikator kolegi i liczba zadań mają być parametrami skryptu.

Część 2

Skonfiguruj rsyslog w taki sposób, aby:

1. wszystkie zapisy z poziomu debug trafiały do pliku /var/log/debug.log i nie pojawiały się w żadnych innych plikach katalogu /var/log,

2. w głównym dzienniku /var/log/syslog były wszystkie informacje oprócz tych związanych z uwierzytelnianiem, drukowaniem i podsystemem cron,

3. wszystkie komunikaty zawierające wzorzec "solutions" trafiały do pliku /var/log/students.log,

4. komunikatu z poziomu emerg pochodzące od jądra i usług trafiały do wszystkich zalogowanych użytkowników oraz korzystając z xconsole można było śledzić informacje przekazywane przez usługi i związane z drukowaniem i pocztą począwszy od poziomu warning.

Konfiguracja elementów nie wymienionych wyżej powinna pozostać domyślna, czyli taka jaka jest w oryginalnym pliku konfiguracyjnym rsyslog.conf.
Użyj polecenia logger do sprawdzenia poprawności konfiguracji.
Sprawdź zawartość dzienników po uruchomieniu skryptu z części 1.

Zaliczenie 2019

Część 1

Księgarnia Radagast zorganizowana jest w ten sposób, że ma dwóch
menadżerów. Jeden z nich zajmuje się dostawami książek (dalej nazywany
dostawcą), a drugi sprzedażą w sklepie (dalej nazywany szefem sali) i
ma pod sobą pewną liczbę szeregowych sprzedawców. Zakładamy, że żaden
użytkownik systemu komputerowego księgarni nie może przyjmować więcej
niż jednej z powyższych roli.

Lista pracowników wraz z funkcjami znajduje się w pliku tekstowym,
gdzie każdy wiersz ma postać:

identyfikator_pracownika imię nazwisko funkcja

przy czym identyfikator_pracownika to liczba, zaś funkcja może
przybierać trzy postaci: dostawca, szef_sali, sprzedawca.

W celu zapewnienia sprawnej pracy księgarni chcesz udostępnić
pracownikom trzy katalogi: opisy_ksiazek, zadania, raporty oraz pewną
liczbę ich podkatalogów zgodnie z poniższym opisem.

Należy napisać skrypt, który stworzy odpowiednią strukturę katalogów,
założy pracownikom konta oraz skonfiguruje dostęp do katalogów w taki
sposób aby:

1. każdy sprzedawca miał prawo do odczytu plików, które powstaną w
katalogu opisy_ksiazek, ale nie miał żadnych innych praw, szef sali
miał prawo do odczytu i zmiany plików z tego katalogu, ale nie mógł
nic do niego dodać ani z niego usunąć, zaś dostawca miał prawo do
odczytu, zapisu oraz dodawania opisów;

2. każdy sprzedawca miał prawo do odczytu plików, które powstaną w
katalogu zadania/<identyfikator_pracownika>, gdzie
<identyfikator_pracownika> jest jego identyfikatorem, ale nie miał
żadnych praw do katalogów innych sprzedawców, szef sali miał
wszystkie prawa do katalogu zadania i jego podkatalogów, zaś
dostawca miał prawo odczytu wszystkich plików w podkatalogach
katalogu zadania, ale nie miał prawa żadnych z tych plików
modyfikować ani żadnych plików tamże dodawać czy usuwać;

3. każdy sprzedawca miał prawo do umieszczenia, modyfikowania i
usuwania raportu ze swojego zadania w katalogu
raporty/<identyfikator_pracownika>, gdzie
<identyfikator_pracownika> to jego identyfikator, ale nie miał
żadnych praw do katalogów innych sprzedawców, szef sali i dostawca
mieli prawo do odczytu wszystkich plików w katalogu raporty i jego
podkatalogach, ale nie mieli prawa żadnych z tych plików
modyfikować, ani żadnych plików tamże dodawać czy usuwać.

Dodatkowo skrypt ten ma za zadanie za pomocą polecenia su przetestować
powyżej opisaną funkcjonalność wykonując następujące kroki:

a) Jako dostawca ma stworzyć opisy 5 książek w katalogu opisy_ksiazek.
b) Jako szef sali ma odczytać za pomocą polecenia cat (z
przekierowaniem do /dev/null) stworzone opisy, a następnie do
każdego z opisów dodać na końcu wiersz ze słowami "na półce". Po
tej czynności ma spróbować dodać opis 6. książki oraz usunąć opisy
wszystkich książek.
c) Jako sprzedawca ma odczytać za pomocą polecenia cat (z
przekierowaniem do /dev/null) stworzone opisy, a następnie do opisu
5. spróbować dodać na końcu wiersz ze słowami "nie ma miejsca",
po czym spróbować usunąć ten opis oraz wreszcie spróbować dodać
opis 6. książki.
d) Jako szef sali ma stworzyć w każdym z katalogów
zadania/ 2 pliki z zadaniami.
e) Jako dostawca ma odczytać za pomocą polecenia cat (z
przekierowaniem do /dev/null) stworzone pliki z zadaniami, a
następnie do każdego z nich ma spróbować dodać na końcu wiersz ze
słowem "unieważnione", po czym spróbować je wszystkie usunąć.
f) Jako sprzedawca ma odczytać za pomocą polecenia cat (z
przekierowaniem do /dev/null) stworzone pliki z zadaniami w swoim
katalogu, a następnie do każdego z nich ma spróbować dodać na końcu
wiersz ze słowem "nie zrobię", po czym spróbować je wszystkie
usunąć. Następnie ma spróbować odczytać za pomocą polecenia cat (z
przekierowaniem do /dev/null) stworzone pliki z zadaniami w
katalogach innych sprzedawców. Wreszcie ma spróbować dodać do
wszystkich katalogów podkatalogu zadania dodać nowy plik.
g) Jako sprzedawca ma stworzyć w katalogu
raporty/, gdzie
to jego identyfikator, dwa pliki z
raportami o takich samych nazwach, jak pliki w katalogu
zadania/. Następnie ma do każdego z nich
dodać wiersz z napisem "nie zrobię:", a następnie całą dotychczasową
zawartość tego pliku. Następnie ma spróbować dodać napis "a kuku"
do plików z raportami innych sprzedawców.
h) Jako szef sali ma odczytać wszystkie pliki z podkatalogów katalogu
raporty. Następnie ma spróbować do każdego z tych plików dodać na
końcu wiersz o treści "nie zrobione". Wreszcie do każdego
podkatalogu tego katalogu dodać plik o nazwie zrobtowreszcie.
i) Jako dostawca ma odczytać wszystkie pliki z podkatalogów katalogu
raporty. Następnie ma spróbować do każdego z tych plików dodać na
końcu wiersz o treści "podgladam". Wreszcie do każdego
podkatalogu tego katalogu dodać plik o nazwie zrobtowreszcie.

Plik z listą pracowników ma być parametrem skryptu. Skrypt ma wykrywać
sytuację, gdy jest mniej niż dwóch sprzedawców i zgłaszać ją jako
błąd, a także gdy liczba dostawców w pliku jest różna od 1 oraz liczba
szefów sali w pliku jest różna od 1.

Część 2

Skonfiguruj rsyslog w taki sposób, aby:

1. wszystkie zapisy z poziomu info trafiały do pliku
/var/log/info.log i nie pojawiały się w żadnych innych plikach
katalogu /var/log,

2. zapisy z innych poziomów nie trafiały do pliku /var/log/info.log,

3. do głównego dziennika /var/log/syslog trafiały wszystkie informacje
oprócz tych związanych z jądrem systemu i uwierzytelnianiem,

4. do dziennika /var/log/auth.log trafiały wszystkie informacje
związane uwierzytelnianiem i żadne inne,

5. do pliku /var/log/kernlog trafiały wszystkie informacje związane z
jądrem systemu,

6. wszystkie komunikaty zawierające wzorzec "bookstore" w godzinach
8:00-16:00 trafiały do pliku /var/log/bookstore.log, a do pliku
/var/log/afterhours.log w pozostałych godzinach.

Konfiguracja praw dostępu do plików konfiguracyjnych powinna pozwalać
na odczyt i zapis do nich wyłącznie użytkownikowi root, zaś na dostęp
do katalogów z plikami raportów wszystkich użytkowników. Poza tym
konfiguracja powinna mieć charakter minimalny - tylko zawierać rzeczy
potrzebne do uzyskania opisanej funkcjonalności.

Użyj polecenia logger do sprawdzenia poprawności konfiguracji.
Sprawdź zawartość dzienników po uruchomieniu skryptu z części 1.

Archiwum z dwoma plikami zawierającymi rozwiązanie zadania wgraj przed swoimi zajęciami
jako rozwiązanie odpowiedniego zadania do Moodle.

Zaliczenie 2020

Część 1

Green Forest Bank zorganizowany jest w ten sposób, że ma dwa główne
działy: bankowość detaliczną (DBD) i biznesową (DBB). Jeden z nich
zajmuje się obsługą klientów indywidualnych, a drugi klientów
biznesowych. Każdy dział ma swojego dyrektora, a każdy dyrektor ma pod
sobą pewną liczbę szeregowych pracowników obsługi. Zakładamy, że żaden
użytkownik systemu komputerowego banku nie może przyjmować więcej niż
jednej z powyższych roli.

Lista pracowników wraz z funkcjami znajduje się w pliku tekstowym,
gdzie każdy wiersz ma postać:

identyfikator_pracownika imię nazwisko funkcja dział

przy czym identyfikator_pracownika to liczba, zaś funkcja może
przybierać dwie postaci: dyrektor, obsługa, z kolei dział to jedna z
wartości DBD lub DBB.

W celu zapewnienia sprawnej pracy banku należy udostępnić pracownikom
trzy katalogi: kredyty, lokaty, zadania oraz pewną liczbę ich
podkatalogów zgodnie z poniższym opisem.

Należy napisać skrypt, który stworzy odpowiednią strukturę katalogów,
założy pracownikom konta oraz skonfiguruje dostęp do katalogów w
następujący sposób.

1. Każdy pracownik obsługi ma mieć prawo do odczytu plików, które
powstaną w katalogach kredyty, lokaty, ale tylko pod warunkiem, że
pliki należą do grupy o nazwie takiej samej, jak jego dział oraz nie
ma mieć żadnych innych praw odczytu do plików w tych katalogach.

2. Każdy dyrektor ma mieć prawo do odczytu plików oraz podkatalogów we
wszystkich trzech katalogach.

3. Pracownik obsługi ma mieć prawo do tworzenia plików, w katalogach
kredyty i lokaty oraz zapisu do plików tamże, które sam
stworzył. Jednak nie ma prawa do zapisu do plików, których sam nie
stworzył w tych katalogach. Pliki tworzone przez pracownika obsługi
mają mieć grupę o nazwie takiej samej, jak jego dział.

4. Każdy pracownik obsługi ma mieć prawo do odczytu plików, które
powstaną w katalogu zadania/<identyfikator_pracownika>, gdzie
<identyfikator_pracownika> jest jego identyfikatorem, ale nie ma mieć
żadnych praw do katalogów odpowiadających w ten sposób innym
pracownikom ani też nie ma mieć prawa do tworzenia plików czy
katalogów w katalogu zadania.

5. Dyrektor ma mieć prawo do tworzenia i zapisu plików oraz katalogów,
w katalogu zadania, ale tylko pod warunkiem, że pliki oraz katalogi
należą do grupy o nazwie takiej samej, jak jego dział oraz nie ma mieć
żadnych innych praw zapisu, pliki tworzone przez dyrektora mają mieć
grupę o nazwie takiej samej, jak jego dział.

Dodatkowo skrypt ten ma za zadanie za pomocą polecenia su przetestować
powyżej opisaną funkcjonalność, wykonując następujące kroki:

a) Jako dyrektor DBD ma stworzyć 2 zadania w każdym katalogu
zadania/<identyfikator_pracownika> dla pracowników z działu DBD.
Zawartość pliku pierwszego to "kredyt", a drugiego "lokata".

b) Jako dyrektor DBB ma stworzyć 3 zadania w każdym katalogu
zadania/<identyfikator_pracownika> dla pracowników z działu DBB.
Zawartość pliku pierwszego i drugiego to "kredyt", a trzeciego
"lokata".

c) Jako dyrektor DBD ma spróbować przeczytać 1 zadanie w każdym
katalogu zadania/<identyfikator_pracownika> dla pracowników z
działu DBB.

d) Jako dyrektor DBB ma spróbować przeczytać 1 zadanie w każdym
katalogu zadania/<identyfikator_pracownika> dla pracowników z
działu DBD.

e) Dla każdego pracownika obsługi z działu DBD oraz DBB, ma on
odczytać jako ten pracownik za pomocą polecenia cat (z
przekierowaniem do /dev/null) stworzone opisy w katalogu
zadania/<identyfikator_tego_pracownika>, a następnie do każdego z
opisów spróbować dodać na końcu wiersz ze słowem "zrobione".

f) Dla każdego pracownika obsługi z działu DBD oraz DBB, ma on dla
każdego pliku z katalogu zadania/<identyfikator_tego_pracownika>
zawierającego napis "lokata" utworzyć nowy plik w katalogu lokaty z
napisem "zrobione". Podobnie dla każdego pliku z katalogu
zadania/<identyfikator_tego_pracownika> zawierającego napis
"kredyt" utworzyć nowy plik w katalogu kredyty z napisem "zrobione".

g) Dla każdego pracownika obsługi z działu DBD oraz DBB, ma on dla
każdego pliku z katalogów kredyty i zadania spróbować dodać na
końcu napis "zrobione".

Część 2

Skonfiguruj rsyslog w taki sposób, aby:

1. wszystkie zapisy z poziomu notice i niższych trafiały do pliku
/var/log/notice.log i nie pojawiały się w żadnych innych plikach
katalogu /var/log,

2. zapisy z innych poziomów nie trafiały do pliku /var/log/notice.log,

3. do głównego dziennika /var/log/syslog trafiały wszystkie informacje
oprócz tych związanych z jądrem systemu i pocztą,

4. do dziennika /var/log/mail.log trafiały wszystkie informacje
związane usługami pocztowymi i żadne inne,

5. do pliku /var/log/kernel.log trafiały informacje związane z
jądrem systemu o poziomie nie niższym niż warning,

6. do pliku /var/log/syslogkern.log trafiały informacje związane z
jądrem systemu o poziomie niższym niż warning,

7. wszystkie komunikaty zawierające wzorzec "business" w godzinach
8:00-16:00 trafiały do pliku /var/log/business_banking.log, a do pliku
/var/log/afterhours.log w pozostałych godzinach.

Konfiguracja praw dostępu do plików konfiguracyjnych powinna pozwalać
na odczyt i zapis do nich wyłącznie użytkownikowi root, zaś na dostęp
do katalogów z plikami raportów wszystkich użytkowników. Poza tym
konfiguracja powinna mieć charakter minimalny - tylko zawierać rzeczy
potrzebne do uzyskania opisanej funkcjonalności.

Użyj polecenia logger do sprawdzenia poprawności konfiguracji.
Sprawdź zawartość dzienników po uruchomieniu skryptu z części 1.

Archiwum z dwoma plikami zawierającymi rozwiązanie zadania wgraj przed
swoimi zajęciami jako rozwiązanie odpowiedniego zadania do Moodle.