Slovník pojmů
Linux
Linux tvoří základ velké části webových serverů, vývojových stanic i kontejnerových platforem. Pro bezpečný provoz je potřeba rozlišovat kernel, distribuci, služby a nástroje, které nad nimi běží.
Stručná definice
Kernel je základ; použitelný systém kolem něj sestavuje distribuce.
Linux kernel zprostředkovává procesům procesor, operační paměť, disková a síťová zařízení. Sám neposkytuje celé uživatelské prostředí. Distribuce, například Debian, Ubuntu nebo Fedora, přidává userspace: systémové knihovny, příkazy, správu balíčků, služby a instalační či aktualizační pravidla.
Pojem GNU/Linux zdůrazňuje, že řada distribucí spojuje Linux kernel s nástroji projektu GNU; ne každý userspace je však totožný. Linux je unix-like systém, nikoli původní Unix. Používá se na serverech, desktopech, vestavěných zařízeních i ve vývojových prostředích, takže nejde pouze o serverový operační systém.
Jaký problém řeší
Společná vrstva mezi hardwarem a dlouhodobě běžícími aplikacemi
Linux poskytuje procesy, souborový systém, síť a bezpečnostní hranice, na kterých lze opakovatelně provozovat webovou infrastrukturu. Vývojář díky tomu může dohledat, který proces poslouchá na portu, kdo vlastní soubor a proč služba nenaběhla. V praxi se na něm často skládají nginx, PHP-FPM, databáze a workery.
- webové a API servery s řízenými službami, logy a omezenými uživatelskými účty
- vývojová prostředí s konkrétní verzí PHP, databáze, Composeru a systémových knihoven
- frontové workery, plánované úlohy a další procesy běžící mimo jeden HTTP požadavek
- kontejnerové hostitele, CI agenty a deployment cíle se známou sítí a filesystemem
- desktopové systémy pro běžnou práci, vývoj, grafické aplikace a správu souborů
Praktický příklad
Linux server pro PHP e-shop
Veřejný požadavek přijme nginx a přes FastCGI jej předá službě PHP-FPM. PHP aplikace pracuje s PostgreSQL a Redisem. Každá část běží pod určeným uživatelem, má jen potřebná oprávnění a zapisuje logy do dohodnutého cíle. Databáze ani Redis nejsou bezdůvodně dostupné z veřejné sítě.
Mimo HTTP tok běží cron nebo systemd timer pro krátké plánované spouštění a samostatné workery pro zpracování úloh. Service manager hlídá jejich životní cyklus, ale aplikace stále musí korektně reagovat na ukončovací signály a zajistit bezpečné opakování práce. Při deploymentu se nasadí verze aplikace, provedou řízené migrace a ověří zdraví služeb; ruční úprava produkčních souborů není spolehlivý postup.
Topologie služeb
Internet
|
nginx -> PHP-FPM -> PHP application -> PostgreSQL
|
+------------> Redis
cron / timers -> scheduled jobs
queue --------> workers
services -----> logs / metrics
Jak funguje
Od hardwaru k webové aplikaci
Textová alternativa diagramu: hardware obsluhuje Linux kernel, nad ním běží userspace a systémové služby a teprve nad nimi aplikační procesy. Jde o zjednodušený pohled na odpovědnosti, ne o jedinou možnou implementaci.
- Hardware Procesor, paměť, disky, síťová rozhraní a další zařízení poskytují fyzické prostředky stroje nebo virtuálního serveru.
- Linux kernel Kernel plánuje procesy, spravuje virtuální paměť, ovladače, síť a rozhraní k filesystemům. Procesy jeho služby používají přes systémová volání.
- Userspace a služby Knihovny, shell, správce balíčků, init/service manager, logování a démony tvoří použitelné systémové prostředí zvolené distribuce.
- Aplikace nginx, PHP-FPM, databáze, workery a vývojové nástroje běží jako procesy s konkrétní identitou, konfigurací a přístupem ke zdrojům.
Hlavní části a principy
Proces, soubor a oprávnění jsou společným základem provozu
Konkrétní příkazy se mezi distribucemi liší, základní model procesů a oddělených uživatelů však zůstává čitelným výchozím bodem.
Procesy a služby
Program v běhu je proces s PID, uživatelem, otevřenými soubory a dalšími zdroji. Služba je dlouhodobě spravovaný proces či skupina procesů. systemd je běžný init a service manager, ne povinná součást každého Linuxu; existují i jiné implementace.
Filesystem
Linux zpřístupňuje soubory, adresáře, zařízení i některé informace o kernelu v jednom hierarchickém stromu. Mount připojuje konkrétní filesystem do zvoleného adresáře. Cesta, vlastník a režim přístupu rozhodují, zda proces soubor přečte nebo změní.
Uživatelé, skupiny a oprávnění
Proces má uživatelskou a skupinovou identitu. Oprávnění pro vlastníka, skupinu a ostatní omezují čtení, zápis a spuštění; ACL či další bezpečnostní mechanismy mohou pravidla rozšířit. root má rozsáhlé pravomoci, proto se používá jen pro nezbytné administrační kroky.
Shell a terminál
Shell, například Bash nebo Zsh, interpretuje příkazy, proměnné a roury. Terminál je rozhraní, ve kterém shell či jiný textový program běží; nejde o totéž. Příkazový řádek je způsob ovládání, ne název Linux kernelu.
Balíčky, logy a síť
apt, dnf a další správci balíčků instalují balíčky z ověřených repozitářů dané distribuce a řeší závislosti. Způsob ověření podpisů a metadat se mezi distribucemi liší. Logy mohou být v journálu, souborech nebo odesílané centrálně. Síťová rozhraní, adresy, DNS, routy, porty a firewall určují, kudy je služba skutečně dosažitelná.
Linux a kontejnery
Běžný Docker kontejner izoluje procesy pomocí mechanismů kernelu hostitele a sdílí tentýž kernel. Image může obsahovat userspace soubory jiné distribuce, ale kontejner nemá vlastní plnohodnotný Linux kernel jako virtuální počítač.
Výhody a omezení
Kontrola a automatizace pomáhají jen s dobře popsaným provozem
Přínosy
- otevřený kernel a široká nabídka distribucí pro servery, desktop i specializovaná zařízení
- dobře skriptovatelné prostředí pro automatizovaný build, testy, deployment a správu služeb
- jemné oddělení procesů pomocí uživatelů, skupin, oprávnění, namespaces a dalších mechanismů
- vyzrálý ekosystém webových serverů, databází, diagnostických a kontejnerových nástrojů
Omezení a časté chyby
- příkaz platný pro jednu distribuci, verzi nebo init systém nemusí fungovat jinde
- balíčky i konfigurační cesty se liší a náhodný návod z internetu může systém poškodit nebo oslabit
- spouštění celé aplikace jako root zbytečně zvětšuje dopad chyby či napadení
- ruční změny bez verzované konfigurace a záznamu komplikují další deployment i obnovu
- samotný Linux neřeší zálohy, monitoring, aktualizace, aplikační bezpečnost ani návrh databáze
Kde Linux použít
Server, pracovní stanice i základ kontejnerů
Pro backend je Linux přirozeným prostředím, protože na něm běží webové servery, PHP runtime, databáze, RabbitMQ, Redis, plánované úlohy i workery. Stejný model procesů a oprávnění umožňuje provozovat monolit, API i více služeb. Volba konkrétní distribuce má vycházet z podpory, dostupných balíčků, zkušenosti týmu a požadavků platformy, ne z univerzálního žebříčku.
Linux není povinný pro každého vývojáře ani pro každou aplikaci. Spravovaná platforma může většinu systémové vrstvy skrýt a desktopové použití má jiné potřeby než produkční server. I tehdy je užitečné vědět, kde končí odpovědnost aplikace a začíná odpovědnost poskytovatele za kernel, aktualizace, síť a služby.
Provozní praxe
Změny musí být dohledatelné, opakovatelné a přiměřeně oprávněné
Produkční server se nemá spravovat stylem „zkusím náhodný příkaz z internetu“. Nejprve je potřeba znát distribuci, verzi, dopad příkazu a možnost návratu.
- aktualizovat balíčky z důvěryhodných repozitářů a plánovat restart po změně kernelu či kritické služby
- spouštět aplikaci a workery pod neprivilegovanými účty s minimem potřebných přístupů
- verzovat konfiguraci nebo ji spravovat automatizovaně a oddělit od ní tajemství
- sledovat stav služeb, kapacitu disku a paměti, chybové logy, síťovou dostupnost a aplikační metriky
- zálohy pravidelně testovat obnovou; kopie na stejném filesystemu není odolná strategie
- před zásahem ověřit dokumentaci konkrétní distribuce a nástroje místo slepého kopírování příkazů
Časté otázky
Linux, distribuce a provozní nástroje
Je Linux celý operační systém?
Technicky je Linux kernel. V běžné řeči se názvem Linux označuje také celá distribuce, která ke kernelu přidává userspace, knihovny, správu balíčků, služby a aplikace.
Je shell totéž co terminál?
Ne. Shell interpretuje příkazy a skripty. Terminál je textové rozhraní nebo jeho emulátor, ve kterém může běžet shell i jiný program.
Obsahuje Docker kontejner vlastní Linux kernel?
Běžně ne. Kontejner používá kernel hostitele. Jeho image může obsahovat userspace soubory z jiné distribuce, ale vlastní plnohodnotný kernel má až oddělený virtuální stroj.
Musí Linux používat systemd?
Nemusí. systemd je rozšířený init a správce služeb v mnoha distribucích, ale Linux kernel není vázaný na jediný init systém a jiné distribuce či specializovaná prostředí používají alternativy.
Je Linux určený jen pro servery?
Ne. Používá se také na desktopu, ve vývojových počítačích, mobilech, síťových a vestavěných zařízeních. Server je pouze jedna z jeho významných oblastí.
Jak pracuji s provozním prostředím
Aplikaci, služby a data navrhuji jako jeden dohledatelný provozní celek.
U PHP projektů řeším běh webu, workerů, databáze, cache a integračních služeb spolu s oprávněními, logy a bezpečným nasazením.