Sziasztok! Mike vagyok, főleg a sysadminban tevékenykedek, de megtalálhatsz a Devteamben, Neteamben és Securiteamben is. Ez az előadássorozat a Linuxról szól és a mostani videóban szó lesz az UNIX-ról, a Linux felépítéséről, a felhasználók kezeléséről, az init rendszerekről (de főként a systemd-ről), service-ek kezeléséről, hálózatkonfigurációról és SSH-ról. Kezdjünk is bele! Mi is az UNIX? A korábbiakban szó volt arról, hogy "UNIX rendszer", de mit is jelent ez? Az UNIX egy '70-es években kifejlesztett rendszer, aminek mai változatai is léteznek, például a macOS, iOS és társai, illetve a BSD-k formájában. Ezek igazi UNIX-ok, hiszen kódot örökölnek az eredeti UNIX operációs rendszerből. Ezzel szemben a Linux-ok, UNIX-szerű operációs rendszerek, mert a Linux fejlesztése teljesen független az UNIX-tól, csupán az UNIX filozófiáját és viselkedését követik. A továbbiakban UNIX rendszer alatt az UNIX-szerű rendszerekre is gondolok a valódi UNIX-ok mellett. Mitől lesz valami UNIX-szerű? Két fontos elvet említenék, amik megtalálhatóak az UNIX-okban: Az első a KISS, vagyis a Keep It Simple, Stupid. Ennek a jelentése az, hogy írjunk, rövid, egyszerű programokat, amik kevés feladatot látnak el, de azokat jól. Ezeket a kicsit programokat a shell használatával úgyis össze tudjuk majd kötni és el is tudják egymást indítani. Ezt tapasztaltuk is, amikor a korábbiakban egymás után fűztünk kicsi programokat pipe-pal, vagy ahogy láthatóan a man a háttérben less-t használ a szöveg megjelenítésére. Ez azért hasznos, mivel így ha valamelyik része a rendszernek nem tetszik nekünk, azt könnyen ki tudjuk cserélni egy másik kicsi programra. Emellett, mivel ezek a programok kicsik és egyszerűek, kisebb a támadási felülete egy-egy programnak. A másik UNIX-os elem, amiről beszélnék, az az "everything is a file", vagyis minden egy file. Ezt azt takarja, hogy a gépen minden, legyen az RAM, diszkek, videokártyák, futó folyamatok vagy bármi más, mind elérhetőek mint egy file. Nézzünk is erre pár példát: Ha kiadom az lsblk parancsot, akkor az kilistázza a géphez csatlakoztatott diszkeket. Itt látszik egy olyan, hogy vda és vda1, illetve látszik, hogy vda1 van a /-be felcsatolva, ez a root. A Linuxos jelölésrendszerben a SATA diszkeket sd<és valami betű>-vel, NVMe SSD-ket nvme<szám>n<szám>-mal, virtuális diszkeket pedig vd<majd egy betű>-vel jelöljük, ezeken a partíciókat pedig SATA és virtuális diszkek esetén egy számmal, NVMe esetén pedig p és utána egy számmal jelöljük. Itt /dev/vda a diszk, /dev/vda1 pedig a partíció. Ha kilistázom a /dev-et, vagyis devices-t, ahol a hardverek fájljai élnek, akkor a sok más fájl közt ott van a vda és vda1 is. Ez azért hasznos, mivel így, ha például egy programot akarnék írni, ami biztonsági menti a diszkemet, akkor csupán a /dev/vda vagy hasonlót kéne másolnia a programomnak egy másik meghajtóra. Emellett a fájlrendszert nem érdekli, hogy ő egy diszken vagy egy fájlon van, így simán megtehetem, hogy egy fájlrendszeren belüli fájlon létrehozok és használok egy fájlrendszert. Most szeretnék az UNIX-ok architektúrájáról beszélni. Unixon a KISS-t követve, jóval modulárisabbak ezek a részek, mint mondjuk Windows-on. De mik is ezek a részek? Kezdjük a bootloader-rel. Ennek a feladata az, hogy betölti RAM-ba a kernelt és pár, a gép beindításához szükséges fájlt, emellet dual-boot esetén lehetőséget ad arra, hogy kiválasszuk, hogy mit tölt be. Ubuntu-n a bootloader a Grub. Miután a bootloader betöltötte a kernelt, esetünkben a Linuxot, a kernel inicializálja a hardvereket és önmagát, majd beindítja az init rendszert, ezután szépen a háttérben kezelgeti a hardvereket. Az init rendszer, esetünkben a systemd, pedig beindít minden szolgáltatást, ami a gép futásához kell, illetve amit kértünk. Például egy asztali gép esetén a grafikus felületet, vagy egy szerver esetén a webszervert. Az operációs rendszerek azon része, ami a kernelen kívül fut az az úgynevezett userland. Mivel az Ubuntu egy GNU/Linux oprendszer, így a userland alapját a GNU programok képezik. Ezek a programok közt van a cat, cp, rm, ls és sok egyéb olyan eszköz, amit elvárunk, hogy legyen egy shellben. Na de térjünk is át a szárazabb anyagról a gyakorlati részekre! Előszöris tanuljunk meg usereket kezelni. Hozzuk létre a Patrik usert. Ehhez root jogosultság szükséges, de szerencsére nekem az van. A patrik user létrehozáshoz a sudo useradd -m patrik parancsot kéne kiadni, azonban ezen lehet finomítani. Én szeretném, hogy Patrik ha shellt indít bash-t kapjon, ne sima sh-t. Ehhez a parancshoz hozzá kell adnom a -s /bin/bash parancsot is. Emellett szeretnék ha szeretnék patriknak jogosultságot adni ahhoz, hogy sambán megosszon mappákat, akkor hozzáadhatom a sambashare grouphoz a -G sambashare megadásával. Így létre is jött Patrik fiókja, de még nincs rajta jelszó, nem lehet belépni. Állítsunk neki jelszót! Más userek jelszavának állításához érthető okokból root jogosultság szükséges. Így hát kezdjük is azzal, hogy sudo. A passwd paranccsal tudunk jelszót állítani és argumentumként adjuk meg azt, hogy patrik, hiszen az ő jelszavát akarjuk beállítani. Adjunk meg neki valami jó biztonságos jelszót... mégegyszer... és most már van jelszava, be tud lépni. Mi van, ha a saját jelszavam szeretném megváltoztani. Ehhez érthetően nem kell root. Futtassuk a passwd-t paraméterek nélkül. Ami most újdonság, hogy megkérdi a korábbi jelszavunk, mivel nem használtunk sudo-t, de adjuk is meg neki. Most jöhet az új jelszó... és megint... És kész is vagyunk. Eközben rájöttem, hogy megbízok Patrikban és szeretnék neki root jogokat adni, vagyis hozzáférést a sudo parancshoz. Ehhez hozzá kell adnom a sudo grouphoz. Ezt megtehetem a sudo usermod -aG (vagyis add group) sudo patrik paranccsal. Tegyük fel, hogy mégse szeretném, hogy Patrik hozzáférjen ehhez a géphez. Töröljük a felhasználóját a sudo userdel -r patrik paranccsal. Az -r kapcsoló azt jelenti, hogy patrik home mappáját is szeretném törölni. Ha nem adom meg, akkor a fájljai rajt maradnának a gépen. Debian alapú disztrókon, így Ubuntun is van egy adduser script is emellett, ami talán egy kicsit kényelmesebben használható, azonban nincs minden gépen szemben a korábbi parancsokkal, amik gnu programok. Hozzuk létre újra patrik felhasználóját, de ezúttal az adduser paranccsal a useradd helyett. Ha kiadjuk, hogy sudo adduser patrik, akkor az adduser végigvezet minket a Patrik fiók létrehozásán. Most adjuk meg patrik jelszavát... Emellett csomó metaadatot is megadhatunk. A Full name azért külön mező, mivel az unixos felhasználónevek csak kisbetűs angol karaktereket tartalmazhatnak. Ez a full name jelenik meg például a bejelentkezőképernyőn. Most megint adjuk hozzá patrikot a sudo csoporthoz, viszont most ezt az adduser-rel tegyük. sudo adduser patrik sudo Király, meg is vagyunk. Most töröljük patrikot, de használjuk a deluser parancsot sudo deluser patrik kész. Most, hogy usereket tudunk kezelni, nézzük meg a csoportkezelést. Először is nézzük meg milyen csoportok tagjai vagyunk, ezt a groups-szal tehetjük meg. Nézzük meg, hogy Bélának milyen csoporttagságai vannak: ehhez a groups bela parancsot kell kiadni. Próbaként hozzuk létre a kszksok csoportot. sudo groupadd kszksok Nézzük is meg, hogy működött, csináljunk egy mappát és tegyük elérhetővé a csoport számára. létrehozok egy mappát mkdir test group ownerré teszem a kszksok-at sudo chgrp kszksok test és nézzük meg ls -la Most adjuk hozzá magunkat a csoporthoz. sudo usermod -aG kszksok mike Vegyük ki magunkat a tagok közül: