Heronovo IT doupě

Jak moc nastavujete linuxový server po instalaci?

Servery spravuju nějakých 15+ let, je to moje profese i koníček. U každé instalace se vždy snažím o jistý minimalismus. Nainstaluju minimální verzi OS (toho času stále Debian), tu navíc upravím tak, že odinstaluju nepotřebné balíčky a zbytek konfigurace převedu to na systemd. Když už tam teda je. Tj starej networking jde na systemd-networkd, systemd-resolved. ifupdown a dhcp client může jít pryč. Máme systemd-journald, takže rsyslog může jít pryč.

Všechny nepotřebné služby zůstanou buď vypnuté (ideálně zamaskované), nebo, pokud tomu nebrání nějaké závislosti, rovnou odinstalované. Další balíčky jako wpasupplicant a bluez na serveru fakt nepotřebuju. Ty běžící se zabezpečí (ssh pouze s klíči apod.).

Výchozí minimální stav je tedy jen běžící ssh a to buď jako služba, nebo přes systemd socket activation. Nic víc na síťových portech neposlouchá.

Mám tedy výchozí minimální systém. Následně nainstaluju služby, které chci. A dál řeším jen nastavení těchto služeb, základního systému se od této chvíle prakticky není třeba dotknout.

Proč to píšu. Nedávno jsem se dostal do týmu, který dělá věci zcela jinak. Uvedu to na příkladu poštovního serveru. Používám postfix a dovecot. Pro authentizaci používám dovecot, pro doručování do schránek používám dovecot. To jest stačí nainstalovat balíčky, nastavit postfix pro příjem pošty a nastavit ověřování uživatelů (pokud nejsou lokální) přes dovecot (smtpd_sasl_type) a nastavit doručování přes dovecot (mailbox_command = /usr/lib/dovecot/deliver). Automaticky tak funguje sieve apod.

A tím to hasne. Nijak se nemusí zasahovat do systémového nastavení, pošta funguje pro lokální uživatele a funguje i vzdálený přístup přes imap. Uživatele stačí vytvářet standardním systémovým příkazem.

Tým, kde mám tu čest nyní pracovat, to dělá jinak. Postfix a dovecot tady je, ale pro doručování do schránek zařizuje maildrop. Protože si neporadí (nijak do hloubky jsem to nezkoumal a je mi to jedno) s rozlišením, jestli má vytvářet mailbox nebo maildir, tak ve výchozím stavu vytváří mailbox soubor. Jenže v nastavení dovecotu je maildir. Takže to nefunguje. Proto je potřeba v /etc/skel vytvořit maildir. Pro každého nově vytvořeného uživatele se tak kopíruje výchozí maildir. Protože se nechce, aby se uživatelé mohli na mailserver přihlašovat, tak se ještě mění /etc/adduser.conf, kde se mění shell na nologin.

Přijde mi to jako naprosto zbytečná komplikace. U mě zvolený typ poštovní schránky vytváří dovecot (toho času mdbox mail_location = mdbox:~/.mdbox). Protože ten doručuje. Vůbec nic nemusím měnit v /etc/skel (což jsem za celou kariéru nikdy nemusel dělat) ani nastavovat /etc/adduser.conf (což jsem taky nikdy nedělal), protože výhradně používám klíče (tj. pokud nechci, aby se tam uživatel přihlašoval, tak mu nenastavím klíč). Fyzický přístup na terminál stejně nemá. A už vůbec ne na případnou virtuální konzoli. A i kdyby se tam neznámo jak přihlásil, tak jediné, co uvidí, jsou soubory jeho vlastní pošty. Ale přes imap klienta je to přece jen pohodlnější.

Tolik pro ukázku. V žádném případě nechci nijak problematizovat zvolený postup, jistě funguje. Jen mi přijde zvláštní dělat tolik nepotřebných zásahů do systému, když stačí pouze nastavit služby pro danou roli. Nastavuju poštovní server a veškerá nastavení nesou postfix a dovecot. Nevidím důvod sahat kamkoliv jinam.

Můj již mnohokrát prezentovaný přístup vychází z Exupéryho citátu: „dokonalé není to, kam nelze nic přidat, ale to, odkud nelze nic odebrat“. Snažím se udržoval minimální množinu „atomů“, ze kterých postavím celek. Tj. odpovědí není vzít jeden monolit a prohlásit: je to jeden balíček (jak si to někteří chybně vykládají). Nikoliv. Odpovědí je mít minimální množinu nástrojů, se kterými udělám maximum věcí. Cílem by nemělo být nastavit v systému úplně všechno, ale pouze změnit ty věci, které ve výchozím stavu nevyhovují. Pokud může úložiště po poštu vytvořit přímo pošťák, který k tomu má navíc všechny potřebné informace, tak je zbytečné to delegovat někam jinam a měnit systémové soubory.

Myslím, že můj přístup funguje lépe dlouhodobě a méně komplikuje updaty na nové verze. Při upgrade řeším jen nastavení daných služeb. Tím, že zbytek systému je v podstatě ve výchozím stavu, tak instalátor nemá problém s konfiguračními soubory. Protože se nemění. Ano, po upgrade je potřeba vše zkontrolovat zejména s ohledem na zabezpečení (tj. zkontrolovat běžící služby a jejich nastavení). Ale tj v minimálním systému poměrně rychlá práce. Navíc se dá do značné míry automatizovat.

U systémů, jejichž admini se hrdě hlásí k tomu, že si to přizpůsobili přesně k obrazu svému a nastavili desítky konfigů a pro jistotu ještě navíc na všechna temná zákoutí dali skripty, které ještě navíc něco dělají – tady posunou nějaký soubor, tady změní timestamp, od kterého se potom odvíjí další akce, tady zavolají systémovou službu (tak že nefunguje ovládání pomocí systemctl, protože vám tu službu nestále něco pod rukama nahazuje), je upgrade prakticky neproveditelný. Akorát jsem dodnes nepochopil, jaké má tento křehký systém přesně za výhody. Je to vlastně takový osobní vendor lock-in na jednoho admina. Který už je 10 let pryč.

Ale ptám se vážně: jak moc nastavujete servery?