Abstrakt
Počítačové servery lze provozovat ve třech režimech:
- Moderní SAAS cloudový režim, nabízen firmami jako Amazon (Web Services - AWS), Microsoft (Azure), Google (cloud) a další. V tomto režimu se pracuje na pozadí s docker composerem, respektive uživatel interaguje s ready-to-use docky skrze UI rozhraní a k linuxovým příkazům a konfiguračním souborům se běžný uživatel jen ztěží dostane.
- Server prostřednictvím hostingových služeb - je forma, kdy je server pronajímán nebo hostován ve specializovaném datacentru. Součástí mohou být služby Linuxového administrátora.
- Lokální server - server provozovaný lokálně pro firemní a domácí účely - interní potřeby.
Vhodný typ provozu je odvislý od potřeb konkrétního uživatele. Lokální řešení je vhodné pro sběr a uchování dat, validaci datových toků, řídící systémy bez přístupu zvěnčí apod. Zkrátka aplikace se specifickým use-casem, kdy typicky v těchto případech je provoz vlastního serveru oproti cloudovým a hostovaným službám ekonomičtější variantou. Počítač, na němž server běží, si v takovém případě stavíte sami a tedy i každá jeho komponenta může být tou možná nejoptimálnější pro Váš účel. Právě tété variantě se věnuje tato publikace.
Postavení PC, instalace, zabezpečení i správa serveru
Tato publikace Vás provede úskalými výběru komponent, instalace Ubuntu Serveru, jeho zabezpečením, prací v něm i správou. V prvé řadě nejde o expertní publikaci, ale základní principiální vysvětlení OS Ubuntu Server jako takového a především jednoduchého průvodce nastavením prostřednictvím linuxových příkazů. I když se ovládání Ubuntu skrze příkazovou řádku zdá na první pohled komplikované, jde jen o to si na pro nás dnes již "neuživatelsky přívětivé rozhraní" příkazového řádku zvyknout.
Hostovaný (Cloud) vs Lokální server
Cloudový server je typicky server umístěný v datacentru napojeném na páteřní internetovou síť. Jeho hardware je spravován pracovníky serverovny datacentra a klient jej využívá jako vzdálený počítač pro své potřeby - typicky nepřetržitě běžící webové aplikace a příležitostně využívané výkonnostně náročné aplikace. Oproti tomu, lokální server máte umístěn ve své nemovitosti a stará se o jakékoli vaše interní potřeby v rámci lokální i internetové sítě.
S výběrem lokálního vs cloudového serveru Vám pomůže následující srovnání:
Cloudový server
- Přístupný z jakéhokoli počítače v Internetu
- Napojen na páteřní internetovou síť (rychlý tok dat)
- Nízké nároky na správu a znalosti kolem serverů
- Není potřeba se starat o hardware a OS, uživatel řeší pouze správu aplikací
- Snadná škálovatelnost
- Zabezpečení spravováno poskytovatelem služby
- Data jsou uložena vždy v Cloudu, lze je šifrovat.
- Omezené možnosti přizpůsobení
Lokální server
- Přístup z počítačů v lokální síti. Po povolení i z internetu.
- Rychlost toku dat z a na internet odvislá od internetového připojení
- Uživatel se stará o hardware, OS i aplikace
- Možnosti přizpůsobení - CPU, SDD, RAM, GPU - přesně dle potřeb
- Škálovatelnost přes změny v hardwarové infrastruktuře a následné ručnní nakonfiguraci.
- Data mohou být uložena pouze lokálně.
- Zabezpečení plně v režii správce serveru
Jedním z nejdůležitějších parametrů je ovšem cena. Ta se v případě cloudu platí měsíčně, u lokálního serveru jde o jednorázový náklad za hardware a případně o náklady na pracovníka starající se o jeho správu. Tyto náklady jsou variabliní a mohou se značně lišit. Lokální server dává největší smysl tehdy, když potřebujete něco extra. Napříkald disk o nadstandardní velikosti a rychlosti. S ním v případě cloudu budete mít spojené výkonné CPU, které však nepotřebujete. Výsledkem bude, če cena měsíčního předplatného Cloudu vyjde na to samé, co pořízení lokálního serveru. Jeho nastavení poté může být jednorázovou záležitostí (den práce), posléze vyžadující drobnou údržbu (v průměru hodina měsíčně).
Následující kapitoly publikace se věnují operačnímu systému Ubuntu Server. Tento systém může běžet na jakémkliv počítači i serveru. Publikace je nicméně pro vás relevantní jen tehdy, spravujete li server ručně namísto automatizovaného rozhraní, které je součástí cloudových služeb, jakými jsou Amazon Web Services, Microsoft Azure apod.
Výběr HW komponent
Ubuntu Server je z pohledu náročnosti OS možné nainstalovat téměř na jakýkoli počítač disponující uložištěm alespoň 2GB (kdy uložištěm může být i flash disk), výběr HW komponent je tedy odvislý čistě od aplikací a zátěže, kterým Ubuntu Server plánujete vystavovat. Použít můžete počítač starý, stejně jako postavit zcela nový.
Server tedy nemusí být specializované zařízení prodávané jako "server", využívající serverové komponenty, nýbrž libovolné zařízení sloužící pro serverové operace. Na server lze použít například prostorově i energeticky úsporné a přesto velmi výkonné mikropočítače Intel NUC. Stavba i zprovoznění NUC je jednoduchá - koupená skříň s CPU a zdrojem se jen doplní o SSD + RAM a zapojí do zásuvky. S výběrem CPU, SSD a RAM nejen pro NUC pomohou podkapitoly níže.
Poznámka: Intel oznámil v létě 2023 konec výroby počítačů řady Intel NUC. Stále však existuje řada alternativ s obdobným designem.
Výběr disku
Disk na prvním místě, a to z jednoduchého důvodu - jde o nejkritičtější komponentu. Obsahuje nainstalovaný operační systém (OS) Ubuntu Server, veškeré konfigurace i data. Jde tedy o komponentu s časově nejnáročnější replikací a současně komponentu, která lze mezi počítačemi snadno fyzicky přenášet - ať jej zapojíte do jakéhokoliv počítače, operační systém se automaticky sám načte a bude běžet.
Výběr správného disku je nejdůležitější v momentě, kdy používáte jeden server pro vše (nevyužíváte propojení více nezávislých serverů (databázový, souborový, výpočetní...)). V takovém momentě je vhodné vybrat co největší a nejrychlejší disk v rámci určeného rozpočtu.
Nejlepší výkonové vlastnosti aktuálně nabízí SSD disky typu NVMe, konstrukce M.2. 2TB disk pořídíte v 2Q/2023 za ~3000 Kč, 4Tb pak za 9,000Kč. Důležitým parametrem takového disku je životnost (počet cyklu přepsání) a samotná rychlost čtení a zápisu. Zajímavou nabídkou mi přijde SSD disk Kingston SSD KC3000. Při osazování počítače SSD diskem nezapomeňte na chladící podložku pro odvod tepla.
Výše zmíněné disky se používají pro běh OS a aplikací s vysokými nároky na rychlost čtení a zápisu dat na disk. Pro ukládání běžných souborů lze použít standardnější typ SSD a HDD disků. Většina počítačů (včetně vyššího NUC) podporuje kombinovanou zástavbu SSD i HDD diskem. V případě výběru NUC, i když o HDD disku neuvažujete, vyšší varianta skříně vlivem lepšího proudění vzduchu zajišťuje lepší chlazení.
Výběr CPU
Intel NUC a alternativní zařízení stejného konceptu se prodávají v mnoha variantách lišících se použitým procesorem (CPU). Podrobné informace o každém CPU zjistíte obvykle na stránkách výrobce (např: Intel i9 12900K, AMD Ryzen 5950X ), vzájemné srovnání výkonu procesorů dle různých benchmarků poté jednoduše vložením do Googlu dotazu "procesor 1 vs procesor 2", např: "i5-1135g7 vs i7-1260p", kdy na Vás vyskočí řada výsledků stránek nabízející ucelené a přehledné srovnání.
Logicky, v momentě, kdy neznáte potřebné výkonnostní nároky plánované aplikace provozované na daném serveru, ať už z důvodu absence možnosti kvalifikovaného odhadu nebo znalosti měřítka a škálování, principielně je vhodnější na začátku volit CPU výkonnější (vyšší počet výkonostně i energeticky orientovaných jader, vláken, běžících na vyšších frekvencích) a až když dané CPU nedostačuje, rozšiřovat server o další servery (tvorba struktury specializovaných dílčích samostatných serverů), kdy již máte představu o potřebném výkoně pro konkrétní specializace. Možností je využití serverových základových desek s více sockety umožňujícími současné napojení 2 a více totožných CPUs, ovšem vzhledem k ceně desek je toto řešení ekonomicky výhodné pouze ve speciálních případech.
Výběr RAM
Ram se vyrábí ve 2 velikostech - pro běžné skříně (provedeni DIMM) a pro notebooky (provedení SO-DIMM). Ty notebookové se používají rovněž v minipočítačích, jako je Intel NUC a jemu podobní, jejichž velikost zástavbu RAm v klasické velikosti neumožňuje.
Operační paměti RAM se prodávají v definovaných velikostech (4, 8, 16, 32, 64... GB) a obvykle je výkonostně optimálnější místo 1 větší osadit počítač 2-ma menšími (namísto 1x32Gb použít 2x 16GB).
Moderní DDR4 Ram paměti se dále liší frekvencí paměti [MHz] (vyšší je lepší) a časováním ram CL (nižší je lepší).
Bios nastavení
Jakýkoli počítač ihned po spuštění umožňuje vstup do nastavení a úpravy Bios. Bios je firmware používaný k poskytování runtime služeb pro operační systémy a programy a k provádění inicializace hardwaru během procesu spouštění. Z předchozí věty je zřejmé, že se spouští ještě před spuštěním Operačního systému, přičemž v tento moment je zobrazována úvodní obrazovka, která zobrazuje nápovědu funkčních kláves pro "bootovací zařízení" (obvykle F11), vstup do bios nastavení (obvykle F2) apod.
V Bios nastavení lze upravovat řadu vlastností počítače, a to pro stav jeho činnosti i nečinnosti. Jelikož se v této publikaci zabýváme konfigurací serveru, za zmíněná stojí následující:
- Chování při výpadku proudu - U serveru je ovykle vyžadováno, aby byl vždy online a přístupný. Bios nastavení obsahuje v tomto směru užitečnou vlastnost
After Power Failure
, skrze níž se definuje chování po obnovení dodávky elektřiny (např. znovuobnovení po výpadku / zapojení počítače do elektřiny). Skrze možnostPower On
lze definovat, že počítač se vždy při obnovení elektrického proudu sám automaticky spustí - tedy dokud jej nevypneme vlastním požadavkem, kdykoliv bude mít přísun elektřiny, bude se sám udržovat automaticky spuštěný. - Nastavení chlazení - Dle preferencí a potřeb lze upravovat výkonnostní profil ventilátorů od preference ticchosti po preferenci maximálního chlazení.
- Fast boot - Zajistí rychlejší boot systému. V tomto režimu se neberou na zřetel připojená a bootovací zařízení. Pro opětovnou reinstalaci systému je nutné v případě Intel NUC držet při zapínaní spoštěcí tlačítko po dobu 3 vteřin. poté je možné vstoupit opětovně do BIOS nastavení,
BIOS verze
V počítači je vhodné zkontrolovat aktuální verzi BIOS a případně upgradovat na novější, je-li k dispozici. BIOS verze jsou průběžně aktualizovány jako každý jiný firmware, a to buď za účelem přidání funkcí nebo opravy chyb.
BIOS informace, včetně verze, lze zjistit i z následně nainstalovaného linuxového OS Ubuntu Server, a to dotazem sudo dmidecode | less
.
Instalace Ubuntu Serveru
OS Ubuntu Server je zdarma. Instalace se zpravidla provádí z flash disku (o velikosti alespoň 4GB) s instalačním ISO souborem. Ten snadno vytvoříte stažením instalačního souboru Ubuntu Server a jeho nahráním na zformátovaný flash disk (formát FAT32) prostřednictvím softwaru pro tvorbu bootovacích flash disků. Ubuntu desktop nabízí program Startup Disk Creator. Obdobné nástroje jsou i pro systém Windows.
Je třeba mít pouze na paměti, že pokud bootovací flash disk má sloužit pro přeinstalaci aktuálního OS Ubuntu Server, měla by být bootovací verze ve stejné nebo vyšší verzi OS. V opačném případě budete čelit při bootu chybě "Verification failed: (0x1A) Security Violation".
Jakmile máte bootovací flash disk, vložte jej do USB portu počítače, na němž chcete OS Ubuntu server nainstalovat, počítač pusťte a při bootovací obrazovce stiskněte (a držte) klávesu F11. Naskočí obrazovka výběru disku, který se má při bootování použít. Zvolte váš flash disk.
Dále již postupujte dle instrukcí instalátoru.
Po instalaci můžeme OS Ubuntu Server ihned aktualizovat na poslední možnou verzi.
sudo apt -y update && sudo apt -y upgrade
sudo apt dist-upgrade && sudo apt autoremove
Zabezpečení Ubuntu Serveru
Zabezpečení Ubuntu Serveru je esenciální záležitostí, jehož důležitost roste společně s citlivostí na něm uložených dat a běžících aplikací.
Zabezpečení přihlašování
V bodech níže nastavíme bezpečnostní strukturu, kdy ke vzdálenému přihlašování se bude používat SSH klíč spolu s 2FA (Google authenticator). K lokálnímu přihlašování bude postačovat stále jen heslo (pro případ ztráty SSH klíče a možnosti nahrání nového) společně s 2FA (Google authenticator).
-
Zabezpečení počítačů, z kterých se k serveru připojuje
K serveru se zpravidla přistupuje vzdáleně, skrze SSH, a to prostřednictvím různých autentizačních metod. Dobrou praxí tedy je mít v bezpečnostním pořádku počítače, z nichž se k serveru připojuje tak, aby se předcházelo možnosti odcizení přihlašovacích údajů k serveru z těchto zařízení.
Na systému Windows k přihlašování budeme používat klienta Putty staženého z oficiálního webu.
-
Nastavení vzdáleného připojování k serveru pomocí SSH klíče
Výchozí způsob přihlašováni k Ubuntu serveru přes SSH je pomocí uživatelského jména a hesla. Nevýhodou je, že vaše heslo je obvykle něco poněkud „krátkého“ a náchylného k brute-force útokům. SSH klíč je oproti heslu exponenciálně těžší prolomit a tedy při správné práci s ním je bezpečnost přihlašování zásadně navýšena.
Vygenerování ed25519 SSH klíčů
Na počítači (Widnows / Macbook / Linux), na kterém nejste k serveru skrze SSH připojeni (pokud jste, odhlaste se), v příkazovém řádku nebo terminálu, zadejte příkaz
ssh-keygen -t ed25519 -C "your_email_address@example.com, PC name"
, kde parametr -t definuje typ klíče ed25519, a dobrovolný parametr -C poznámku, k jakému uživateli a počítači je klíč vázán.Potvrďte / určete novou cestu a název souboru (aby jste je snadno rozpoznali), kde mají být klíče uloženy a v dalším kroku vymyslete, zadejte a opětovným zadáním potvrďte bezpečnostní frázi, která se stane samotný heslem privátního SSH klíče. Buďte si dále vědomi, že zadabou bezpečnostní frázi v případě zapomenutí nelze obnovit.
Do zadané složky v kroku výše se vygenerovaly 2 SSH klíče.
Zjištění veřejného klíče
Veřejný SSH klíč je soubor s koncovkou ".pub". Obsah veřejného klíče zjistíme jeho otevřením skrze Příkazový řádek na Windows
type %USERPROFILE%\.ssh\nazev_souboru.pub
popř. terminálu na Linux / Mac OScat ~/.ssh/nazev_souboru.pub
. Veřejný klíč začíná typem "ssh-ed25519 AAAAC..."-
Vzdáleně se přihlásíme k serveru pomocí uživatelského jména a hesla
- Připojíme počítač (z kterého se vzdáleně připojujeme) a server do stejné lokální sítě (totožného routeru)
- Spustíme Putty klienta nainstalovaného v počítači, přejdeme na záložku "Sessions".
- Zadáme pole "Host" značící IP adresu serveru (zjistíme v routeru) a port, skrze nějž se k serveru připojujeme (výchozí je 22 - v dalších krocích jej zakážeme, nyní jej však použijte).
- V otevřeném okně příkazového řádku zadejte uživatelské jméno a heslo pro připojení k serveru (bylo definováno při instalaci serveru)
Nahrání veřejného klíče na server
- Na serveru vytvoříme příkazem
mkdir -p ~/.ssh
složku pro uložení veřejných SSH klíčů. - Příkazem
nano ~/.ssh/authorized_keys
otevřeme soubor authorized_keys a vložíme do něj veřejný klíč zjištěný v kroku 1. (vkládáme celý řádek, začínající ssh-ed25519 ...) - Soubor "authorized_keys" stisknutím kláves ctrl+x uložíme a zavřeme.
- příkazem
exit
připojení k serveru ukončíme
- Na serveru vytvoříme příkazem
Vzdálené přihlášení k serveru pomocí privátního SSH klíče
Používáme-li OS Windows a Putty klienta, námi vygenerovaný formát privátního klíče v kroku 1 (soubor bez koncovky) není ve formátu podporovaném Putty klientem. Je tedy nezbytné si jej převést, a to následujícím způsobem:
- Příkazem
type %USERPROFILE%\.ssh\nazev_souboru
si zobrazíme privátní klíč a celý tak, jak je, včetně "-----BEGIN OPENSSH PRIVATE KEY-----" a "-----END OPENSSH PRIVATE KEY-----" zkopírujeme do .txt souboru, který si uložíme. - Stáhneme program "puttygen.exe (a RSA and DSA key generation utility)" z oficiálního Putty webu.
- Otevřeme stažený program "PuTTY Key Generator", dole vybereme typ "EdDSA" → (Ed25519). V horní liště zvolíme možnost "File → Load private key". Přepneme na zobrazení "All FIles (*.*)" a vybereme .txt soubor, do nějž jsme privátní klíč v předchozím kroku uložili. Zadáme passphrase, kterou jsem definovali při tvorbě klíče. Jestliže vše prošlo, dostaneme upozornění "Successfully imported foreign key...".
- Stiskneme tlačítko "Save private key" a privátní SSH klíč v Putty podporovaném .ppk formátu uložíme opěd do složky .ssh. Je-li něco nejasné, postup se screenshoty naleznete zde.
- Otevřeme Putty klient, přejdeme do sekce "Connections → SSH → Auth → Credentials" a v poli "Private key file for authentization" zvolíme "Browse" a vybereme .ppk soubor uložený v předchozím kroce.
- Přejdeme do sekce "Session", zadáme pole "Host" a "Port", a po stisknutí tlačítka "Open", v nově otevřeném příkazovém okně zadáme uživatelské jméno (login as:), načež namísto požadavku na heslo bychom měli vidět identifikaci veřejného klíče, v rámci něhož se připojujeme s požadavkem na vložení passphrase.
- Zadáme passhprase a přihlásíme se.
- Příkazem
-
Zakázání vzdáleného přihlašování přes uživatelské jméno a heslo
Zákaz přihlašování pomocí hesla se provádí zásahem do konfiguračního souboru. Samotnou změnou nedojde k automatickému odhlášení, přesto, z bezpečnostních důvodů je vhodné být k serveru připojen ve 2 instancích (2 oknech), aby jste v případě testovacího odhlášení se v jednom a nemožnosti se opětovného přihlášení měli stále možnost navrácení provedených změn z druhého okna.
- Příkazem
sudo nano /etc/ssh/sshd_config
otevřete konfiguraci SSH serveru. Jelikož používáme na začátku příkazu "sudo", otevíráme soubor se změnovými právy a tedy v případě nové session po nás bude vyžadováno uživatelské heslo (to heslo, s kterým jsme se dříve přihlašovali). - Najdeme záznam
#AuthorizedKeysFile
a odkomentujeme jej odstraněním#
z jeho začátku - Najděte záznam
KbdInteractiveAuthentication
a nastavte jej na hodnotuno
. Současně se ujistěte, že není zakomentován (nezačíná #) - Najděte záznam
PasswordAuthentication yes
a změňte jej na hodnotuno
. Ujistěte se, že není zakomentován (nezačíná #) - Ujistěte se, že záznam
PermitRootLogin
má hodnotuprohibit-password
(PermitRootLogin prohibit-password
) - Soubor ukončete příkazem ctrl+x a při ukončování uložte.
Zadejte příkaz
sudo sshd -T | grep -i passwordauthentication
a ověřte, že jeho výpisem je záznam "passwordauthentication no".V tomto nastavení je možné k serveru přistupovat jak pomocí kombinace username + private key, tak i klasicky username + password. Chceme-li, aby byla možná varianta jen s použitím privatekey, na konci souboru
/etc/ssh/sshd_config
je nutné definovatAuthenticationMethods publickey
.- Restartujte SSH server příkazem
sudo systemctl restart sshd
- Odhlaste se příkazem
logout
. - Při opětovném přihlášení bez public key by jste měli dostat po zadání uživatelského jména chybovou hlášku "No supported authentization methods available (server sent: publickey)". Při použití privatekey by přihlášení mělo být úspěšné.
- Poznámka: Přihlášení pomocí uživatelského jména a hesla je stále možné lokálně - pomocí klávesnice připojené k serveru
- Příkazem
-
Změna defaultního SSH portu (22)
Port 22 je používán v případě SSH připojení jako defaultní. Jinými slovy, jde o první port, který případný útočník testuje. Dobrou praxí je tedy tento port změnit, a to na hodnotu mezi 1024 a 49151. To se provede následujícím způsobem:
sudo ss -tulpn | grep ':YourSSHPortNumber'
, např:sudo ss -tulpn | grep ':1234'
.Jestliže je port již obsazen, dostaneme červeně upozornění. Pokud je volný, odpověď bude prázdná. V takovém případě jej můžeme nastavit v souboru
sudo nano /etc/ssh/sshd_config
skrze klíčPort
.Změna nabyde v platnost restartem SSH serveru příkazem
sudo systemctl restart ssh
. Nyní při přihlašování používejte namísto portu22
nově zvolený port. Nastavení 2-faktorového ověření (2FA)
2FA je po vložení přidání požadavku na dodatečný autentizační kód. Ten získáme z aplikace Google Authentizátor. Vygenerování a získání 2FA klíčů pro server a mobilní telefon získáme následujícím způsobem:
- Do mobilního telefonu si nainstalujte aplikaci "Google Authenticator" od vydavatele Google.
- Na serveru nainstalujeme příkazem
sudo apt install -y libpam-google-authenticator
balíček Google authentizátoru Jestliže chceme 2FA u lokálního přihlašování, záznam
auth required pam_google_authenticator.so
vložíme dosudo nano /etc/pam.d/common-auth
. Přidaná část je vyznačena tučně. Jestliže jej vložíme na začátek, viz vyznačená část níže, 2FA kód bude vyžadován před heslem. Jestliže jej vložíme na konec souboru, 2FA bude vyžadováno až po zadání hesla.... # pam-auth-update to manage selection of other modules. See # pam-auth-update(8) for details. # Enable Google Authenticator auth required pam_google_authenticator.so # here are the per-package modules (the "Primary" block) ...
Jestliže 2FA chceme jen u vzdáleného přihlašování, záznam
auth required pam_google_authenticator.so
vložíme do konfiguračního PAM (pluggable authentication modules) souborusudo nano /etc/pam.d/sshd
. V něm si povšimněme záznamu@include common-auth
, který jsme možná aktualizovali v bodě výše - pokud ano, záznamauth required pam_google_authenticator.so
je načítán již s tímto souborem - tedy v případě definovaného 2FA u lokálního přihlašování je 2FA automaticky definováno i u vzdáleného přihlašování. Pokud jsme do onoho soboru tento záznam nevkládali (nechceme 2FA u lokálního přihlašování), můžeme jej vložit přímo do tohoto souborusudo nano /etc/pam.d/sshd
, který poté bude vypadat následovně:# PAM configuration for the Secure Shell service # Standard Un*x authentication. @include common-auth # Enable Google Authenticator auth required pam_google_authenticator.so # Disallow non-root logins when /etc/nologin exists. account required pam_nologin.so
Poznámka: Nechceme-li dále vyžadovat heslo při vzdáleném přihlašování, záznam
@include common-auth
můžeme zakomentovat (Pohlídejte si však, že záznam pro 2FA máte i v souborusudo nano /etc/pam.d/sshd
.Klávesovou zkrátkou ctrl+x soubor uložíme a opustíme
-
Příkazem
sudo nano /etc/ssh/sshd_config
otevřeme konfigurační SSHD soubor a ujistíme se, žeKbdInteractiveAuthentication
je nastaven na možnostyes
Dále, na konec onoho souboru vložíme záznam
AuthenticationMethods keyboard-interactive:pam
. Jestliže máme aktivován i public key, můžeme jeho vyžadování vyžadovat záznamemAuthenticationMethods publickey,keyboard-interactive:pam
.Klávesovou zkratkou ctrl+x soubor uložíme a ukončíme.
-
Na serveru zavoláme příkaz
google-authenticator
a zvolíme možnosty
pro "time based tokens". - Otevřeme Google Authenticator aplikaci na mobilním telefonu a možností "+ (Přidat) → naskenovat QR kód" si vložíme do telefonu propojení se serverem.
- QR kód je difinován bezpečnostním klíčem (secret key), který je zobrazen pod daným QR kódem. Tento kód si opíšeme.
- Na základě vyzvání vložíme kód zobrazený v Google Authenticátor aplikace na server.
- Zobrazených záchranných 5 osmímístných kódů si spolu s secret key (2 body výše) pečlivě uschováme pro možnost použití v případě ztráty telefonu.
- na výzvu ohledně aktualizace souboru
/*username*/.google_authenticator
odpověztey
- Na výzvu ohledně zákazu opětovného použití kódů odpovězte
y
- Na výzvu ohledně časového posunu (time skew) odpovězte
n
- Na výzvu ohledně rate-limitingu odpovězte
y
- Příkazem
sudo systemctl restart sshd
se provede restart sshd. - Příkazem
sudo systemctl restart ssh
se provede restart SSH. - Nyní je aktivováno 2FA při přihlašování a sudo příkazech.
Nastavení Firewallu
Ubuntu servery mohou používat uncomplicated firewall (UFW) bránu k omezení příchozího provozu na server. Brána firewall tedy pomáhá zabránit nechtěným připojením k vašemu serveru. Nainstalovaná by měla být již ve výchozím stavu, příkazem sudo apt install ufw
se o tom ujistíme.
Aplikování výchozího nastavení pro UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
V tomto stavu je veškerý příchozí traffic zakázán a odchozí povolen. Nutným krokem je povolení portu pro SSH přihlášení na TCP protokolu. Výchozím portem pro připojení je port 22, v rámci bezpečnosti však může být změněn. Používaný port zjistíte v souboru sudo nano /etc/ssh/sshd_config
- hledejte parametr Port. Povolte příchozí traffic na něj příkazem sudo ufw allow YourSSHPortNumber/tcp
, např. sudo ufw allow 1234/tcp
. Současně můžete zakázat tcp na výchozím portu 22 příkazem sudo ufw deny 22/tcp
(nepoužíváte-li jej).
Nastavení UFW portů
Obsazenost jednotlivých portů lze zjistit příkazem sudo ss -tulpn | grep ':PortNumber'
, např: sudo ss -tulpn | grep ':1234'
. Pokud je odpověď prázdná, port je volný.
Tok na jednotlivých portech se nastaví příkazem sudo ufw allow <PortNumber>
, např.sudo ufw allow 3000
. Pro zákaz toku je příkaz sudo ufw deny <PortNumber>
, např. sudo ufw deny 3000
. Za číslo portu lze specifikovat i protokol, např: sudo ufw allow 3000/tcp
.
Aktuální nastavení portů zjistíte příkazem sudo ufw status numbered
. Jestliže některé z pravidel potřebujete odstranit, použijte příkaz sudo ufw delete {rule-number-here}
(např: sudo ufw delete 2).
Povolení UFW firewallu
UFW firewall se povoluje příkazem sudo ufw enable
.
Další možnosti nastavení (např. pro IP restrikce a povolení [sudo ufw allow from XXX.XXX.XX.XXX to any port XX
]) najdete v tutoriálu UFW Essentials: Common Firewall Rules and Commands.
Pravidelné aktualizace SW
Jako v každém operačním systému, i u Ubuntu Server se objevují nedostatky a zranitelnosti, na něž vývojáři vydávají průběžné záplaty. nejde přitom jen o samotný operační systém, ale i veškeré balíčky v něm nainstalované.
sudo apt -y update && sudo apt -y upgrade
- Instalace posledních aktualizací již nainstalovaných balíčkůsudo apt dist-upgrade && sudo apt autoremove
- Hloubková aktualizace balíčků zahrnující rovněž změny v nainstalovaných balíčcích a konfiguraci systému. "sudo apt autoremove" následně odstraní veškeré starší (již nepotřebné) verze balíčků, které byly upgradem nahrazeny.cat /var/run/reboot-required
- Ověření potřeby restartu systému. Jestliže je výstupem "No such file or directory", restart není nutný. V případě výstupu "*** System restart required ***" je vhodné v co možná nejbližším možném termínu provést restart systému, a to například pomocí příkazusudo reboot
.
Výzva k instalaci aktuálních záplat, stejně jako restartu systému, je vždy zobrazena po přihlášení do systému. Jestliže chcete nastavit automatickou aktualizaci balíčků, lze použít nástroj unattended-upgrades
.
Nastavení VPN
VPN, neboli Virtual Private Network, je zabezpečené a šifrované spojení mezi dvěma nebo více počítači, které umožňuje bezpečný přenos dat přes veřejné sítě, jako je internet.
Co mi VPN přinese?
VPN umožňuje serveru přistupovat k internetu z jiného umístění, díky čemuž umožňuje přístup k internetovým stránkám a službám, které by jinak byly nedostupné nebo jinak omezené z místní sítě.
VPN skrývá skutečnou IP adresu a lokaci zařízení, čímž chrání soukromí a zvyšuje bezpečnost při používání veřejné sítě (hrozby jako hackerské útoky, sledování internetového provozu nebo monitoring komunikace).
Základní Operace v Ubuntu Server
Obecné:
- Úvodní systémová obrazovka:
landscape-sysinfo
- CPU architektura:
uname -m
- Monitorování procesů a výkonu:
htop
,top
,lscpu
- Seznam uživatelů:
less /etc/passwd
- Vypmnutí serveru:
sudo poweroff
Filesystem
- Přejdi do složky:
cd /cesta/do/slozky
. Přejdi do domovské složky:cd ~
. Přejdi do nadřazené složky:cd ..
. - Vytvoř složku:
mkdir -p cesta/do/adresare/nazev_nove_slozky
. Dobrovolný parametr-p
při příkazumkdir
určuje, aby systém vytvořil adresáře v cestě, kterou specifikujete, i v případě, že nadřazené adresáře neexistují. Pokud cesta obsahuje více adresářů, neexistující adresáře budou automaticky vytvořeny. Tímto způsobem můžete vytvořit celou strukturu adresářů najednou. - Odstraň složku:
rmdir /cesta/k/slozce
pro prázdnou složku,rm -r /cesta/k/slozce
pro složku včetně souborů. - Využití disku:
df -h
- Stav disku (na adrese
/dev/nvme0
):nvme smart-log /dev/nvme0
- Velikost souborů:
du -bsh /cesta/k/slozce
, strukturovaně:du -chd 1 | sort -h
- Kontrola obsahu a velikosti souborů ve složce:
ls -lh /cesta/do/slozky
- Zobrazení celého textového souboru:
cat myfile.txt | less
Teplotní management
- Hodnoty teplot ze senzorů:
sensors
Správa uživatelů - Users management
Dobrou praxí a současně bezpečnostním opatřením u všech uživatelů a běžících služeb na serveru nevyžadujících kompletní "root" privilegia je vytvoření separátního účtu určeného pro jejich vlastní chod.
- Zobraz všechny existující uživatele a skupiny systému:
cat /etc/passwd
- seznam účtů systému včetně uživatelských informacícompgen -u
- seznam účtů bez dalších informacícompgen -g
- seznam uživatelských skupin bez dalších informacígroups <userName>
- výpis uživatelských skupin, do nichž daný uživatel spadá
- Vytvoření uživatele
- Běžný uživatel (člověk)
adduser <userName>
- Vytvoření běžného uživatele bez administrátorského přístupuusermod -aG sudo <userName>
- Udělení administrátorských práv uživateli jeho přidáním do skupiny sudo (smí užívat příkazsudo
).
- Uživatel Služby (služba)
sudo useradd --no-create-home --shell /bin/false <serviceName>
- Vytvoření uživatele služby.--no-create-home
určuje, že se nemá vytvářet domovský adresář pro uživatele <serviceName>--shell
může být zkráceno na-s
. Adresa za parametrem--shell
určuje, jaký shell (příkazová řádka) bude použit pro uživatele./bin/false
- vrací při požadavku okamžitě neúspěch a neumožňuje uživateli interaktivní přihlášení./sbin/nologin
- brání uživateli v přihlašování do systému, přesto systémové skripty se s uživatelem mohou stále spojit a provádět svou funkcionalitu v rámci systému.
sudo chown -R <userName>:<userName> /var/lib/<serviceFolder>
- Nastavení "modify" přístupu uživatele služby k adresáři službysudo nano /etc/systemd/system/<serviceName>.service
- konfigurační soubor služby
- Běžný uživatel (člověk)
sudo visudo
- umožňuje explicitně specifikovat oprávnění pro jednotlivé uživatele (jde o alternativu k umístění uživatele do skupiny sudo)
sudo deluser <userName>
- odstranění uživatelesudo deluser --remove-home <userName>
- odstranění domovského adresáře uživatelesudo deluser <uzivatel> <skupina>
- odstranění uživatele ze skupiny
Správa oprávnění uživatelů
ls -l
- Zjištění oprávnění a vlastnictví jednotlivých souborů a složek v adresářisudo chown <userName>:<userName> soubor/slozka/cesta
- přiřazení vlastnictví k uživateli.sudo chown -R <userName>:<userName> soubor/slozka/cesta
Dobrovolný parametr-R
značí rekruzivní změnu vlastnictví, tedy přidání shodného vlastnictví i na všechny poddružené složky daného adresáře.sudo usermod -aG <userName> <serviceName>
- přidání uživateli služby oprávnění uživatele
Správa oprávnění k přístupu k souborům
sudo chmod 600 <file>
- číst a zapisovat může pouze vlastníksudo chmod g+r <file>
- zapisovat může pouze vlastník, číst mohou kromě vlastníka i uživatelé skupiny
Network
ip r
,ip.a
Připojení a odpojení USB flash disku
Připojení flash disku k Ubuntu serveru
sudo fdisk -l
= Zobraz seznam připojených (oddílů) disků včetně velikosti (-l) k počítačisudo mkdir /media/usb
= Vytvoř novou složku, která bude sloužit jaké cílová složka připojeného flash disku:sudo mount -t vfat /dev/sda1 /media/usb -o uid=1000
= Připevni vsunutý flash disk (/dev/sda1
ve formátu typuvfat
s nastavením vlastnických oprávnění k přístupu k souborům-o uid=1000
) k cílové složce z bodu výše (/media/usb
).ls /media/usb
= Zobraz soubory ve složce.
Nyní lze přistupovat k souborům flash disku prostřednictvím odkazovaním na soubory ve složce
/media/usb
.Vysunutí USB flash disku z Ubuntu Serveru
Vysunutí USB flash disku se provede jedním z následujících příkazů:
sudo umount /dev/sda1
sudo umount /media/usb
*Adresy jsou samozřejmě odvislé od adres použitých při připojení.
Vytvořenou sloužku pro připojení USB flash disku lze nyní bezpečně smazat příkazem
sudo rmdir /media/usb
.
Kopírování souborů a složek - příkaz cp
(=copy)
Syntaxe příkazu copy (kopírování) je cp [OPTION] Source Destination
. Kopírování je synonymem duplikování, a to v rámci jednoho adresáře i napříč adresáři. Kopírovat lze jak soubory, tak i celé složky. Příklady:
- Zkopíruj složku, včetně všech souborů, v rámci jednoho adresáře:
cp slozka tatazSlozkaSnovymNazvem
- Zkopíruj veškeré soubory ze složky na usb disku do složky v home adresáři:
cp -r /media/usb/mojeSlozka/* ~/slozkaVhome
.- Poznámka 1: - jestliže "slozkavHome" v home adresáři (~) neexistuje, je příkazem cp automaticky vytvořena.
- Poznámka 2: - neceme-li kopírovat všechny soubory, můžeme konkrétní soubory ke kopírování specifikovat:
cp [OPTION] Source-1 Source-2 Source-3 Source-n Directory
Možnosti kopírování [OPTION]
-i
(Interactive): aktivuje interaktivní kopírování, kdy systém v případě přepisu souborů v cílovém adresáři se uživatele dotazuje na akci (přepsat / přeskočit)-b
(Backup): cp příkaz společne s kopírováním tvoří v koncovém adresáři rovněž zálohu, a to s použítím rozdílného názvu a formátu-f
(Force): umožňuje nucené kopírování souborů, u nichž nemá uživatel oprávnění zápisu (v koncové destinaci)-r
(diRectory): kopírování celých adresářů-p
(Preserve): Zachovává metadata souborů (čas poslední úpravy, přístupu apod) při kopírování, avšak pouze v případě kopírování pod root uživatelem.*
Zástupný znak hvězdička představuje cokoli, tj. všechny soubory a adresáře. Tedy nahrazuje potřebu označování všech souborů jmenovitě a tím značně usnadňuje kopírování souborů a složek adresářů
Další užitečné příkazy
- Přejmenování adresáře:
sudo mv <stavajiciNazev> <novyNazev>
Systémový démon systemd
Systemd je systémový démon (init systém), jehož úkolem je spravovat procesy a služby na systému a zajistit jejich správné spouštění, sledování a ukončování.
Systemd je navržen jako náhrada tradičního systému init (initd) Jeho cílem je zlepšit stabilitu, výkon a správu Linuxového systému. Systemd používá koncept jednotek (units) a unit souborů pro konfiguraci a správu služeb. Jednotka může představovat systémovou službu, mount point, zařízení nebo další systémovou entitu. Pomocí systemd je možné:
- Systemd umožňuje paralelní spouštění systémových služeb, což zrychluje startování systému a zlepšuje celkový výkon.
- Systemd umožňuje definovat a spravovat závislosti mezi jednotlivými službami. To zajišťuje, že služby jsou spouštěny v pořadí, které respektuje jejich závislosti.
- Pokud služba selže, systemd je schopen ji automaticky restartovat, pokud je to konfigurováno.
- Systemd poskytuje pokročilý mechanismus pro sledování stavu služeb. Může automaticky detekovat a restartovat služby, které se zasekly nebo skončily s chybou.
- Systemd obsahuje vlastní plánovač úloh (systemd-timers), který umožňuje definovat a spouštět periodické úlohy a plánované akce.
- Systemd poskytuje funkce pro správu kontejnerů a orchestrování, což umožňuje běh aplikací v izolovaném prostředí.
Základní práce se systémovým démonem
- Adresář systémových démonů:
/etc/systemd/system
- Vytvoření / náhled / editace systemd souboru služby:
sudo nano /etc/systemd/system/<nazevSluzby>.service
. - Reload daemondu po aktualizaci konfigurace služby:
sudo systemctl daemon-reload
- Správa systémové služby:
sudo systemctl start <nazevSluzby>
- Spuštění službysudo systemctl stop <nazevSluzby>
- Zastavení službysudo systemctl restart <nazevSluzby>
- Restart službysudo systemctl enable <nazevSluzby>
- Aktivace automatického spuštění služby na start Ubuntu systémusudo systemctl disable <nazevSluzby>
- Deaktivace automatického spuštění služby na start Ubuntu systému
- Kontrola stavu služby:
systemctl status <nazevSluzby>
- Náhled do logu služby:
journalctl -fu <nazevSluzby>
Bash/Shell scripty
Bash skript je soubor obsahující sekvenci příkazů, které jsou prováděny programem bash řádek po řádku synchronně (následující příkaz se spustí až po dokončení předchozího). Bash skript tedy umožňuje provádět řadu akcí, jako je navigace do konkrétního adresáře, vytvoření složky a spuštění procesu pomocí příkazového řádku.
Bash script je soubor s koncovkou .sh
. Vytvoři jej lze následujícím příkazem: sudo nano /cesta/do/adresare/<nazev_skriptu>.sh
#!/bin/bash
# Sudo příkaz 1
sudo příkaz_1
# Sudo příkaz 2
sudo příkaz_2
# Sudo příkaz 3
sudo příkaz_3
Pokud v průběhu vykonávání skriptu dojde k chybě při provádění některého z příkazů, skript se může zastavit a ukončit se. Standardně bash vrací návratovou hodnotu (exit code) 0, pokud příkaz proběhl úspěšně, a nenulovou hodnotu, pokud se vyskytla chyba. Tuto návratovou hodnotu lze zkontrolovat pomocí proměnné $?.
if [ $? -eq 0 ]; then
# do something
else
# do something else
fi
Přerušit skript lze take s použitím set -e na začátku skriptu. Tato volba způsobí, že skript se okamžitě ukončí, pokud dojde k chybě při provádění libovolného příkazu.
Nastavení oprávnění pro spuštění scriptu v systému Unix/Linux
sudo chmod +x <nazev_skriptu>.sh
chmod
Je zkratkou pro "change mode" a slouží k úpravě oprávnění souboru nebo adresáře.+x
Přidává oprávnění pro spouštění (execute) pro uživatele, který je vlastníkem souboru.<nazev_skriptu>.sh
Je název skriptu, pro který se oprávnění pro spouštění nastavuje.
Spuštění bash příkazu
Při nastavením oprávnění ke spuštění souboru (sudo chmod +x <nazev_skriptu>.sh
) lze vykonávání bash scriptu spustit příkazem ./<nazev_skriptu>.sh
. Jestliže vám script jde spustit při volání z téhož adresáře (./
), ale už ne pomocí celé cesty, je možné, že script není načten v seznamu systémových proměnných. Pomoci může odhlásit se a opětovně přihlásit.
Příklad Shell scriptu pro zastavení vybraných procesů
sudo nano manageSelectedServices.sh
#!/bin/bash
## Start, stop or restart all specified services on this PC
## declare an array of services
declare -a services=("serviceName1" "serviceName2" "serviceName3" ...)
## declare processed action and printedActionString
serviceAction=$1
serviceActionString="stopped"
## check action definition
if [ -z "$serviceAction" ]; then
echo "missing ACTION parameter: $0 <action>. Supported actions: [start,stop,restart]"
exit 1
fi
## verify required action support and define action string
if [[ $1 == start ]]; then
serviceActionString="started"
elif [[ $1 == stop ]]; then
serviceActionString="stopped"
elif [[ $1 == restart ]]; then
serviceActionString="restarted"
else
echo "Error: requested action $1 is not supported"
exit 1
fi
## now loop through the above array
for i in "${services[@]}"
do
echo "Service: $i"
sudo systemctl $serviceAction $i
if [ $? -eq 0 ]; then
echo "$i $serviceActionString | $i status: $(systemctl is-active $i)"
# do something more, if needed
else
echo "Error: $i not $serviceActionString. Auto process stopped"
exit 1
fi
done
echo "Batch completed. All requested services succesfully $serviceActionString."
- Start services:
./manageSelectedServices.sh start
- Stop services:
./manageSelectedServices.sh stop
- Restart services:
./manageSelectedServices.sh restart
Styling echo výpisu v Bash scriptu
## echo styling
greenClr='\033[0;32m'
echo -e "${greenClr}Service launched \e[0m"
kdy \e[0m
je ukončení zbarvení
Umožnění automatického provedení sudo příkazu systémovým uživatelem bez nutnosti hesla
sudo visudo -f /etc/sudoers.d/<serviceName>
- otevření konfiguračního souboru a jeho úprava pomocí nástroje visudo obsahujícího konfiguraci oprávnění pro příkazsudo
-
Cmnd_Alias ACT_RESTART = /usr/bin/systemctl restart <serviceName> Cmnd_Alias ACT_STOP = /usr/bin/systemctl stop <serviceName> <serviceUser> ALL=(ALL) NOPASSWD: ACT_RESTART, ACT_STOP
Výše uvedená konfigurace v
/etc/sudoers
umožňuje uživateliserviceUser
spouštět příkazy pro restart a zastavení určitých služeb (<serviceName>
) pomocí příkazových aliasůACT_RESTART
aACT_STOP
bez zadávání hesla. S pomocí otevření v nástrojivisudo
je aktivována kontrola syntaxe.
Nastavení zkratek přístupu ke klientům
sudo nano ~/.profile
- otevření konfiguračního souborualias <cmndShortcut>="<full command>"
- na konci souboru~/.profile
- Klíčové slovo
alias
indikuje, že definujeme nový alias. <cmndShortcut>
(např.mcl
) slouží jako zkrácený název pro vykonání<full command>
- Klíčové slovo
source ~/.profile
- požadavek přenačtení profilu