Skip to content
Snippets Groups Projects
második videó.md 13.1 KiB
Newer Older
Fodor Patrik's avatar
Fodor Patrik committed
# 2. videó segédlet


## UNIX alapelvek
<Note type="tip" label="Magyarázat">

A Linux egy [UNIX-szerű](https://en.wikipedia.org/wiki/Unix-like) 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.

</Note>

Vannak különböző [elvek](https://en.wikipedia.org/wiki/Unix_philosophy), amik alapján egy UNIX operációs rendszert megalkotnak.
Fodor Patrik's avatar
Fodor Patrik committed
A Linux is ezen elvek alapján készült.

 - Build modular programs
 - Write readable programs
 - Use composition
 - Separate mechanisms from policy 
 - Write simple programs
 - Write small programs
 - Write transparent programs
 - Write robust programs
 - Make data complicated when required, not the program
 - Build on potential users' expected knowledge
 - Avoid unnecessary output
 - Write programs which fail in a way that is easy to diagnose
 - Value developer time over machine time
 - Write abstract programs that generate code instead of writing code by hand
 - Prototype software before polishing it
 - Write flexible and open programs
 - Make the program and protocols extensible


### 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.
Fodor Patrik's avatar
Fodor Patrik committed

### 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.

The advantage of this approach is that the same set of tools, 
utilities and APIs can be used on a wide range of resources. 
There are a number of file types. When a file is opened, 
a file descriptor is created. The file path becoming the addressing 
system and the file descriptor being the byte stream I/O interface. 
But file descriptors are also created for things like anonymous pipes 
and network sockets via different methods. Therefore a more accurate
description of this feature is Everything is a file descriptor.

Additionally, a range of pseudo and virtual filesystems exists 
which exposes information about processes and other system information 
in a hierarchical file-like structure. 
These are mounted into the single file hierarchy.

### Architektúra

Tóth Miklós Tibor's avatar
Tóth Miklós Tibor committed
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](https://en.wikipedia.org/wiki/Initial_ramdisk)
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/
Fodor Patrik's avatar
Fodor Patrik committed

### 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$
Fodor Patrik's avatar
Fodor Patrik committed
#### 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.).
Fodor Patrik's avatar
Fodor Patrik committed

#### 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`
Fodor Patrik's avatar
Fodor Patrik committed
### 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`

Fodor Patrik's avatar
Fodor Patrik committed
#### 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:~$ 
```
Fodor Patrik's avatar
Fodor Patrik committed
#### 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:~$
```

Fodor Patrik's avatar
Fodor Patrik committed
#### 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

Fodor Patrik's avatar
Fodor Patrik committed
### 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.

A Service is a server application or set of applications that runs
in the background waiting to be used, or carrying out essential task. 
They are basically called in inter-process communication.

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.
Fodor Patrik's avatar
Fodor Patrik committed

### 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.

Fodor Patrik's avatar
Fodor Patrik committed
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



Fodor Patrik's avatar
Fodor Patrik committed
## Hálózat alapszintű konfigurálása

<Note type="tip" label>

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)

</Note>

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

```shell
[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