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.