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.

  1. Hardware Procesor, paměť, disky, síťová rozhraní a další zařízení poskytují fyzické prostředky stroje nebo virtuálního serveru.
  2. 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í.
  3. 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.
  4. 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.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.