Ubuntu szerver alaptelepítés (Fossa)
Ebben a leírásban Ubuntu Focal Fossa (20.04 LTS) szervergép grafikus felület és specifikus szolgáltatások nélküli alaptelepítését végezzük el. Az eljárás "bármilyen" szerverre alkalmazható. Ez a leírás elsősorban technikai (checklist jellegű), az elméleti megfontolásokat az Ubuntu szerver házirend tartalmazza.
Tartalomjegyzék
- 1 Előfeltételek
- 2 Telepítési beállítások
- 3 A frissen telepített rendszer beállításai
- 3.1 Alap segédeszközök
- 3.2 Konzol szövegszerkesztő beállítása
- 3.3 Hostnév és szerepnév beállítása
- 3.4 A home könyvtárak átköltöztetése
- 3.5 A sysadmin felhasználó beállításainak módosítása
- 3.6 Az SSH démon beállítása
- 3.7 Időzóna beállítása, időszinkron biztosítása
- 3.8 Technikai levelezés beállítása
- 3.9 Források és frissítések beállítása
- 4 Naplózás és napi jelentés beállítása
- 5 Csomagszűrő tűzfal beállítása
- 6 Monitorozás
- 7 Watchdog
- 8 Egyéb eszközök
- 9 Irodalom
Előfeltételek
- Működő hardver, konzol hozzáférés, tudjon CD-ről bootolni és lásson ki (védett, NAT-olt) hálózaton keresztül az Internetre. DHCP használata ajánlatos.
- Megfelelő architektúrájú Ubuntu Server boot DVD - 64 bites (Intel) CPU és legalább 2 GB RAM esetén a 64 bites lemezképet használjuk!
Telepítési beállítások
Ez a szakasz az Ubuntu Live Server 20.04 telepítő DVD-ről bootolva a telepített rendszer első tényleges indulásáig tart, a védett hálózatra(!) csatlakozó telepítendő gép számára működő Internet kapcsolatot igényel.
Konzolról:
- Magyar nyelvű telepítés
- Magyar keyboard layout és variant
- Hálózat beállítása - ha automatikusan nem ismerné fel, IPv4 lehetőleg DHCP-vel
- HTTP proxy általában nem szükséges
- A felajánlott Ubuntu (apt) tükörszerver általában megfelelő
- Lemezek particionálása (custom storage layout) - itt mindenféle hitvita lehetséges, de a biztonsági minimum a boot, root, tmp, var, usr elkülönítése, hogy ezeket más-más paraméterekkel lehessen mountolni. Hagyományos merevlemezt csak redundánsan legalább software RAID-1 vagy RAID-5-ben üzemeltessünk (kivéve csak backup tárterület), SSD esetén is hajlanék a RAID-1 használatára (bár ezen vitatkoznak).
Particionálási séma két, software RAID-1-ben üzemelő SSD vagy TB nagyságrendű hagyományos merevlemez esetén:
sda sdb md megjegyzés sda1 1G RAID boot sdb1 1G RAID boot md0 RAID-1 ext4 /boot boot partíció sda2 2-4-8 GB RAID sdb2 2-4-8 GB RAID md1 RAID-1 [swap] cserehely (0,5x - 1x - 2x RAM) sda3 2-4-8 GB RAID sdb2 2-4-8 GB RAID md2 RAID-1 ext4 /tmp tmp partíció, akkor érdemes nagyobb mértűre venni, ha backup-restore jellegű műveletek várhatóak. sda5 2-4-8 GB RAID sdb5 2-4-8 GB RAID md3 RAID-1 ext4 / root partíció, 2G is elég lehet sda6 4-8 GB RAID sdb6 4-8 GB RAID md4 RAID-1 ext4 /usr usr partíció, 4G általában elég sda7 1-2 GB RAID sdb7 1-2 GB RAID md5 RAID-1 ext4 /srv/chroot opcionális partíció, pl. jail-ben üzemeltetett bind (cache-only DNS szerver) számára. sda8 X GB RAID sdb8 X GB RAID md6 RAID-1 ext4 /var
(1% fenntartott blokk elegendő)var partíció, a maradék tárterület (adatbázis, www, Samba, backup, etc. számára). Opcionálisan tovább osztható. Ha a rendszerlemez kicsi (pl. single SSD vagy SSD/RAID-1), a "nagy" tárterületet pl. az alábbiak szerint definiálhatjuk:
sdc sdd md megjegyzés sdc1 X GB RAID sdd1 X GB RAID mdX RAID-1 ext4 vagy lvm2-ext4 /mnt/storage
(1% fenntartott blokk elegendő)szolgáltatási tárterület (www, Samba, backup, stb. számára). Opcionálisan tovább osztható. TODO!
- Az első (UID = 1001, sudo-képes) felhasználó neve legyen egységes, pl. név: Administrator, login: sysadmin (az admin név a telepítő futásakor foglalt), a jelszó egyelőre lehet triviális pl. adminpass.
- Kérjük az SSH szerver telepítését.
- Szoftverválasztás és telepítés (snap) - a telepíthető szoftverek közül egyelőre egyik sem kell, mert mi okosabbak vagyunk, mint egy ötödikes... :).
Ezután megtörténik a telepítés, majd a DVD eltávolítása után a telepített rendszer első indítása.
A frissen telepített rendszer beállításai
A telepítést kényelmesebb SSH-n bejelentkezve folytatni. Mivel telepítéskor gyakorlatilag állandóan rendszergazdaként dolgozunk, érdemes a sudo -i paranccsal permanens root konzolra váltani, így nem szükséges minden parancs előtt a sudo begépelése.
Alap segédeszközök
A felső sor mindenképpen szükséges, az alsó sorban foglalt eszközöket részemről ugyancsak alapvetőeknek gondolom.
apt install pwgen unzip zip apt install links mc tofrodos # + néhány függőségKonzol szövegszerkesztő beállítása
Bár az alaptelepített nano teljesen használható, részemről az mcedit-et preferálom - opcionálisan legyen ez az alapértelmezett editor; ugyanitt állítsuk be, hogy az alapértelmezett (pl. az ls kimenetében megjelenő) dátum formátuma a locale szerinti helyett parse-olhatóbb legyen:
-rw-r--r-- root root /etc/profile.d/custom.sh # Custom editor. export EDITOR="/usr/bin/mcedit" # More parseable ls -la format. export TIME_STYLE="long-iso"A Midnight Commanderben hasznos beállítani (mc, F9, Beállítások, Alapbeállítások) a saját szövegszerkesztő használatát (F9, Beállítások, Saját szövegszerkesztő, OK). Az mcedit-ben (F9, Beállítások, Általános) az új sorban automatikus behúzást (ha be lenne kapcsolva) és a látható tabulátorokat(!) kikapcsolni, végül az mc beállításokat elmenteni (F9, Beállítások, Beállítások mentése).
Hostnév és szerepnév beállítása
Ellenőrizzük, és szükség esetén változtassuk meg a gép hostnevét:
hostnamectl | grep -i static # lekérdezés hostnamectl set-hostname new_hostname # változtatásA domain névvel kiegészített hostnevet (fully qualified hostname) a /etc/hosts állomány szerkesztésével állíthatjuk be (a sorrend fontos!):
-rw-r--r-- root root /etc/hosts 127.0.0.1 localhost 127.0.1.1 new_hostname.domain.name new_hostname [...]Ellenőrzés:
hostname # new_hostname hostname --fqdn # new_hostname.domain.nameOpcionálisan, amennyiben a gép hostname által mutatott elnevezése mellett létezik annak valamilyen szerepneve, és ezt szeretnénk a konzol promptban megjeleníteni (pl. mert jellemzőbb, mint az esetleg technikai hostnév), akkor az alábbiak szerint azonosan szerkesszük meg
- a sysadmin felhasználó,
- a root felhasználó,
- illetve a később létrehozandó felhasználók számára elkészített template .bashrc állományokat:
-rw-r--r-- sysadmin sysadmin /home/sysadmin/.bashrc -rw-r--r-- root root /root/.bashrc -rw-r--r-- root root /etc/skel/.bashrc [...] if [ "$color_prompt" = yes ]; then [...] fi unset color_prompt force_color_prompt # Include the server role string. if [ -n "$ROLENAME" ]; then PS1=${PS1/@\\h/@\\h ($ROLENAME)} fi [...]Magát a szerepnevet pl. a korábban is szerkesztett /etc/profile.d/custom.sh állományban adhatjuk meg:
-rw-r--r-- root root /etc/profile.d/custom.sh [...] # Server role string. export ROLENAME="testing"A következő bejelentkezéstől kezdve a konzol promptban a szerepnév is megjelenik, pl. így:
root@x206-kdzwy54 (testing):~#A home könyvtárak átköltöztetése
Ezeket a kis méretű root partícióról permanensen a /var-ba helyezzük át, és symlinkeljük:
mv /home /var/home; ln -s /var/home /homeA sysadmin felhasználó beállításainak módosítása
A sysadmin alapvetően nem interaktív felhasználó, hanem egy indirekt belépés a root jogosultság eléréséhez, így nem hagyjuk, hogy a shelljére vonatkozó beállításokat megváltoztassa:
export user='sysadmin' chmod 440 /home/$user/.bashrc; chattr +i /home/$user/.bashrc chmod 440 /home/$user/.bash_logout; chattr +i /home/$user/.bash_logout chmod 440 /home/$user/.profile; chattr +i /home/$user/.profileEzután készítsük elő a sysadmin számára a nyilvános kulcsú távoli bejelentkezéshez szükséges állományokat:
export user='sysadmin' mkdir -m 500 /home/$user/.ssh chown $user:$user /home/$user/.ssh touch /home/$user/.ssh/authorized_keys2 chown $user:$user /home/$user/.ssh/authorized_keys2 chmod 400 /home/$user/.ssh/authorized_keys2Amennyiben vannak publikus kulcsaink a sysadmin felhasználóként történő bejelentkezéshez, töltsük fel és másoljuk be azokat az authorized_keys2 állományba. Ezután zárjuk le ezt az állományt:
chattr +i /home/$user/.ssh/authorized_keys2A fenti beállításokkal már csak a root tud a sysadmin felhasználó nevében történő bejelentkezéshez szükséges kulcsokat felvenni (az immutable bit levétele után).
Az SSH démon beállítása
A leírt telepítés során az ssh szerver és kliens már települt, most nézzük át az sshd beállításait:
- Tiltsuk le a root jelszóval történő belépését ssh-n keresztül! Házirendünkben a root felhasználóhoz nyilvános kulcsot senkinek nem adunk ki (így a root-hoz mindig két lépés kell: sudo-képes felhasználóként, pl. sysadmin-ként kell belépni - kulccsal vagy jelszóval - és sudo-zni). Ha valamiért szükséges automata root login, akkor megtartjuk az alapértelmezett, csak kulccsal történő belépést; ha nincs ilyen igény, a közvetlen belépést teljesen letiltjuk.
- Opcionálisan, amennyiben nem az alapértelmezett TCP:22-es portot használjuk, állítsuk át a portszámot is (ez nézetem szerint nem célszerű, mert a közbenső tűzfalak valószínűleg nincsenek rá felkészülve).
-rw-r--r-- root root /etc/ssh/sshd_config [...] # What ports, IPs and protocols we listen for Port XXXXX [...] #PermitRootLogin prohibit-password PermitRootLogin no [...]Indítsuk újra az ssh démont (ha nem változtattunk TCP portot, a meglévő munkamenet nem fog megszakadni):
systemctl restart sshdIdőzóna beállítása, időszinkron biztosítása
Alapértelmezésben a szervergép az UTC időzónát használja. Magyar idő beállításához változtassuk meg az időzónát:
timedatectl list-timezones | grep Budapest # Europe/Budapest timedatectl set-timezone Europe/Budapest timedatectl # Ellenőrizzük a változtatást és az időtNoha a systemd biztosít NTP (network time protocol) alapú időszinkront, bekapcsolás utáni nagyobb időeltérés esetén ez az eszköz nem fog szinkronizálni, az egyszerű NTP kliens (ntpdate) használata pedig periodikus cron hívásokat igényelne. Mivel szervergépen a nagyobb pontosságú időszinkronizálás lényeges, így annak ellenére, hogy gépünk általában nem lesz időkiszolgáló, a teljes ntp démon csomagot telepítjük.
timedatectl set-ntp no # systemd service kikapcsolása apt install ntp # + dependens könyvtárakEgyéb beállítást nem igényel (TODO!).
Technikai levelezés beállítása
A technikai levelezésre elsődlegesen a szerver állapotjelentéseinek (pl. logcheck, napi jelentések) továbbítása miatt van szükség. A legtöbb monitoring eszköz igényli a levélküldési lehetőséget, így azt már a telepítés elején érdemes beállítani.
A minimál rendszerhez (üres tasklist) nem települ MTA, így azt külön telepítenünk kell. Jelen leírásban MTA-ként az Eximet használjuk (noha az Ubuntu alapértelmezett MTA-ja a Postfix lenne - TODO!):
apt install exim4 bsd-mailx # + függőségekAz Exim4 telepítője semmit nem kérdez, így a telepítés után a levelezést külön be kell állítani.
smarthost beállítása
Az alapbeállítás csak helyi levelezést engedélyez (a /var/mail/[Linux user] állományba hagyományos Unix mailbox formátumban bekerülő levelekkel). Ha a telepítéskor elérhető olyan smarthost, amelyik hajlandó a telepítés alatt álló szerver leveleit továbbítani, akkor érdemes a tényleges levéltovábbítást is beállítani:
dpkg-reconfigure exim4-configCsak az alábbiakat kell megadni illetve megváltoztatni:
- smarthost és SMTP/fetchmail;
- az SMTP figyeljen minden IP-n, ne csak localhoston (tényleges levélfogadás lehetősége);
- ha a hostname és a mail name különbözne (pl. a mail name a szerepnév), mindkettőt adjuk meg saját hostként (Other destinations for which mail is accepted);
- adjuk meg a smarthostot;
- a helyi cím elrejtése csak akkor jön szóba, ha az a DNS-ben nem szerepel (nem kell a gépre mutatnia, csak létező feloldás legyen);
- a helyi kézbesítési mód legyen hagyományos mailbox (nem Maildir);
- legyen sok kis beállítóállomány;
- első alkalommal meg kell mondani, hogy a root és postmaster leveleket melyik valódi Linux felhasználó kapja (célszerűen a sysadmin, később felülbírálható a /etc/aliases állomány root: admin sorában).
Valójában az Exim a sok kis beállítóállományt összefűzve használja (/var/lib/exim4/config.autogenerated), és az autogenerált file mindenki számára olvasható - ez nem jó, ha később MySQL vagy LDAP authentikációt szeretnénk, mert akkor ebben az állományban jelszavak lehetnek. Ezért, egyszer és mindenkorra szigorítsuk a hozzáférést:
-rw-r--r-- root root /etc/exim4/update-exim4.conf.conf [...] CFILEMODE='640' [...]és generáltassuk újra az állományt:
/usr/sbin/update-exim4.conf; systemctl reload exim4Ellenőrizzük a levélküldést:
echo 'Teszt' | mail -s 'Teszt' ervenyes@email.cim; tail -f /var/log/exim4/mainlogA levélküldés meghiúsulhat, ha:
- a smarthost csak authentikációval hajlandó gépünktől levelet elfogadni. Ilyenkor a szükséges azonosító adatokat (smarthost/név/jelszó triplet) a /etc/exim4/passwd.client állományban adhatjuk meg;
- a telepítő környezetben a TCP:25 (SMTP) port kifelé korlátozott. Ha a smarthost más porton (pl. TCP:587) is fogad, a portszámot a /etc/exim4/update-exim4.conf.conf állomány dc_smarthost sorában a hostnév után dupla(!) kettősponttal fűzhetjük hozzá, pl. mail.example.com::587.
sysadmin forward beállítása
A rendszer által küldött leveleket érdemes a rendszergazdák címére forwardolni. A real-admin beállítással a levelek az adott szerveren is megmaradnak a /var/mail/admin mailboxban.
user='sysadmin' touch /home/$user/.forward; chown $user:$user /home/$user/.forward; chmod 440 /home/$user/.forwardMegjegyzés: A forwardoláshoz eleinte érdemes saját e-mail címet megadni, mert a beállítások során elég sok email jöhet.
-r--r----- sysadmin sysadmin /home/sysadmin/.forward sysadmin@MYDOMAIN real-sysadminTeszteléshez érdemes egy levelet küldeni a root lokális postafiókjába, és megnézni, mi történik:
echo Teszt | mail -s Teszt root; tail -f /var/log/exim4/mainlogHa a tesztlevelet megkaptuk, érdemes lezárni a .forward állományt:
chattr +i /home/sysadmin/.forwardAz így megadott immutable miatt csak a root tudja módosítani a forward beállításokat (ő is csak a korlátozás levétele után).
A továbbítás + másolat beállítású postafiókokat érdemes lehet naplószerűen rotálni:
-rw-r--r-- root root /etc/logrotate.d/mail # Forwarded local mailboxes /var/mail/sysadmin { rotate 4 weekly compress missingok notifempty su sysadmin mail }Egyéb beállítások
Mivel a technikai levelek (naplórészletek) tartalmazhatnak nagyon hosszú sorokat is (noha ez az RFC-2822 szerint tilos), tiltsuk le ennek (a Debian Stretch óta bevezetett) ellenőrzését az Exim számára egy új, custom konfigurációs állományban:
-rw-r--r-- root root /etc/exim4/conf.d/main/99_exim4-config_custom_settings [...] # Custom settings - nor provided by maintainer, # nor customizable by Debian automagic [...] IGNORE_SMTP_LINE_LENGTH_LIMIT = 1A beállítás érvényesítéséhez az Exim újraindítása szükséges:
systemctl restart exim4A módosítást pl. az alábbi (itt javasolt) tesztlevél elküldésével ellenőrizhetjük:
{ echo "Test begins"; for ((i=0; i<1500; i++)); do echo -n "0"; done; echo -e "\nTest ends"; } | mail -s "Very long line" root tail -f /var/log/exim4/mainlogSiker esetén a technikai jellegű levelezést beállítottuk.
Források és frissítések beállítása
Ellenőrizzük, hogy valamennyi szükséges repository (main, restricted, universe, multiverse; a multiverse kivételével security és updates is) be van-e állítva az apt számára:
apt-cache policy | grep http | awk '{print $2 $3}' | sort -uTelepítsük a telepítő image kiadása óta megjelent, esetleges frissítéseket (ezt a telepítő önállóan is megteszi, de biztos, ami biztos):
apt update; apt upgradeA snapd eltávolítása
Az Ubuntu Fossa alapértelmezésben tartalmazza a Snaps Store (korábban Ubuntu Software Center) kezelőprogramját, erre azonban szervergépen nincs szükségünk. Eltávolításához adjuk ki az alábbi parancsokat:
apt purge snapd apt autoremove rm -rf /root/snapA cron-apt telepítése és beállítása
A frissítések figyelését a cron-apt-tal oldjuk meg, amely cron-ból futtatva, alapértelmezésben naponta egyszer ellenőrzi a repositorykat, és letölti (de alapértelmezésben nem telepíti!) a frissítéseket. Ha talált és letöltött frissítendő csomagot, levelet küld; ilyenkor a frissítéseket választott időben, manuálisan telepíthetjük. A frissítések miatt egyes szolgáltatások, vagy az egész szervergép újraindítása is szükséges lehet; erre figyelmeztet az ugyancsak telepítendő needrestart csomag.
apt install cron-apt needrestart # +: dependens könyvtárakTelepítés után írjuk elő, hogy ne csak hiba esetén küldjön levelet, hanem akkor is, ha talált frissítendő csomagot. Ehhez készítsünk egy új konfigurációs overlay állományt:
-rw-r--r-- root root /etc/cron-apt/config.d/3-download MAILON="upgrade"A cron-apt telepítése után, ha a frissítésekről levelet kaptunk, a letöltött csomag(ok) telepítését az általunk választott időpontban, sudo-képes felhasználóként belépve, a szokott módon, a sudo apt upgrade paranccsal végezhetjük el.
Az unattended-upgrades letiltása
A cron-apt beállítása után az Ubuntu azonos célú eszközét (unattended-upgrades - TODO!) tiltsuk le:
dpkg-reconfigure unattended-upgrades # Válaszoljunk nemmel (No).Naplózás és napi jelentés beállítása
Ebben a házirendben (egyelőre) nem használunk naplószervert, illetve nem törekszünk több gép naplóeseményeinek egységes kezelésére - TODO!
Standalone környezetben a naplókat az alapértelmezett rsyslog helyett a syslog-ng-vel állítjuk elő és a logcheck segítségével figyeljük. A napi jelentés a /etc/cron.daily alatti scriptek lefuttatásának kimenete. Minden értesítés email-ben érkezik.
- A naplózás beállítását ld.: Ubuntu szerver logolás (Fossa).
- A napi jelentésre szolgáló scripteket és beállításokat ld.: Ubuntu szerver napi jelentés (Fossa).
Csomagszűrő tűzfal beállítása
A Hálózati házirend szerint valamennyi szervert bastion host-ként kell kialakítani, azaz saját (csomagszűrő) tűzfallal kell rendelkezzen: Ubuntu bástyagép tűzfal (Fossa).
Monitorozás
A szerver monitorozása adatgyűjtést jelent a hardver és egyes szoftverek állapotáról. Az adatokat valamilyen helyi vagy távoli eszközzel megjeleníthetjük, elemeztethetjük, határértékek túllépése esetén riasztásokat illetve automatikus beavatkozásokat indíthatunk.
Az adatgyűjtéshez szükséges a szervergép állapotának figyelésére szolgáló eszközök telepítése:
Ezen kívül szükséges a gyűjtött adatok elemzését és megjelenítését végző eszköz számára az adatok feladását biztosító kliensprogram telepítése:
Megjegyzés: standalone szerver esetén a sokféle lehetséges szoftver megoldás közül a jelen leírásban ismertetett, adatgyűjtő-, elemző és megjelenítő eszközként egyaránt használt Munin telepítését érdemes az adatok megjelenítésére szolgáló webszerver szolgáltatás telepítése utánra halasztani.
Watchdog
A watchdog olyan szerkezet, amelyik igyekszik észlelni a számítógép (akár kernel szintű) "lefagyását" mely esetben (lehetőleg hardveresen) újraindítja azt. Fizikai gép esetén az eszköz lehet hardver kártya, illetve integrálva lehet az alaplapi chipset-be. Emellett (virtuális környezetben is) hasznos lehet a szoftveres watchdog, amely működő operációs rendszer mellett, előre definiált üzemállapotokban (pl. lefagyást még nem okozó erős túlterhelés esetén) kezdeményez szabályos újraindítást:
Egyéb eszközök
A korábban ebben a szakaszban szereplő open-vm-tools csomag a jelen terjesztésben automatikusan telepítve van.
Kiterjesztett fájlrendszeri attribútumok
Néhány alkalmazás használ kiterjesztett attribútumokat (ezt a gyári kernel is támogatja), emiatt opcionálisan de javasoltan érdemes telepíteni az ezeket lekérdező, beállító segédprogramokat (getfattr, setfattr) tartalmazó Debian csomagot is:
apt install attrés a későbbiekben a /etc/fstab-ban engedélyezni kell a user_xattr használatát.
PAX kezelőprogram
Kizárólag PAX-os kernel használata esetén szükséges a PAX flag-eket beállító utility telepítése:
apt install paxctlIrodalom
TODO!
- The official Ubuntu Server Guide
- Ubuntu 20.04 Server Installation (linuxconfig.org)