Skip to content
Snippets Groups Projects

2. videó segédlet

UNIX alapelvek

A Linux egy UNIX-szerű rendszer, ugyanazokra az alapelvekre épül, ezért beszélünk most róluk. Amiket ebben a fejezetben olvashattok egyaránt vonatkozik a UNIX-ra és a Linux-ra is.

Vannak különböző elvek, amik alapján egy UNIX operációs rendszert megalkotnak. A Linux is ezen elvek alapján készült.

  • Moduláris szemlélet figyelembe vétele
  • Válaszd szét a működést az előírásoktól, szabályzatoktól
  • Egy program legyen kicsi, egyszerű, átlátható, mégis robosztus
  • Szükség esetén, inkább az adatstruktúra legyen összetettebb, ne a program
  • Számolj a potenciális felhasználók felkészültségével
  • Kerüld el a szükségtelen mellékhatásokat
  • Ha a program összeomlik, mérhető, elemezhető legyen
  • A fejlesztő ideje fontosabb a gép idejénél
  • A programok kézi kódolása helyett írj absztrakt programot, amely megalkotja a kódot
  • Írj rugalmas és nyílt programokat
  • A programok, protokollok bővíthetőek legyenek

KISS (Keep it Simple, Stupid)

A legtöbb rendszer akkor működik a legjobban, ha azt egyszerűnek hagyják, és nem teszik egyre bonyolultabbá. Ezért az egyszerűségnek a tervezés egyik fő céljának kell lennie, és kerülni kell az olyan összetételeket, amelyekre nincs szükség.

Everything is a file

Ez azt jelenti, hogy a felhasználó fájljai, a rendszer könyvtárkatalógusai és a rendszerhez csatlakoztatott hardver eszközök, mint fájlok egységesen kezelhetőek.

Ezen megközelítés előnye, hogy ugyanazokat az eszközöket és API-kat széles körben fel tudjuk használni. Többféle fájltípus van, de bármelyik megnyitásakor egy állományleíró, ún. file descriptor jön létre. Így a fájl útvonala használható egy címkezelő rendszerként, és a file descriptor pedig a bájtfolyam I/O interfésze. De a file descriptor ugyanakkor létrehozható pipe és hálózati socketek megvalósítására is. Ennél fogva azt is mondhatnánk: Minden is egy file descriptor.

Kiegészítésképp, létezik egy sor pszeudo és virtuális fájlkezelő rendszer amelyek képesek bizonyos folyamatokról, rendszer információkról adatokat megjeleníteni, hiszen ezek is egyetlen fájl hierarchiába vannak csatolva.

Architektúra

A UNIX rendszereknél az operációs rendszer részei jóval függetlenebbek egymástól, mint mondjuk egy Windows alapú rendszernél.

De mik is ezek a részek?

Bootloader

Ez a legelső program, ami betöltődik, amikor a gépet bekapcsoljuk. A feladata a kernel és pár alapvető driver és program betöltése RAM-ba, majd a kernel elindítása. Dual boot esetén lehetőséget ad arra, hogy kiválasszuk melyik OS-t szeretnénk elindítani.
Az Ubuntu által használt bootloader a Grub.

Kernel

A kernel feladata a hardverek bekurblizása és kezelése, erőforrások szétosztása, jogosultságok behajtása és sok gyakran használt, hardverközeli teendőhöz függvényeket biztosítani (pl: hálózati csomagküldés, adatblokk beolvasása lemezről, stb.).
Az Ubuntu által használt kernel a Linux.

Init rendszer

Az init rendszer feladata az operációs rendszer szolgáltatásainak elindítása, felügyelete és kezelése. Ez indítja el a hálózatkezelőt és bejelentkezőablakot is például.
Az Ubuntu által használt init rendszer a systemd.

Userland

A userland egy nehezen behatárolható dolog. Igazából minden, az operációs rendszerrel jövő, nem kernelben élő szoftver a userland része. Ebbe beletartozik az init rendszer is, de mégse venném ide, mivel annak elég jól elkülönülő határai vannak.

Egy UNIX rendszer userland-ja alatt általában az alapvető programokat értjük, amik a rendszer és rajta futó programok használatához szükségesek.
Ilyen pélául az ls, cat, sh, cp, rm, stb.
Az Ubuntu GNU userland-et használ.

A többfelhasználós rendszer működése, kezelése

https://linuxhint.com/ubuntu-user-management/

Felhasználók kezelése

Létrehozás

sudo useradd <username> A useradd parancs segítségével hozzáadhatunk egy új felhasználót a rendszerhez. A <username> helyére az új felhasználó nevét kell írni.

A parancs nem hoz létre user mappát a /home-ban, de ha máshol szeretnénk, hogy legyen ez a mappa, az is megadható az useradd -m <username> kapcsolójával. Ezenkívül meg lehet adni, hogy a felhasználó milyen shellt akar használni bejelentkezés után, ezt a -s kapcsolóval lehet megadni. Mivel a bash-t szeretnénk hasznlni, akkor a -s /bun/bash-t kell megadni.

Ezután az új felhasználónak be kell állítani egy jelszót, ezt a sudo passwd <username> parancs kiadása után állítható be.

patrik@ubuntu:/home$ useradd -m -s /bin/bash mike 
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
patrik@ubuntu:/home$ sudo useradd -m -s /bin/bash  mike
patrik@ubuntu:/home$ sudo passwd mike
New password: 
Retype new password: 
passwd: password updated successfully
patrik@ubuntu:/home$

Törlés

sudo userdel <username>parancs segítségével eltávolíthatunk egy új felhasználót a rendszerből. Azonban ez csak a felhasználót törli a hozzá tartozó home mappát és egyébb fájlokat nem, ezt az -r kapcsoló megadásával tehetjük meg.

patrik@ubuntu:/home$ sudo userdel -r mike
[sudo] password for patrik: 
patrik@ubuntu:/home$

Jelszó megváltoztatása

sudo passwd <username> parancs segítségével megváltoztatható egy-egy felhasználó jelszava. Akkor ha csak annyit írunk, hogy passwd, azzal a bejelentkezett felhasználó jelszavát változtatjuk meg.

patrik@ubuntu:/home$ sudo passwd mike
[sudo] password for patrik: 
New password: 
Retype new password: 
passwd: password updated successfully
patrik@ubuntu:/home$ passwd
Changing password for patrik.
Current password: 
New password: 
Retype new password: 
passwd: password updated successfully
patrik@ubuntu:/home$ passwd
Changing password for patrik.
Current password: 
New password: 
Retype new password: 
Password unchanged
New password: 
Retype new password: 
You must choose a longer password
New password: 
Retype new password: 
Bad: new and old password are too similar
passwd: Authentication token manipulation error
passwd: password unchanged
patrik@ubuntu:/home$

A jelszó megadásánál van egy pár követelmény, aminek meg kell felelni. Ilyenek azok is, melyek fentebb láthatóak. A jelszó nem egyezhet meg a korábbival, nem lehet ahhoz nagyon hasonló, hosszúnak kell lennie, ha túl egyszerű azt se engedi (1234, asdasd...stb.).

Root jog "szerzése"

usermod -aG sudo <username> parancs segítségével hozzáadjuk a megadott felhasználót a sudo nevű csoporthoz.

patrik@ubuntu:/home$ sudo usermod -aG sudo mike

Vagy a létrehozás során adjuk meg a plusz group-ot useradd -m -G additional_groups -s login_shell username

Csoportok kezelése

groups username parancs megadásával megtudhatjuk egy felhasználó, mely csoportoknak a tagjai. A groups parancs önmagában a bejelentkezett felhasználó csoportjait mutatja meg.

patrik@ubuntu:~$ groups mike
mike : mike sudo
patrik@ubuntu:~$ groups patrik
patrik : patrik adm cdrom sudo dip plugdev lpadmin lxd sambashare
patrik@ubuntu:~$ groups
patrik adm cdrom sudo dip plugdev lpadmin lxd sambashare

cat /etc/group

Létrehozás

sudo groupadd <groupname> parancs segítségével lehet létrehozni egy új csoportot.

patrik@ubuntu:~$ sudo groupadd almafa
[sudo] password for patrik: 
patrik@ubuntu:~$ sudo cat /etc/group | grep alma
almafa:x:1002:
patrik@ubuntu:~$ 

Törlés

sudo groupdel <groupname> parancs segítségével eltávolíthatunk egy csoportot.

patrik@ubuntu:~$ sudo groupdel almafa
patrik@ubuntu:~$ sudo cat /etc/group | grep alma
patrik@ubuntu:~$

Felhasználók hozzáadása

sudo usermod -aG <groupname> <username> parancs segítségével felhasználót lehet hozzáadni a megadott csoporthoz.

patrik@ubuntu:~$ sudo usermod -aG almafa mike
patrik@ubuntu:~$ groups mike
mike : mike sudo almafa
patrik@ubuntu:~$ 

Felhasználók eltávolítása a csoportból

Superuser

Kicsit bővebben azon kívül, amit eddig mondtunk. Bár lehet, hogy a UNIX elvek után/ beleépítve is mehetne, hogy kb mi.

Init rendszer

A UNIX operációs rendszerben vannak olyan feladatok, amiket a háttérben (gyakran "észrevétlenül") futó folyamatok végeznek el. Ezeket a programokat daemon folyamatoknak is nevezik. Mivel ezeket a folyamatokat nem a terminálról indítják, általában a rendszerindításkor automatikusan indulnak el.

Egy szolgáltatás nem más, mint egy vagy több alkalmazás egy szerveren, amelyek vagy a háttérben várnak futásra várva, vagy valamilyen lényegi feladatot (taskot) lássanak el. Őket gyakorlatilag csak processzek közti kommunikáció során hívják meg.

Manapság a démonok (daemon) és a szolgáltatások (service) alatt ugyanazt a fogalmat értjük, mivel ezek a programok egyszerre démonok és szolgáltatások is.

Az init rendszer a legelső (és egyetlen) program, démon, amelyet a kernel indulása után elindít. Az ő feladata, hogy minden szükséges szolgáltatást, démont elindítson.

systemd

A systemd egy rendszer-előkészítő és rendszer-menedzselő szoftver (init rendszer), amely egy szabvány lett a Linux rendszerek számára, ma már szinte az összes disztribúció ezt használja, mivel számos előnye van elődeihez képest.

A systemd rendszer-előkészítő feladata, hogy a Linux kernel indulása után előkészítse az induló szolgáltatásokat. A rendszer-előkészítővel kezeljük a szolgáltatásokat, démonokat a rendszer futása közben. Azaz ez a systemd felel nagyon sok olyan háttérmunkáért, amiről sok esetben nem is tudunk, de szükségesek a rendszerhez, vagy egy-egy feladat indításához.

szolgáltatások, démonok, konfigfájlok

Megjegyzés: a .service-t nem kötelező kiírni

Vannak olyan programok, amit szeretnénk, a rendszerrel együtt indítani, a rendszerrel együtt szabályosan leállítani, valamint igény szerint kézzel indítani, leállítani, újraindítani.

systemctl the central management tool for controlling the init system

systemctl status <service_neve.service> Szolgáltatás indítása

systemctl start <service_neve.service> Szolgáltatás leállítása

systemctl stop <service_neve.service> Szolgáltatás újraindítása

systemctl restart <service_neve.service> Szolgáltatás státusza

systemctl enable <service_neve.service> Indítás a rendszerrel

systemctl disable <service_neve.service> Ne induljon a rendszerrel

journalctl

journalctl Naplók megjelenítése

journalctl -xe Hibák megjelenítése

journalctl -u <service_neve> Egy szolgáltatás logjainak megjelenítése

journalctl --since “1 hour ago” Egy időpont óta történt események

Hálózat alapszintű konfigurálása

Az esetek többségében ezt nem kell nekünk kézzel megcsinálni, hanem a network manager megoldja helyettünk (ezt rendesen át kell fogalmazni)

Rövid szöveg

Példa

Távoli hozzáférés (SSH)

A rendszerhez hozzáférhetünk távolról is, így is megkönnyítve a munkánkat, nem kell fizikailag az adott számítógépnél/szervernél lennünk. Erre többféle módszer is van, de a legbiztonságosabb és ma is leginkább használatos az ssh (feloldása ide, most nem jut eszembe).

Használata

  • ssh a_távoligépen_lévő_felhasználónk_neve@a_távoli_gép_neve
  • Megkérdezi a felhasználó nevünkhöz tartozó jelszót, ezt megadjuk ééééééééés bent is vagyunk
[patrik@patrik-laptop ~]$ whoami
patrik
[patrik@patrik-laptop ~]$ ssh hallgato@172.16.228.130                                                                                                                                       3944ms  2021. márc. 16., kedd, 20:41:28 CET
hallgato@172.16.228.130's password:
 
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-65-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Tue Mar 16 20:41:47 2021
hallgato@ubuntu:~$ whoami
hallgato
hallgato@ubuntu:~$

Ez mit is mutat?

  • whoami (ki vagyok én?) válaszol erre a kérdésre
    • Ezt a parancsot kiadom a saját gépemen és visszaadja, hogy patrik
  • ssh hallgato@172.16.228.130 szeretnék belépni ssh-n keresztül a 172.16.228.130 ip címmel rendelkező gépre hallgato felhasználó névvel
  • hallgato@172.16.228.130's password: itt kell megadni a felhasználó jelszavát
    • Ha létezik a felhasználó és jó a megadott jelszó, akkor belépünk a rendszerbe
    • Ezután látható, hogy tényleg sikeresen beléptem, egy "üdvözlő üzenet" fogad, valamint a promt is megváltozott hallgato@ubuntu:~$-ra
  • whoami parancs kiadása a távoli gépem
    • Itt már a hallgato nevet kapom vissza, ebből is látszik, hogy most egy másik felhasználóként használom a shell-t