První kroky v terminálu
Terminál, konzole, příkazový řádek
Vítej v terminálu, hackermane!
Nyní začínám kombinovat oslovení v množném i jednotném čísle, nelekej se, jsme kolegové!
V tomto fešném prostředí prožiješ následující roky studia kybernetické bezpečnosti. Vím, vypadá to děsivě, ale neboj se, ovládání terminálu Tě bude vskutku bavit. V nadpisu zmiňuji tři různé pojmy, v kontextu dnešní doby všechny z nich znamenají takřka totéž. Úplně nejpřesnějším označením „toho“, kam budeš psát své příkazy, je anglické slovíčko „shell“. Jde o textové (tudíž negrafické) rozhraní, které Ti dává prostor ovládat právě nainstalovaný a běžící Linux.
Aby Ti byly významy pojmů z nadpisu naprosto jasné, uvedu, že terminálem se v začátcích doby počítačové označovaly zařízení sestávající z prostého monitoru a klávesnice, prostřednictvím kterých se lidé, obsluhující mnohdy velké sálové počítače, připojovali právě k těmto počítačům. Předávání dat napříč terminálem a počítačem zajišťovala sériová linka.
Konzole je pak jakýsi vzhled terminálu, zahrnující také způsob předávání dat (tedy textově). Pojem příkazový řádek je Ti jistě známý z prostředí operačního systému Microsoft Windows a je prakticky synonymem pro konzoli. Dále se můžeš setkat s pojmem prompt, který, jak již název napovídá, čeká na zadání nějakého uživatelského vstupu, aby jej mohl počítač zpracovat.
Z předchozího odstavce proto vyplývá důležitá podstata celého našeho následujícího snažení – prostřednictvím terminálu zasíláme textové příkazy, kterými ovládáme počítač a říkáme mu, co má vykonat.
Začíná přituhovat – jdeme na věc!
Orientace v terminálu a první příkaz pwd
Při prvním spuštění terminálu na tebe dost pravděpodobně „vybafne“ spousta informací. Podstatné pro nás v tuto chvíli bude samotné zadávání příkazů. Nazývejme je odteď také commandy (command v jednotném čísle je synonymem pro příkaz). To se zpravidla odehrává hned za vypsaným promptem, který čeká na náš vstup. Vypadá asi nějak takhle
franta@pizzeria:~$
Obecně jej můžeme zapsat následovně
uzivatel@pocitac:cesta$
Tento prompt vypisuje Linux vždy automaticky. Za dolarem na konci následuje mezera a za ní bliká kurzor či podtržítko, které čeká na zadání nějakého commandu (nebo-li příkazu, jak jsme si ujasnili výše).
V každém okamžiku, kdy máme otevřený terminál, se nacházíme v nějaké složce. Ta je zvýrazněna oranžovou barvou. Vypisuje se zde buďto absolutní cesta na disku nebo relativní cesta vypisující se z Tvého domovského adresáře.
Vraťme se k první ukázce. Vidíme, že aktuálně spuštěný terminál má přihlášený uživatel franta, jeho počítač se jmenuje a má hostname pizzeria (takto jej vidí, vedle IP a MAC adresy, ostatní zařízení v rámci sítě) a nachází se ve složce ~
. Vlnovka v této situace značí, že se s terminálem nachází v jeho domovském adresáři. Pokud se uživatel jmenuje franta, pak se nacházíme aktuálně ve složce /home/franta
. Ve složce /home má svou podsložku drtivá většina běžných uživatelů Linuxu (o tom ale později).
Pokud bychom si chtěli ověřit, že vlnovka značí opravdu adresář /home/franta
, napíšeme za prompt (tedy za dolar) náš úplně první command, a to pwd
.
franta@pizzeria:~$ pwd
Stiskneme klávesu Enter pro zadání (odeslání počítači) příkazu. V terminálu se nám vypíše následující cesta
/home/franta
Nezapomeňme, že příkaz pwd můžeme použít kdykoliv a kdekoliv v rámci terminálu. Vždy nám vypíše, v jaké složce v rámci Linuxu se aktuálně s naším promptem nacházíme.
Pohyb v adresářích commandem cd
Nyní již víš, jak terminál operačního systému Linuxu vypadá a jak se v jeho prvotní podobě zhruba orientovat. Vysvětlili jsme si, jak poznáš, za jakého uživatele jsi přihlášený, jak se jmenuje Tvůj počítač, co je to příkaz/command a v jakém adresáři se aktuálně nacházíš.
Právě na složky a pohyb v nich se nyní zaměříme. Při spuštění terminálu se vždy ve výchozím nastavení budeš vyskytovat ve své domovské složce. Co když ale budeme potřebovat pracovat i se soubory mimo tuto složku, třeba v podadresáři anebo dokonce v nadřazeném adresáři?
Přichází na scénu command cd
. Je to zkratka dvou anglických slovíček „change directory“, tedy „změnit adresář“. Zkusme se tedy z adresáře /home/franta
přesunout v rámci terminálu do nadřazeného adresáře /home
. V podstatě máme dvě možnosti, a to pomocí uvedení absolutní či relativní cesty vůči naší aktuální a adresáře, do něhož se chceme přesunout.
Víme-li, pomocí commandu pwd
že se nacházíme ve složce /home/franta
a nadřazená složka je proto logicky pouze /home
, použijeme následující command využívající absolutní cestu. Většina příkazů přijímá argumenty s nimiž má pracovat. Jedním z argumentů je v tomto případě „/home
“
franta@pizzeria:~$ cd /home
Hotovo. Přesunuli jsme se do složky o úroveň výše. Můžeme si všimnout, že se nám změnil prompt a namísto vlnovky (značící domovský adresář /home/franta
) zde vidíme absolutní cestu
franta@pizzeria:/home$
Druhou zmiňovanou cestou je využití relativní cesty. Netřeba se ničeho bát, pouze se naučíme novou zkratku, jak „vyskočit“ o úroveň výše. Vraťme se tedy z aktuálního adresáře home
opět do našeho domovského adresáře. Nyní již víš, jak na to a zadáš následující příkaz
franta@pizzeria:/home$ cd franta
Zadali jsme relativní cestu „franta“, protože nyní již víme, že složka s názvem „franta“ se ve skutečnosti nachází ve složce „home“, v níž jsme se předtím nacházeli. Rázem se ocitneme opět v naší domovské složce a namísto absolutní cesty, kde se právě v terminálu nacházíme, se vypíše vlnovka značící, že jsme v našem domovském adresáři
franta@pizzeria:~$
Pojďme se nyní přesunout do nadřazené složky bez toho, aniž bychom věděli, že její absolutní cesta je /home
. Provedeme to pomocí zadání ../
– v podstatě se nejedná o složku, pouze o skok o úroveň výše do neznáma
franta@pizzeria:/home$ cd ../
Po stisknutí klávesy Enter se rázem ocitneme v adresáři /home
, který je nadřazený adresáři /home/franta
a prompt se nám změní na
franta@pizzeria:/home$
Výpis souborů v aktuálním adresáři příkazem ls
Aktuálně se nacházíme v, pro nás neznámém, adresáři /home
, který prakticky neznáme a nevíme, jaké další složky obsahuje. Tento adresář obsahuje domovské složky pro všechny uživatele v rámci systému Linux, kteří ji vyžadují (v rámci Linuxu existují i jiní uživatelé, kteří složku nepotřebují, ale o tom později). Předpokládejme, že máme v rámci našeho Linuxového počítače více uživatelů, tedy složka /home
obsahuje hned několik podsložek.
Jak to zjistíme? Pomocí commandu ls
, který je zkratkou pro anglické slovo „list“. Příkaz ls
proto vypisuje obsah adresáře, v němž se aktuálně nacházíme. Nyní Ti dává jistě větší smysl, proč je orientace v rámci složek v terminálu tak důležitá.
Vypišme si obsah složky /home
, ve které se aktuálně nacházíme. Provedeme to jednoduše
franta@pizzeria:/home$ ls
Stiskněme Enter. Vypíší se nám složky pojmenované dle dalších uživatelů tohoto počítače, například to může vypadat takto (včetně zadaného commandu a promptu)
franta@pizzeria:/home$ ls
david franta pepa marek
franta@pizzeria:/home$
Stejně jako u příkazu pwd
se nám vypisuje vrácený obsah do terminálu i u ls
. Skvěle. Stejně je to u všech dalších příkazů, u nichž očekáváme nějaký výstup. Vše se vypisuje do terminálu. K vypisování výstupů se vrátíme později, nyní si vyzkoušejme jednoduchou úlohu.
Úlohy - princip vlajek v rámci soutěží CTF
V rámci studia kybernetické bezpečnosti budeš velmi často zpracovávat úlohy, jejichž cílem je získat vlajku. Standardizovaným formátem vlajky myslím
flag{obsahNalezeneVlajky}
Kde obsahNalezeneVlajky
zpravidla obsahuje nějaký zajímavý text či náhodný řetězec. Důležitý je pro nás v tuto chvíli způsob zápisu této takzvané vlajky. Vždy se jedná o nějaký řetězec uvnitř složených závorek, jimž předchází zpravidla slovo „flag“ (česky „vlajka“) či jiné předem definované. Soubor úloh, kde sbíráš tzv. vlajky, nazýváme CTF soutěží. CTF znamená „Capture The Flag“, v překladu „Zmocni se vlajky“. Jednotlivá úloha se nazývá scénářem.
Aktuálně jsme se naučili, jak se pohybovat v adresářové struktuře a vypsat si obsah složky. Pojďme na naši první CTF úlohu. Co nevíš, se v průběhu úlohy naučíš.