„Ubuntu szerver alaptelepítés (Fossa)” változatai közötti eltérés

Innen: AdminWiki
a (sysadmin forward beállítása)
a (sysadmin forward beállítása)
 
225. sor: 225. sor:
 
   su sysadmin mail
 
   su sysadmin mail
 
}</pre>
 
}</pre>
Ezzel a technikai jellegű levelezést beállítottuk.
+
====Egyéb beállítások====
 +
Mivel a technikai levelek (naplórészletek) tartalmazhatnak nagyon hosszú sorokat is (noha ez az [https://www.ietf.org/rfc/rfc2822.txt 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:
 +
<pre>-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 = 1</pre>
 +
A beállítás érvényesítéséhez az Exim újraindítása szükséges:
 +
<pre>systemctl restart exim4</pre>
 +
A módosítást pl. az alábbi ([https://blog.dhampir.no/content/exim4-line-length-in-debian-stretch-mail-delivery-failed-returning-message-to-sender itt javasolt]) tesztlevél elküldésével ellenőrizhetjük:
 +
<pre>{ 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/mainlog</pre>
 +
Siker esetén a technikai jellegű levelezést beállítottuk.
  
 
===Források és frissítések beállítása===
 
===Források és frissítések beállítása===

A lap jelenlegi, 2020. június 10., 08:11-kori változata

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.

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ég

Konzol 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ás

A 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.name

Opcioná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 /home

A 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/.profile

Ezutá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_keys2

Amennyiben 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_keys2

A 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 sshd

Idő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őt

Noha 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árak

Egyé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égek

Az 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-config

Csak 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 exim4

Ellenőrizzük a levélküldést:

echo 'Teszt' | mail -s 'Teszt' ervenyes@email.cim; tail -f /var/log/exim4/mainlog

A 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/.forward

Megjegyzé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-sysadmin

Tesztelé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/mainlog

Ha a tesztlevelet megkaptuk, érdemes lezárni a .forward állományt:

chattr +i /home/sysadmin/.forward

Az í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 = 1

A beállítás érvényesítéséhez az Exim újraindítása szükséges:

systemctl restart exim4

A 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/mainlog

Siker 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 -u

Telepí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 upgrade

A 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/snap

A 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árak

Telepí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.

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 paxctl

Irodalom

TODO!