Wstęp
Opis jest odzwierciedleniem realnie, wielokrotnie przeprowadzonych instalacji. Nie jest opisem, jakich można wiele znaleźć w wyszukiwarkach, robionym na zasadzie Ctrl+C, Ctrl+V. Każdy etap i każda procedura lub komenda zostały wielokroć sprawdzone osobiście przez autora.
Rozwiązania przedstawione w odniesieniu do Raspberry Pi bazują na Ubuntu Server LTS, a nie na Raspberry Pi OS. Podobieństwo tych platform jest duże lecz do poważnych rozwiązań zdecydowanie lepszym jest jednak prawdziwa wersja serwerowa z długim wsparciem. Ponadto Ubuntu Server jest w stabilnej wersji 64 bitowej, Raspberry Pi OS jeszcze nie.
Niezbędne
Raspberry Pi 4B 4GB lub 8GB RAM, można użyć np. Raspbery Pi 3B+ z 1 GB RAM, choć responsywność tego ostatniego serwera, ze względu na znaczące różnice sprzętowe pomiędzy wersją 3 i 4, będzie czasem nużąca. Aby móc zdalnie, bez ponieczności podłączania monitora czy klawiatury do Raspberry Pi, proponuję zainstalowanie klienta, m.in. ssh jakim jest program PuTTy. Wszelkie przykłady i rozwiązania dotyczące połączeń ssh w tym opisie zostały oparte na tym oprogramowaniu.
Spod tego adresu należy pobrać plik obrazu systemu Ubuntu Server dla komputerów Raspberry Pi. Jest to obraz systemu bez zbędnych dodatków, jak np. pulpit. Proponuję wybrać wersję LTS dla procesorów 64 bitowych jeżeli mamy 4 lub 8 GB pamięci RAM lub wersję LTS 32 bitową dla mniejszej ilości pamięci RAM.
Przygotowanie karty mikroSD
Na karcie mikroSD za pomocą otwarto źródłowego narzędzia Balena Ether – odpowiedniego dla systemu na naszym komputerze zapisujemy pobrany obraz. Karta może mieć pojemność 16 lub 32 GB. Można tu użyć dedykowanego programu Raspberry Pi Imager lecz wg mnie balenaEther jest zdecydowanie szybsza.

Najpierw wybieramy obraz jaki chcemy nagrać.

Po wybraniu pliku obrazu do nagrania wskazujemy, gdzie ma być on nagrany.

Na pierwszym etapie balenaEtcher rozpakowuje plik z obrazem.

Następnie zapisuje obraz na wskazanym dysku (karcie pamięci).

Po zapisaniu następuje weryfikacja poprawności zapisu.

Pierwsze uruchomienie
Wkładamy kartę do Raspberry Pi i podłączamy zasilacz. Po ok. minucie serwer podłączony kablem ethernetowym do routera (zainstalowany system ma włączonego klienta DHCP i będzie się starał pobrać adres z serwera DHCP). Poprzez połączenie się z routerem uzyskamy adres na jakim pracuje nasz serwer. Wersja Ubuntu Server 20.04 LTS ma od razu zainstalowany i uruchomiony serwer ssh.
Pierwsze połączenie po ssh
Z pomocą PuTTy łączymy się z serwerem.
W Host Name (or IP address) – wpisujemy odczytany z routera adres naszego serwera,
Port pozostaje oczywiście 22 i zaznaczamy SSH, klikamy Open.
Ukazuje się okienko przed połączeniem w którym wybieramy Yes.

Kolejne okienko jest już tym właściwym, w którym wpisujemy nazwę użytkownika czyli ubuntu i enter

oraz hasło ubuntu. Użytkownik ubuntu to domyślny i jedyny, poza użytkownikiem root. Dlatego, zaraz po zalogowaniu system wymusza zmianę hasła z domyślnego.

Po dokonaniu zmiany hasła domyślnego następuje automatyczne wylogowanie użytkownika i tym samym zamknięcie okna konsoli ssh.
Zmiana użytkownika
Pierwszą rzeczą jaką powinniśmy zrobić to dodanie nowego użytkownika i usunięcie użytkownika ubuntu. Działanie to ma na celu uzyskanie większego bezpieczeństwa serwera.
Wpisujemy:
sudo adduser <user_name>
Oczywiście <user_name>
zastępujemy nazwą nowego użytkownika; zostaniemy dwukrotnie zapytani o hasło dla nowego użytkownika. W przypadku pomyłki nowy użytkownik nie zostanie stworzony. Dodatkowe pytania o adres itp. można pominąć wciskając enter.
Teraz musimy nowego użytkownika dodać do grupy suoders:
sudo usermod -G sudo <user_name>
Spowoduje to, że będzie mógł on nabierać praw roota.
UWAGA: bez powyższego kroku nie można przejść do następnych. Pominięcie go spowoduje, że po usunięciu domyślnego użytkownika ubuntu, stracimy możliwość wykonywania działań jako użytkownik root.
Uaktualnienie Ubuntu Server
Następnie wylogowujemy się z konta użytkownika pi i logujemy się już jako nowo stworzony użytkownik. Sprawdzamy czy na pewno działa przypisanie do grupy suoders wydając polecenie:
sudo apt update && sudo apt upgrade -y
Nastąpi uaktualnienie zainstalowanego systemu serwera o najnowsze pakiety. Może to potrwać kilka minut do nawet półgodziny – zależne od szybkości naszego serwera i ilości aktualizowanych pakietów. Zostaje nam jeszcze zrestartowanie systemu, bo niekiedy są aktualizowane te jego elementy, które tego wymagają. Robimy:
sudo reboot
System wstaje po około pół minucie i jest już zaktualizowany. W ten sam sposób winniśmy robić aktualizację regularnie. Systemy oparte na Linuksie, jak Ubuntu, korzystają z repozytoriów, które serwują zawsze najnowsze wersje zainstalowanego poleceniem apt, oprogramowania.
Usunięcie domyślnego użytkownika
Pewni, że nasz nowy użytkownik należy do grupy souders możemy śmiało usunąć domyślnego użytkownika, wraz z jego katalogiem domowym. Robimy więc tak:
sudo deluser --remove-home ubuntu
System zamelduje o wykonanym zadaniu.
Logowanie za pomocą klucza RSA
Dla wygody, możemy uprości sobie logowanie się za pomocą ssh do systemu. Pomocny tu będzie kolejny raz program – kombajn PuTTy. Posiada on w swoim składzie PuTTy Key Generator .
Zaznaczamy RSA oraz wpisujemy 4096 jako długość klucza, po czym klikamy Generate i poruszamy myszką w polu generatora, aby dostarczyć losowych danych do tworzenia klucza. Po zakończeniu powinniśmy zapisać klucz prywatny w szczególnym miejscu i pod oczywistą nazwą.
Zapisany klucz wczytujemy Load , może to chwilkę potrwać, a szereg znaków zaczynających się od sha-rsa, a kończących się datą jako szereg cyfr kopiujemy do schowka.
w otwartym w dalszym ciągu okienku ssh wpisujemy:
sudo mkdir /home/<user_name>/.ssh
(tak <user_name> to nazwa naszego nowego użytkownika) tworzymy w ten sposób katalog .ssh (kropka na końcu oznacza katalog lub plik ukryty)
Kolejno wpisujemy :
sudo nano /home/<user_name>/.ssh/authorized_keys
Nano to standardowy edytor. Gdy pojawi się czarny ekran w okienku edytora, winniśmy skopiowany klucz przenieść właśnie tam. Jak? W trochę zapomniany sposób. Klikamy na środek okienka edytora i wciskamy Shift+Ins lub drugi sposób, na środku okienka edytora klikamy prawym klawiszem myszki. Mamy wklejony szereg znaków. Wciskamy Ctrl+x, mamy zapytanie na które w odpowiedzi wciskamy y i enter. Mamy zmieniony plik authorized_keys. On pozwoli nam na logowanie się bez hasła. Ale …
W PuTTy (Configuration) musimy utworzyć nowe połączenie:
Host Name (IP Adrress) wpisujemy nazwę tego połączenia, może być np. www a w okienku Category -> Connection -> SSH -> Auth wybieramy Browse ... plik, który uprzednio utworzyliśmy i zapisaliśmy w odpowiednim miejscu. Chwilę potrwa jak wczyta się plik, a my przechodzimy ponownie w górę drzewa, aby kliknąć Session i następnie Save. Teraz ilekroć klikniemy w oknie Saved Sessions i Open zostaniemy przeniesieni do okienka ssh, gdzie będzie trzeba wpisać tylko nazwę użytkownika.
Serwer sprawdzi i porówna dwa klucze, ten podany przez PuTTy w trakcie łącznia i ten zapisany przez nas w pliku authorized_keys, w przypadku zgodności zestawi połączenie bez pytania o hasło.
Zmiana nazwy naszego serwera
Zmiany nazwy można dokonać na różne sposoby. Działającym zawsze jest sposób opisany poniżej.
Sprawdźmy czy zainstalowany jest:
systemb -version
W przypadku jego braku instalujemy go.
sudo apt install systemb
Teraz zmieniamy nazwę naszego serwera.
hostnamectl set-hostname <nowa_nazwa>
gdzie oczywiście <nowa_nazwa> zostaje zastąpiona wybraną przez nas nazwą naszego serwera.
Drobna uwaga
Proszę zwrócić uwagę, iż w przypadku nowo utworzonego użytkownika, za pierwszym razem i co jakiś czas, system pyta się o hasło użytkownika przy używaniu poleceń sudo. Przy standardowym użytkowniku system nie robi tego nigdy, gdyż wpis w:
/etc/suoders.d/90-cloud-init-users
nie zawiera wpisu o nowym użytkowniku, a jedynie o użytkowniku ubuntu w postaci
ubuntu ALL=(ALL) NOPASSWD: ALL
Taka polityka, wykonywania poleceń z uprawnieniami roota bez podawania hasła, źle wpływa na bezpieczeństwo serwera.
Podsumowanie
Odpowiednie przygotowanie serwera do pracy, zadbanie o podstawy bezpieczeństwa i higieny informatycznej bardzo się opłaca. Backup jest tą rzeczą, która bardzo pomaga, ale jednocześnie czymś z czego bardzo nie chcielibyśmy korzystać. Dlatego zadbanie o ww drobne szczegóły jest tak ważne. To by było na tyle w tym opisie. Zapraszam do innych.