Przykładowe zadania – 2022/23

Eliminacje

Do dyspozycji macie dwa serwery – jeden publiczny (server1) i jeden prywatny (server2-internal). Są one połączone siecią wewnętrzną (interfejsy eth1 lub eth2). Adres publiczny server1 znajdziesz w panelu Beyond (informacje w przesłanej instrukcji).

  1. Skonfiguruj server1 tak, aby był on bramą domyślną dla server2-internal.
    Wynikiem zadania ma być możliwość uzyskania zasobów dostępnych w Internecie przez server2-internal. Postaraj się, aby nie ucierpiał na tym poziom zabezpieczeń na server1 (blokowanie portów przez zaporę), a także aby konfiguracja była permanentna – pozostawała taka sama po restarcie obu serwerów.

Jeżeli nie uda Wam się zrobić tego zadania, wszystkie kolejne wykonujcie na server1.

(5 pkt.)

  1. Na server1 udostępnij /srv/www/htdocs używając protokołu SFTP oraz FTPES zachowując następujące warunki dla FTPES: 
    • certyfikat self-signed ważny przez 3 lata
    • długość klucza 4096 bitów
    • wymuszenie szyfrowania
    • brak możliwości logowania oraz transferu plików bez szyfrowania

(10 pkt.)
Skonfiguruj dostęp do htdocs tylko dla użytkowników ‘web-developer’ oraz ‘tester’, z hasłem ‘P0tyc2k!2k22’ (obaj użytkownicy maja być w grupie głównej ‘dev-team’, utwórz ją).  (5 pkt.)
Skonfiguruj dostęp w taki sposób, aby pliki przez nich tworzone miały jako właściciela użytkownika, który dany plik stworzył, grupę właścicielską dev-team oraz uprawnienia u+rw, 6 dla grupy właścicielskiej oraz tylko odczyt dla pozostałych. Upewnij się że użytkownicy ‘wwwrun’ oraz ‘nginx’ mają pełen dostęp do plików (ale NIE dodawaj ich do grupy ‘dev-team’!!!). (10 pkt.)
Zablokuj dostęp użytkownikom anonimowym. (2 pkt.)
Udostępnij pliki z /srv/www/htdocs używając serwera nginx, upewnij się, że możliwy jest dostęp po HTTP – utwórz prostą stronę wyświetlającą nazwę twojego zespołu. (5 pkt.)

  1. Napisz skrypt (powłoki, ale Python też może być 😉😉), który na podstawie parametru -c {uint} utworzy podaną ilość użytkowników o nazwie ‘student-{nr}’, z losowym hasłem oraz przypisze ich do grupy dodatkowej ‘students’ (utwórz tą grupę). 

Skrypt powinien zapisywać efekty swojej pracy do pliku podanego w parametrze -f {string}.
Użyj utworzonego skryptu do wykreowania tylu użytkowników, ile wynosi twój numer zespołu.

Skrypt ten zapisz na server1 w katalogu domowym użytkownika root.

(10 pkt.)

  1. Zapisz każdorazowe logowanie użytkownika z grupy studenci do maszyny server1 w  jej dzienniku systemowym, z prefixem ‘Student access: ‘. (5 pkt.)
  1. Na serwerze server2-internal Utwórz plik docker-compose w wersji trzeciej, w którym zdefiniujesz podstawową infrastrukturę dla aplikacji internetowej, trzy osobne kontenery:
    • web serwer
    • PHP
    • MySQL

Infrastruktura powinna używać możliwie najnowszych wersji usług i udostępniać wynik funkcji phpinfo(); (15 pkt.)

Zapewnij komunikację pomiędzy kontenerami w odosobnionej sieci. (2 pkt.)
Skonfiguruj volumeny dockera lub mapowanie katalogu tak, aby dane zapisywane w bazie oraz pliki tworzone przez aplikację w jej katalogu pozostawały po wyłączeniu/restarcie infrastruktury (polecenie docker-compose down). (5 pkt.)

  1. Aplikację z zadania piątego udostępnij w internecie. Użyj serwera nginx na server1. Aplikację umieść pod inną nazwą domenową niż pliki z /srv/www/htdocs (domenę możecie wymyślić ale musi być teoretycznie “poprawnym” adresem hosta). (10 pkt.)
    Zablokuj dostęp do aplikacji użytkownikom łączącym z adresów IP pochodzących z terytorium Federacji Rosyjskiej. Zapewnij automatyczne aktualizowanie blokady o nowe adresy IP. (16 pkt.)
  1. Z wykonanych zadań utwórz krótki raport (/root/raport.txt), w którym zawrzesz najistotniejsze informacje o dokonanej konfiguracji. Bardzo dobrze udokumentowane zadanie będzie dodatkowo punktowane.

Finały – część Linux

Do dyspozycji macie dwa serwery – jeden publiczny (server1) i jeden prywatny (server2-internal). Są one połączone siecią wewnętrzną (interfejsy eth1 lub eth2). Adres publiczny server1 znajdziesz w panelu Beyond (informacje w przesłanej instrukcji).

  1. Skonfiguruj serwer 2 w taki sposób, aby był on zarządzany przez serwer 1 za pomocą SALT. High state powinien konfigurować następujące rzeczy:
  • instalacja pakietu apache2
  • Podstawienie pliku /srv/www/html/index.html z następującą treścią

Witamy w zespole <nr zespołu>

  1. Na serwerze 1 utwórz lokalne repozytorium z pakietem nano (pobierz go np. stąd – http://rpmfind.net/linux/opensuse/distribution/leap/15.4/repo/oss/x86_64/nano-5.9-bp154.1.53.x86_64.rpm). Repozytorium powinno być podpisane za pomocą wygenerowanego przez Was klucza GPG. Repozytorium to następnie udostępnij w wybrany przez siebie sposób i dodaj do repozytoriów zyppera na serwerze 2.
  2. Wykorzystując serwer apache2 zainstalowany w 1. zadaniu udostępnij witrynę w Internecie. Na publiczny adres serwera 2 wskazuje rekord DNS teamXX.oedu.pl (gdzie XX to numer Waszego zespołu np.team01.oedu.pl). To pozwoli Wam podpiąć pod serwer certyfikat SSL (w taki sposób, aby przeglądarka nie wyświetlała żadnego ostrzeżenia) – zróbcie to.
  1. Udostępnij dysk /dev/vdb z serwera 1 za pomocą iSCSI na serwer 2. Zamontuj ten dysk w /mnt poprzez fstab.
  2. Skonfiguruj monitoring obu serwerów tak, aby zbierane były przynajmniej następujące informacje:
  • użycie pamięci RAM
  • użycie dysku
  • użycie procesora

Narzędzie powinno oferować interfejs dostępny z poziomu przeglądarki (po adresie IP).

UWAGA: W tym zadaniu dodatkowo punktowana będzie czytelność zbieranych danych oraz forma ich prezentacji i dostępu do nich.