Czynności po instalacji - Server

Wprowadzenie teoretyczne do lekcji

1. Trochę o aktualizacji systemu.
Najważniejszą wręcz kwestią w większości systemów operacyjnych jest dokonywanie ich aktualizacji. Każdy się zgodzi, że aktualne programy i funkcje, to przede wszystkim bezpieczeństwo. Szczególnie, nabiera to znaczenia na serwerze, który zwykle wystawiony jest do Internetu i jest podatny na ataki. System Windows posiada swoje mechanizmy aktualizacji, które wymagają zwykle zaznaczenia odpowiedniej opcji tak aby system samodzielnie pobierał potrzebne mu aktualizacje. Jednak w przypadku programów zewnętrznych to sami musimy dbać o ich aktualność. Linux trochę rozwiązuje ten problem.
W każdym Linuksie znajduje się specjalny komponent nazywany systemem zarządzania pakietami. Dlaczego pakietami? Otóż oprócz paru wyjątków, Linux głównie się opiera na pakietach, w których znajdują się programy, elementy systemu itd. Taki pakiet to plik, którego rozszerzenie zależy od systemu zarządzania pakietami. Plik ten prócz skompilowanego programu, może też zawierać instrukcje do niego i kod źródłowy. Każdy pakiet zawiera również plik z metadanymi na temat danego programu. Wszystkie pakiety znajdują się w repozytoriach, czyli zbiorach pakietów. Takie repozytoria są zwykle prowadzone przez producentów danej dystrybucji. I tak Canonical – twórca Ubuntu, posiada własne repozytoria. Ubuntu jest systemem opartym na innej dystrybucji – Debianie i to właśnie z niego pochodzi system zarządzania pakietami, z jakiego korzysta Ubuntu. System ten nazywa się Advanced Packaging Tool, w skrócie APT. Za jego pomocą użytkownik może aktualizować, instalować i usuwać programy z systemu. APT wykorzystuje pliki o rozszerzeniu ".deb". Mówiąc już tak bardziej praktycznie to będziemy wykorzystywać polecenie apt. Można również używać starszej wersji tego polecenia, czyli apt-get, jednak ta nowsza w zupełności wystarczy. Polecenia te różnią się od siebie złożonością, apt łączy w sobie część z poleceniem apt-get i apt-cache.
APT jest narzędziem, które z wiadomych względów działa na prawach administratora. Tak więc jego wpisanie w konsolę, wyświetli komunikat, że nie mamy uprawnień. W przypadku systemu Windows, najprawdopodobniej wyświetliło by się okienko UAC z zapytaniem czy chcemy pozwolić temu programowi wprowadzać zmiany w systemie. Linux nie posiada takich mechanizmów. Musimy mu ręcznie przekazać, że chcemy wykonać dane polecenie na podwyższonych prawach. Służy do tego drugie już polecenie, czyli sudo. Stało się ono swoistym memem internetowym. Sudo to skrót od Super User Do, czyli "Super użytkownik robi". Należy je umieścić przed każdym poleceniem jakie chcemy wykonać na prawach roota. Kiedy to zrobimy system poprosi nas o hasło i jeżeli jesteśmy w odpowiedniej grupie – wykona polecenie.

I. Aktualizacja Ubuntu Server 20.04.

Pierwsze co zrobimy to zaktualizujemy nasze repozytoria, tak aby system miał listę najnowszego, dostępnego oprogramowania. Służy do tego parametr update. Ostatecznie cała składnia wygląda następująco:
$ sudo apt update
Po wpisaniu polecenia (żółty kolor) system poprosi nas o wpisanie hasła (żółty kolor), warto mieć na uwadze, że hasło również jest tutaj niewidoczne. Po uwierzytelnieniu się sudo zapamiętuje nas, więc przez jakiś czas nie będziemy musieli podawać hasła. Uruchomi się polecenie apt i zacznie pobierać potrzebne pakiety. Na koniec poinformuje nas, że "X" pakietów może zostać zaktualizowanych i proponuje nam wylistowanie sobie ich, podpowiadając nawet jakim poleceniem (zielony kolor).

Aktualizacja systemu

Polecenie to jednak nie zaktualizuje nam systemu. Do tego służy inny parametr, a mianowicie upgrade. On już dokona potrzebnych aktualizacji. Wpisujemy polecenie:
$ sudo apt upgrade
Po jego wprowadzeniu, apt wylistuje nam pakiety jakie chce zaktualizować, napisze ile ich jest, ile musi pobrać danych z Internetu i ile ostatecznie miejsca na dysku to zajmie. Później zostajemy zapytani o kontynuację, Y jest od Yes, a n jest od no. My oczywiście wpisujemy Y i naciskamy Enter.

Aktualizacja systemu

Podczas aktualizacji, apt najpierw pobierze potrzebne pakiety deb, później je rozpakuje, a na samym końcu zacznie aplikować zmiany do systemu operacyjnego. Kiedy wyświetli nam się znak zachęty, to będziemy mogli kontynuować pracę z systemem. W większości przypadków nie będzie wymagany restart. Jednak przy cięższych aktualizacjach, może się tak zdarzyć, że Linux będzie chciał dokonać rebootu (należy wpisać polecenie reboot). W naszym przypadku nie jest to konieczne.

II. Aktywacja konta root.

Aktywacja konta root

Z konta root w środowisku produkcyjnym nie należy korzystać. Jest ono używane tylko w razie cięższych awarii. My w ramach ćwiczeń sobie go oczywiście aktywujemy, korzystając z polecenia passwd. Domyślnie root nie ma hasła, przez co jest nieaktywny. Polecenie to pozwala na zmianę hasła danego użytkownika. W przypadku jego wpisania bez sudo, będziemy musieli podać stare hasło. Jeżeli wykonamy je na prawach administratora, to będzie można od razu wpisać nowe hasło. Działa to jednak tylko w przypadku zwykłych użytkowników. Zmiana hasła na koncie roota zawsze wymaga podwyższonych praw. Wpisujemy, więc:
$ sudo passwd root
I podajemy nowe hasło. Operację, tę musimy wykonać dwa razy, czyli raz wpisać hasło, zaakceptować Enterem, a potem jeszcze raz. Dopiero wtedy system je zmieni.

Logowanie na konto root

Teraz możemy sprawdzić, czy aktywacja się pomyślnie powiodła. Zalogujemy się na nasze konto root'a. Do tego celu możemy wykorzystać dwie metody. Pierwszą jest wpisanie polecenia exit. Wyloguje nas ono, dzięki czemu będziemy mogli zalogować się ponownie już z konta root'a. Inną opcją jest użycie polecenia login, które zaloguje nas do root'a, bez wcześniejszego wylogowywania. Musimy ją wykonać na prawach administratora, z podaniem konta docelowego. Cała składnia wygląda następująco:
$ sudo login root
System poprosi nas o hasło najpierw do konta bieżącego, potem do konta root, a po jego podaniu będziemy już zalogowani. Poznać to można po tym, że przed znakiem "@" (kolor zielony), jest napisane root, a także znak zachęty zmienił się z dolara "$" na hasha "#".

Wylogowanie z konta root

Wyjść z tego konta można za pomocą polecenia exit. Wpisanie go wyświetli wiadomość logout i przywróci nam poprzednie konto. Zmieni się również znak zachęty. Wpisujemy więc:
# exit
I już jesteśmy na poprzednim koncie.
Znak "#" w poleceniu będzie oznaczał w dalszej części tych materiałów, komendy wydawane z konta root'a.

III. Dodawanie nowego użytkownika.

Kolejną rzeczą jaką sobie zrobimy na naszym serwerze, będzie utworzenie nowego użytkownika. W każdym systemie serwerowym, zawsze jest większa ilość użytkowników. I nie mówię tutaj o Active Directory, a o usługach, które bardzo często wymagają usera, tylko dla siebie. W systemach linuksowych istnieje wiele poleceń na dodanie użytkownika. My użyjemy tego najnowszego jakim jest adduser.

Tworzenie użytkownika

Wykonujemy to na prawach administratora, podając do tego nazwę użytkownika, naszego usera. U nas będzie to admin01. Składnia będzie wyglądać następująco:
$ sudo adduser admin01
System rozpocznie dodawanie nowego użytkownika – stworzy go, stworzy też mu grupę oraz katalog domowy. Później poprosi nas o podanie hasła (kolor niebieski), a na końcu będzie chciał abyśmy uzupełnili parę danych. Oczywiście nie musimy tego robić, wystarczy to przeklikać Enterem. Na koniec spyta się czy informacje są poprawne, potwierdzamy odpowiednią literką i nasz użytkownik zostanie utworzony.

Logowanie nowym użytkownikiem

Teraz możemy sprawdzić działanie naszego konta. Do tego wykorzystamy inne polecenie niż ostatnim razem, a mianowicie su. Polecenie to pozwala na wykonywanie innych poleceń jako dany użytkownik. Ale przy nie podawaniu żadnych dodatkowych poleceń, pozwala się zalogować do shella jako dany user. Wpisujemy, więc:
$ su admin01
Następnie hasło i od tego momentu jesteśmy zalogowani jako admin01.

Poziom uprawnień użytkownika

Sprawdźmy sobie poziom uprawnień naszego użytkownika. Spróbujemy z jego poziomu zmienić hasło do konta root. Używamy, więc wcześniej omawianego polecenia:
$ sudo passwd root
Wpisujemy hasło i… klops. Nie pozwala nam. Stwierdza, że nie jesteśmy w odpowiedniej grupie. Jednak my to zmienimy. Przede wszystkim należy wyjść z konta używając polecenia exit.

IV. Dodawanie użytkownika do grupy sudo.

Dodamy teraz naszego użytkownika do grupy sudo, gdyż możliwość używania polecenia sudo, determinuje przynależność do tej grupy. Systemy z rodziny Linux przechowują informacje o grupach w pliku group, który znajduje się w katalogu etc (przechowuje on różne pliki konfiguracyjne), w głównym katalogu systemowym. Do edycji tego pliku, będziemy wykorzystywać edytor tekstowy nano. Jednak jak ktoś chce to może skorzystać z innego np. vim lub mcedit. Nano jest według mnie najprostszym edytorem i to z niego będziemy korzystać.

Edycja pliku /etc/group

Aby edytować plik systemowy, będziemy potrzebowali praw administratora. Tak więc wpisujemy:
$ sudo nano /etc/group
Uruchomi nam się prosty program nazywany GNU nano. Kolorem niebieskim na screenie zaznaczyłem, obszar programu, który informuje nas o obecnie otwartym pliku. Niżej mamy pole, w którym mieści się zawartość pliku tekstowego. Na samym dole na pomarańczowo zaznaczyłem, najważniejsze polecenia, jakie możemy wykonać w tym edytorze. Znak "^", który się tam znajduje oznacza klawisz Control. Tak, więc aby wyjść w programu naciskamy Ctrl+X. Zapis pliku jest ukryty pod pozycją Write Out i obsługuje się go kombinacją Ctrl+O. Program sam nas informuje w dolnym polu co teraz robi i co jako użytkownik możemy z tym zrobić. W przypadku zapisywania pliku poinformuje nas, że zapisuje plik i jaką nazwę chcemy mu nadać. Na zielono zaznaczyłem pozycję, która nas interesuje. To tutaj po przecinku dopisujemy naszego użytkownika.

Dodawanie użytkownika do grupy

Po dopisaniu naszego użytkownika ostatecznie wszystko powinno wyglądać tak jak na powyższym zdjęciu. Na niebiesko zaznaczyłem polecenie, którym będziemy zapisywać plik. Naciskamy więc Ctrl+O.

Zapisywanie pliku

Program nas poinformuje, że chce zapisać plik group do katalogu etc. Oczywiście zgadzamy się na to naciskając klawisz Enter.

Zapisywanie pliku

Na sam koniec, zostaniemy poinformowani, że program zapisał określoną ilość linii. W tym przypadku jest to 58. Oznacza to, że operacja zapisu powiodła się pomyślnie. Jeżeli wystąpiłyby jakieś problemy z zapisem to edytor nano poinformował by nas o tym.

Testowanie uprawnień konta

Następnie możemy sprawdzić czy operacja się udała. Logujemy się na nasze drugie konto i dokonujemy zmiany hasła. Jak widać tym razem system pozwala nam to zrobić. Oznacza to, że użytkownik ma już uprawnienia sudo. Jeżeli system dalej nie pozwalałby wykonać polecenia to należy sprawdzić jeszcze raz plik group.

V. Konfiguracja adresacji na serwerze.

W tym punkcie skonfigurujemy sobie adresację IP na naszym serwerze. Ubuntu 20.04 wprowadza na stałe taką nowość, stworzoną przez Canonical, jaką jest program Netplan. Można go lubić, a można też nienawidzić. Nie zmienia to faktu, że w Ubuntu 20.04 jest to już standard. W przypadku 18.04 Netplan działał korzystając z innych usług tego typu jak NetworkManager czy systemd.network. Teraz już tak nie jest i netplan działa samemu. Tak, więc większość poleceń znanych ze starszych wersji Ubuntu jak ifconfig itd. Już nie działa. Netplan wykorzystuje język formalny, który nazywa się YAML. Jest o skrót od YAML Ain’t Markup Language. I tak jest to akronim rekurencyjny. Język ten jest jednym z najprostszych bo taki jest też jego cel. Nie posiada żadnej składni ani nic podobnego. To dany program definiuje sobie składnię. YAML definiuje jedynie takie elementy jak listy czy słowniki oraz jak oddzielać od siebie dane. I to tyle. Pisząc w tym języku należy odpowiednio uważać, aby nie dać gdzieś za dużo spacji itd. Tak w YAML wcięcia robi się spacją. Nie tabulatorem. Zanim jednak przejdziemy do konfiguracji networkingu w Ubuntu, powiemy sobie jak wyświetlać dane na temat interfejsów w konsoli. Dawniej służyło do tego polecenie ifconfig wchodzące w skład NetworkManager. Obecnie w systemie Ubuntu z racji wprowadzenia Netplan na stałe korzysta się z polecenia ip, które wchodzi w skład pakietu iproute2, który zawiera narzędzia do konfiguracji networkingu, interfejsów itd.

Interfejsy sieciowe

Aby, więc wylistować wszystkie interfejsy wpisujemy:
$ ip a
Dostaniemy dużą garść informacji na temat naszych interfejsów. Najważniejsze pola zaznaczyłem kolorami. Jasnym zielonym naznaczone są nazwy interfejsów fizycznych. Widać tutaj interfejs enp0s3 oraz enp0s8. Interfejs lo to pętla zwrotna i tym się nie przejmujemy. Na ciemno zielono zaznaczyłem status działania karty sieciowej. State UP oznacza, że karta działa. Gdyby nie działała to napisane byłoby State DOWN. Na fioletowo oznaczyłem adres MAC naszej karty sieciowej. Na niebiesko widać adres IP karty wraz z maską. Zaś na pomarańczowo adres rozgłoszeniowy. Te elementy są według mnie najistotniejszymi informacjami, które ukazuje nam to polecenie.

Wyłączenie karty sieciowej

Oczywiście w każdej chwili nasz interfejs możemy wyłączyć odpowiednim poleceniem:
$ sudo ip l set dev enp0s8 down
I już widzimy, że nasza karta sieciowa enp0s8 ma status state DOWN.

Włączenie karty sieciowej

Oczywiście nasz interfejs możemy włączyć niemal idnetycznych poleceniem, używając zamiast down opcji up:
$ sudo ip l set dev enp0s8 up
I już widzimy, że nasza karta sieciowa enp0s8 ma status state UP.

Ręczna konfiguracja karty sieciowej

"Poza kamerami" usunąłem statyczną adresację IP i przywróciłem DHCP aby pokazać w jaki sposób można dodawać adresy IP z konsoli. Służy do tego polecenie ip z parametrem a add. Pokażę gotowe polecenie dla karty enp0s8 (tej usunąłem adresację):
$ sudo ip a add 192.168.10.11/24 dev enp0s8
Najpierw piszemy ip a add, następnie wybrany adres IP ze skróconą maską. Później określamy nasz interfejs za pomocą parametru dev i gotowe. Celowo ustawiłem 11 na ostatnim bajcie żeby była widoczna różnica.

Wykorzystanie polecenia ping

Możemy również sprawdzić pingi do naszej karty sieciowej czy działają:
$ ping 192.168.10.11
Jak widać wszystko właściwie funkcjonuje.

Plik z rozszerzeniem *.yaml

Niestety, albo stety, wadą tego rozwiązania jest to, że nie jest ono trwałe. Po restarcie serwera lub wyłaczeniu karty, interfejs wróci na poprzednią adresację. Ten sposób jest dobry, ale jedynie do testowania doraźnych rozwiązań. Gdyby coś poszło nie tak, to istnieje szybka droga aby powrócić do poprzednich ustawień. Aby zapisać zmiany na stałe to należy edytować odpowiedni plik, który zawiera konfigurację sieciową. Dawniej był to plik interfaces, znajdujący się w katalogu etc. Netplan jednak wykorzystuje plik o rozszerzeniu yaml, który znajduje się w katalogu /etc/netplan. Plik ten dość często zmienia nazwę, więc warto najpierw sprawdzić jak on się nazywa. Wystarczy, więc wylistować katalog netplan, poleceniem ls:
$ ls /etc/netplan/
Teraz już wiemy, że ten plik nazywa się 00-installer-config.yaml.

Konfiguracja pliku w Netplanie

Teraz wystarczy go wyedytować korzystając z wybranego edytora np. nano, wpisując:
$ sudo nano /etc/netplan/00-installer-config.yaml
Ukazuje się nam w miarę czytelny plik, zawierający wszelkie potrzebne informacje na temat konfiguracji interfejsów sieciowych. Nas będzie interesować enp0s8. Jak widać aktywowany jest tam DHCP, a "zahaszowane" są parametry, które podawaliśmy podczas instalacji systemu. My sobie to teraz oczywiście zmienimy.

Konfiguracja pliku w Netplanie

Na początku kasujemy klamerki z pozycji addresses. Dajemy Enter i w nowej linii spacją ustawiamy kursor pod literką "a". Następnie dajemy myślnik "-" spację i piszemy nasz docelowy adres IP ze skróconą maską. Następnie "haszujemy" lub kasujemy całkowicie pozycję dhcp4: true, zostawiamy nameservers, ponieważ nam się przyda później pod adresy DNS. Następnie robimy wcięcia tak jak na screenie i piszemy addresses: []. Pod tym search: [], możemy zostawić optional: true i tak utworzony plik możemy zapisać.

UWAGA! JAK JUŻ WSPOMINAŁEM YAML JEST WYCZULONY NA WSZELKIE WCIĘCIA I ZMIANY. NALEŻY PAMIĘTAĆ O TYM ABY WCIĘCIA ROBIĆ SPACJĄ, A NIE TABULATOREM.

Sprawdzanie konfiguracji Netplanu

Dzięki odpowiednim poleceniom Netplan sprawdzi nam poprawność zmodyfikowanego pliku:
$ sudo netplan try
Spyta się czy chcemy go zatwierdzić, a my oczywiście zgadzamy się na to i dla pewności możemy jeszcze użyć polecenia:
$ sudo netplan apply
Od tego momentu mamy już właściwą adresację, co widać po wpisaniu polecenia:
$ ip a

VI. Zmiana nazwy serwera.

Sprawdzanie nazwy serwera

Aby sprawdzić jak nazywa się nasz serwer, wystarczy spojrzeć w konsoli jaka nazwa figuruje po znaku "@". Niemniej jednak można użyć też polecenia hostname lub z nazwą domenową hostname -f:
$ hostname
$ hostname -f
U nas nie ma wprowadzonej nazwy domeny, więc oba polecenia zwracają to samo.

Zmiana nazwy serwera

Aby zmienić nazwę serwera należy edytować dwa pliki i tam dokonać zmian. Pierwszym z nich jest hostname, a drugi to hosts. Obydwa znajdują się w katalogu etc. Najpierw dokonamy zmiany w tym pierwszym. Wpisujemy więc:
$ sudo nano /etc/hostname
I wprowadzamy sobie roboczą nazwę ubserver00. Oczywiście później będziemy używać poprzedniej nazwy serwera.

Zmiana nazwy serwera

Następnie edytujemy drugi plik poleceniem:
$ sudo nano /etc/hosts
I także zmieniamy nazwę na ubserver00 dodając nazwę domeny egzamin.local. Ostatecznie powinno to wyglądać tak jak na screenie.

Zmieniona nazwa serwera

Aby nasze zmiany zostały wprowadzone to musimy zrestartować system polecneiem:
$ reboot
Po restarcie wszystko powinno być OK. Użyjemy ponownie znanych już nam poleceń oraz dodamy trzecie:
$ hostname
$ hostname -f
$ hostname -d
I widzimy, że po wpisaniu tego drugiego i trzeciego polecenia, nasza nazwa zawiera już domenę.