UNIX alapelvek és rendszer konfigurálása
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.
Ezen elvek közül néhány:
- 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 Debian á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 Debian á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 Debian á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 Debian 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
A useradd
parancs segítségével hozhatunk létre új felhasználót.
sudo useradd -G kszksok -s /bin/bash -m mike
sudo
: mert root hozhat csak létre új usertuseradd
: ez a parancs hoz létre usert-G kszksok
: akszksok
csoport tagja legyen az új user-s /bin/bash
: a bash legyen a shellje a usernek-m
: legyen home mappájamike
: az új user neve
Ezután az új felhasználónak be kell állítani egy jelszót, ezt
a sudo passwd mike
parancs kiadása után állítható be.
A passwd
nem ír semmit a terminálra miközben írjuk a jelszót,
de ne kételkedjünk, hogy nem látunk semmit, attól még íródik.
Ubuntun és egyéb Debian alapú disztrókon megtalálható egy
adduser
script is, ami szintén userek létrehozására van.
Használata kicsit egyszerűbb, azonban nincs minden rendszeren.
Használata:
mike@mike-elementary:~$ sudo adduser patrik
[sudo] password for mike:
Adding user `patrik' ...
Adding new group `patrik' (1001) ...
Adding new user `patrik' (1001) with group `patrik' ...
Creating home directory `/home/patrik' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for patrik
Changing the user information for patrik
Enter the new value, or press ENTER for the default
Full Name []: Fodor Patrik
Room Number []: 6969
Work Phone []: +36306942069
Home Phone []:
Other []: Jógyerek amúgy
chfn: 'Jógyerek amúgy' contains non-ASCII characters
Is the information correct? [Y/n] y
mike@mike-elementary:~$ sudo adduser patrik sudo
Adding user `patrik' to group `sudo' ...
Adding user patrik to group sudo
Done.
mike@mike-elementary:~$
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éb 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$
A userdel
Debian-os párja a deluser
.
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.
Hint: -aG
, mint add group.
patrik@ubuntu:/home$ sudo usermod -aG sudo mike
Vagy a létrehozás során adjuk meg a plusz group-ot
patrik@ubuntu:/home$ useradd -m -G sudo -s /bin/bash mike
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
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:~$
Debian alapú disztrókon a sudo addgroup almafa
is működik.
A /etc/group
fájlban található a csoportok listája és azok tulajdonságai.
sudo cat /etc/group | grep alma:
sudo
csak root joggal olvasható vagy írható agroup
fájl- 'cat' kiírja egy fájl tartalmát, ez most a group, vagyis a csoportok listája
- a
|
segítségével acat
kimenetét odaadjuk egy másik program bemenetének (jelen esetben agrep
) - a
grep
a bemenetére kapott szövegből az"alma"
(rész)szót tartalmazókra fog szűrni
Ennek a segítségével leellenőrézhetó egy a csoport valóban létrejött.
Törlés
sudo groupdel <groupname>
parancs segítségével eltávolíthatunk egy csoportot.
patrik@ubuntu:~$ sudo groupdel almafa
[sudo] password for patrik:
patrik@ubuntu:~$ sudo cat /etc/group | grep alma
patrik@ubuntu:~$
Debian alapú disztrókon a sudo delgroup almafa
is működik.
Hasonlóan az előző ellenőrzéshez itt is ellenőrizhető, hogy valóban eltávolításra került-e a csoport. Mivel a kimeneten nem jelent meg semmi, megállapítható, hogy nincs alma szót tartalmazó group.
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.
A groups
parancs segítségével megnézhetjük, hogy tényleg megtörténik a hozzáadás.
patrik@ubuntu:~$ sudo usermod -aG almafa mike
[sudo] password for patrik:
patrik@ubuntu:~$ groups mike
mike : mike sudo almafa
patrik@ubuntu:~$
Hozzáadni egy felhasználót egy csoporthoz nem csak a usermod
segítségével lehet, hanem a gpasswd
paranccsal is.
patrik@ubuntu:~$ groups mike
mike : mike sudo
patrik@ubuntu:~$ sudo gpasswd -a mike almafa
[sudo] password for patrik:
Adding user mike to group almafa
patrik@ubuntu:~$ groups mike
mike : mike sudo almafa
patrik@ubuntu:~$
sudo gpasswd -a <username> <groupname>
:
- A
gpasswd
egy parancs, mely segítségével különböző műveleteket lehet végrehajtani a csoportokon. -a
kapcsoló, mely megadja, hogy hozzáadni szeretnénk egy felhasználót. (add)username
a felhasználó, akit szeretnénk Hozzáadnigroupname
a csoport, amelyikhez szeretnénk hoozáadni a felhasználót
Debian alapú disztrókon a sudo adduser mike almafa
is működik.
Felhasználók eltávolítása a csoportból
sudo gpasswd -d <username> <groupname>
parancs segítségével törölhetünk
egy felhasználót a csoportból.
patrik@ubuntu:~$ sudo gpasswd -d mike almafa
[sudo] password for patrik:
Removing user mike from group almafa
patrik@ubuntu:~$ groups mike
mike : mike sudo
Debian alapú disztrókon a sudo deluser mike almafa
is működik.
Pontosan ugyanazt kell itt csinálni, mint amikor a gpasswd
segítségével
hozzáadunk egy felhasználót, csupán a kapcsoló eltérő -d
.
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 szerver alkalmazás vagy alkalmazások összesége , amelyek a háttérben futnak, és a feladatukra várnak, vagy már valamilyen fontos feladatot (taskot) látnak 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 init rendszer, amely nagyon elterjedt Linux rendszereken, ma már szinte az összes disztribúció ezt használja, mivel számos előnye van elődeihez képest.
Feladata, hogy a Linux kernel indulása után előkészítse az induló szolgáltatásokat és 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.
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
: a systemd-t piszkáló, vele kommunikáló eszköz
systemctl status <service_neve.service>
Szolgáltatás státusza
systemctl list-unit-files
Létező szolgáltatások kilistázása
systemctl start <service_neve.service>
Szolgáltatás indítása
systemctl stop <service_neve.service>
Szolgáltatás leállítása
systemctl restart <service_neve.service>
Szolgáltatás újraindítása
systemctl enable <service_neve.service>
Indítás a rendszerrel
systemctl disable <service_neve.service>
Ne induljon a rendszerrel
journalctl
: naplózó, logkezelő service
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
Saját program használata szolgáltatásként
Ha szeretnénk saját programjainkat szolgáltatásként használni, ezt megtehetjük, ha írunk a programhoz egy fájlt.
[Unit]
Description=Leírás a programhoz
[Service]
Type=simple
ExecStart=program_elérési_útja
[Install]
WantedBy=multi-user.target
Ezt a fájlt bele kell rakni a /etc/systemd/system
mappába, ezután a systemctl
paranccsal
Hálózat alapszintű konfigurálása
Az esetek többségében ezt nem kell nekünk kézzel megcsinálni, hanem network manager megoldja helyettünk
Parancsok a hálózat konfigurálásához
ip a
,ip address
: Kilistázza a hálózati interfészeket és azoknak az IP címeit
patrik@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c9:db:ba brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 172.16.228.135/24 brd 172.16.228.255 scope global dynamic noprefixroute ens33
valid_lft 1684sec preferred_lft 1684sec
inet6 fe80::e85d:ab8d:2f03:2fa9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
patrik@ubuntu:~$
ip r
,ip route
: Kilistázza a (kernel) routing table tartalmát
patrik@ubuntu:~$ ip r
default via 172.16.228.2 dev ens33 proto dhcp metric 100
169.254.0.0/16 dev ens33 scope link metric 1000
172.16.228.0/24 dev ens33 proto kernel scope link src 172.16.228.135 metric 100
patrik@ubuntu:~$
- ip beállítása:
sudo ip addr add IP_cím/hálózati_maszk dev interfész
patrik@ubuntu:~$ sudo ip addr add 192.168.4.44/24 dev ens33
patrik@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c9:db:ba brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 172.16.228.135/24 brd 172.16.228.255 scope global dynamic noprefixroute ens33
valid_lft 1378sec preferred_lft 1378sec
inet 192.168.4.44/24 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::e85d:ab8d:2f03:2fa9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
patrik@ubuntu:~$
- router beállítása:
ip route add default via default_gateway_IP_címe
patrik@ubuntu:~$ sudo ip route add default via 192.168.4.44
patrik@ubuntu:~$ ip r
default via 192.168.4.44 dev ens33
169.254.0.0/16 dev ens33 scope link metric 1000
192.168.4.0/24 dev ens33 proto kernel scope link src 192.168.4.44
patrik@ubuntu:~$
Hálózatkezelők
NetworkManager
Automatikusan elvégzi a hálózati konfigurációt és kezeli, kontrollálja a hálózati eszközöket.
A network managert többféle módon szabályozhatjuk, állíthatjuk:
nmtui
(Network Manager Text User Interface)
Terminálos "grafikus" felületű alkalmazás, az nmtui
kiadása után nyílik meg.
A nyílik, az enter és az Esc segítségével navigálhatunk benne,
valamint a szóközt használhatjuk bizonyos paraméterek megváltoztatásához.
nmtui 'főmenü'
nmtui edit connection menü
nmtui edit ethernet connection
nmtui activate connection
- A hálózati beállítások a grafikus felület beállításaiban is megváltoztathatóak (gnome settings, kde settings...)
network settings
Parancssori alkalmazás, mellyel a shell-ben különböző kapcsolók segítségével módosíthatjuk a NetworkManager beállításait.
patrik@ubuntu:~$ nmcli
ens33: connected to Wired connection 1
"Intel 82545EM"
ethernet (e1000), 00:0C:29:C9:DB:BA, hw, mtu 1500
ip4 default
inet4 172.16.228.135/24
route4 0.0.0.0/0
route4 172.16.228.0/24
route4 169.254.0.0/16
inet6 fe80::e85d:ab8d:2f03:2fa9/64
route6 fe80::/64
route6 ff00::/8
lo: unmanaged
"lo"
loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
DNS configuration:
servers: 172.16.228.2
domains: localdomain
interface: ens33
Use "nmcli device show" to get complete information about known devices and
"nmcli connection show" to get an overview on active connection profiles.
Consult nmcli(1) and nmcli-examples(7) manual pages for complete usage details.
patrik@ubuntu:~$
systemd-networkd
Hálózati szolgáltatás, amely hálózatokat kezeli, felismeri és konfigurálja a hálózati eszközöket, a NetworkManager-höz hasonlóan. Míg az Ubuntu Desktop verziója a NetworkManager-t használja, addig az Ubuntu Server a systemd-networkd-t a hálózat konfigurálásához.
A különböző beállításokat egy-egy plain-text fájlban tárolja, ezek kiterjesztése általában .network
.
Ha kézzel szeretnénk egy beállítást hozzáadni, akkor mi is írhatunk ilyen
fájlokat. Ezeket különböző mappákba helyezhetjük el,
a fajtájától és prioritásától függően. (Általában /etc/systemd/network/
)
A fájlok nagyon hasonlóan épülnek fel, mint a systemd .service
fájljai.
Wired adapter using a static IP
/etc/systemd/network/20-wired.network
[Match]
Name=enp1s0
[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1
A networkd-nek egy nagyon hasznos eszköze, a networkctl
.
Ennek segítségével ellenőrizhetjük és teljes
információkat szerezhetünk a hálózati interfészekről.
Ha új konfigurációs fájlt hoztunk létre és szeretnénk betölteni, azt a
networkctl reload
parancs segítségével tehetjük meg, majd a networkctl reconfigure
segítségével alkalmazhatjuk is.
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 (secure shell).
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
- Ezt a parancsot kiadom a saját gépemen és visszaadja, hogy
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évvelhallgato@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
- Itt már a