5.1 Lecke 1
Tanúsítvány: |
Linux Essentials |
---|---|
Verzió: |
1.6 |
Témakör: |
5 Biztonság és Fájlokkal Kapcsolatos Jogosultságok |
Fejezet: |
5.1 Alapvető Biztonság és Felhasználótípusok Azonosítása |
Lecke: |
1/1 |
Bevezetés
Ez a lecke a felhasználó fiókok alapvető terminológiájára, helyi Linux rendszerek hozzáférés-vezérlésére és biztonságára, a parancssori interfész (CLI) alapvető biztonsági hozzáférés-vezérlő eszközeire, valamint a felhasználói és csoportos fiókok támogatására szolgáló alapvető fájljaira összpontosít, beleértve az elemi kiváltságok kiterjesztését.
Az alapvető biztonság a Linux rendszerekben a Unix hozzáférés-vezérlése alapján készült, amely annak ellenére, hogy közel ötven éves, néhány népszerűbb, sokkal újabb operációs rendszerrel összehasonlítva is meglehetősen hatékony. Még néhány más, népszerű, Unix-alapú operációs rendszer is hajlamos a “szabadságjogok elvételére” a “könnyű hozzáférés” érdekében, viszont a Linux nem.
A modern Linux asztali környezetek és interfészek leegyszerűsítik a felhasználói fiókok létrehozását és menedzselését és gyakran automatizálják a hozzáférés-vezérlők hozzárendelését, amikor a felhasználó bejelentkezik — például a kijelzőhöz, audio- és egyéb szolgáltatásokhoz --, gyakorlatilag nem igényelve kézi rendszergazdai beavatkozást. Fontos azonban megérteni a mögöttes Linux operációs rendszer alapfogalmait.
Fiókok
A biztonság sok fogalmat foglal magába, az egyik leggyakoribb a hozzáférés-vezérlés általános koncepciója. Mielőtt kezelni tudnánk a fájlhozzáférés vezérléseit, például a tulajdonjogot és a jogosultságokat, meg kell értenünk a Linux felhasználói fiókok alapfogalmait, amelyek több típusra oszthatók.
A Linux rendszer minden felhasználójának van egy társított fiókja, amely a bejelentkezési adatokon (mint a felhasználónév és a jelszó) kívül meghatározza, hogy a felhasználó hogyan és hol kezdeményezhet interakciót a rendszerrel. A jogosultságok és a hozzáférés-vezérlés meghatározzák azokat a “határokat”, amelyeken belül minden felhasználó dolgozhat.
Azonosítók (UID/GID)
A Felhasználói és Csoportazonosítók (UID/GID) a fiókokra vonatkozó alapvető, számozott hivatkozások. A korai implementációk 16 bites egészekre voltak limitálva (0 és 65535 közötti értékek), de a 21. századi rendszerek támogatják a 64 bites UID-at és GID-kat. A felhasználók és a csoportok egymástól függetlenül kapnak azonosítót, tehát ugyanaz az ID tartozhat egy felhasználóhoz és egy csoporthoz is.
A felhasználóknak nem csak UID-ja van, hanem egy elsődleges GID-ja is. Az elsődleges GID tartozhat csak egy felhasználóhoz is és előfordulhat, hogy más felhasználók nem használják. Ezen a csoporton azonban számos más felhasználó is osztozhat. Ezen elsődleges csoportok mellett minden felhasználó tagja lehet más csoportoknak is.
Alapértelmezés szerint a Linux rendszereken minden felhasználó egy felhasználónevével azonos csoporthoz van rendelve ugyanazzal a GID-val, mint a UID-ja. Például hozzunk létre egy felhasználót newuser
névvel és alapértelmezés szerint a csoportja is newuser
lesz.
A Szuperfelhasználói Fiók
Linux alatt a szuperfelhasználó a root
, aminek a UID-ja 0. A szuperfelhasználó másik elnevezése a rendszergazda, aki korlátlan hozzáféréssel rendelkezik és ellenőrzi a rendszert, beleértve a többi felhasználót is.
A szuperfelhasználó alapértelmezett csoportja a 0
GID és root
-nak is nevezzük. A szuperfelhasználó home mappája dedikált, felső szintű mappa, a /root
, kizárólag a root
felhasználó által érhető el.
Standard Felhasználói Fiókok
A root
kivételével minden fiók technikailag normál felhasználói fiók, de egy Linux rendszeren a köznyelvi felhasználói fiók gyakran “rendes” (nem privilegizált) felhasználói fiókot jelent. Általában a következő tulajdonságokkal rendelkeznek, bizonyos kivételekkel:
-
A UID-k 1000-nél kezdődnek (4 számjegy), bár néhány régebbi rendszerben előfordulhat, hogy 500-zal.
-
Egy meghatározott home mappa, általában a
/home
egy almappája, a helyi beállításoktól függően. -
Egy meghatározott login shell. A Linuxban az alapértelmezett shell a Bourne Again Shell (
/bin/bash
), de másfajták is elérhetőek lehetnek.
Ha egy felhasználói attribútumban nincs valid shell, a felhasználó nem lesz képes megnyitni egy interaktív shellt. Általában a /sbin/nologin
-t használják invalid shellként. Ez hasznos lehet, ha a felhasználót csak a konzolos vagy SSH-hozzáférésen kívüli egyéb szolgáltatásokra, például csak biztonságos FTP (sftp
) hozzáférésre hitelesítik.
Note
|
A félreértések elkerülése érdekében a felhasználói fiók kifejezést a továbbiakban csak standard vagy normál felhasználói fiókok esetén használjuk. Például a rendszerfiók will be used to explain a Linux user account that is of the system user account type. |
Rendszerfiókok
A rendszerfiókok általában a rendszer telepítésekor jönnek létre. Ezek olyan berendezésekre, programokra és szolgáltatásokra vonatkoznak, amelyek nem superuserként futnak majd. Egy ideális világban ezek operációs rendszer berendezések lennének.
A rendszerfiókok eltérőek, de attribútumaik a következők:
-
A UID-k általában 100 alattiak (2 számjegy) vagy 500-1000 (3 számjegy).
-
Vagy nincs dedikált home mappa vagy a mappa általában nem a
/home
alatt van. -
Nincs valid login shell (tipikusan
/sbin/nologin
), de vannak ritka kivételek.
A legtöbb Linux rendszerfiók soha nem fog bejelentkezni és az attribútumaikban nincs szükségük meghatározott shellre sem. Számos, a rendszerfiókok által tulajdonolt és végrehajtott processzt a rendszermenedzsment a saját környezetébe forkol, egy specifikus rendszerfiók által futtatva. Ezeknek a fiókoknak általában limitált, vagy még gyakrabban, semmilyen privilégiuma nincs.
Note
|
Az LPI Linux Essentials szemszögéből a rendszerfiókok UID-ja <1000, 2 vagy 3 számjegyű UID (és GID). |
Általánosságban elmondható, hogy a rendszerfiókoknak nincs valid login shelljük. Az ellenkezője a legtöbb esetben biztonsági problémát jelentene.
Szolgáltatásfiókok
A szolgáltatásfiókok általában szolgáltatások telepítésekor és konfugárciójakor jönnek létre. A rendszerfiókokhoz hasonlóan ezeket berendezések, programok és szolgáltatások használják és nem pedig a superuser.
Sok dokumentációban a rendszer- és szolgáltatásfiókok hasonlóak egymáshoz és gyakran fel is cserélik őket. Ez magában foglalja a home mappa lokációját is, ami általában a /home
-on kívül van, ha egyáltalán létezik (a szolgáltatásfiókok esetében gyakrabban létezik, mint a rendszerfiókoknál) és nincs valid login shell. Bár nincs szigorú meghatározás, az elsődleges különbség a rendszer- és a szolgáltatásfiókok között a UID/GID.
- Rendszerfiók
-
UID/GID <100 (2 számjegy) vagy <500-1000 (3 számjegy)
- Szolgáltatásfiók
-
UID/GID >1000 (4+ számjegy), de nem egy “standard” vagy “általános” felhasználói fiók, hanem egy fiók szolgáltatásoknak, a UID/GID >1000 (4+ számjegy)
Néhány Linux disztribúcióban még mindig vannak előre lefoglalt szolgáltatásfiókok 100-nál kisebb UID-val és ezeket rendszerfiókoknak is tekinthetjük, még ha nem is a rendszer telepítésekor jönnek létre. Például a Fedora-alapú (ide tartozik a Red Hat is) Linux disztribúciókban az Apache Web szerver felhasználójának UID-ja (és GID-ja) 48, egyértelműen egy rendszerfiók, annak ellenére, hogy van home mappája (általában /usr/share/httpd
vagy /var/www/html/
).
Note
|
Az LPI Linux Essentials szemszögéből a rendszerfiókok UID-ja <1000 és az általános felhasználói fiókok UID-ja >1000. Mivel az általános felhasználó fiókok >1000, ezek a UID-k szolgáltatásfiókok is lehetnek. |
Login Shellek és Home Mappák
Egyes fiókoknak van login shellje, míg másoknak biztonsági okokból nincs, mivel nincs szükségük interaktív hozzáférésre. A default login shell a legtöbb Linux disztribúció esetén a Bourne Again Shell, vagy bash
, de más shellek is elérhetőek, például — hogy néhányat megnevezzünk — a C Shell (csh
), a Korn shell (ksh
) vagy a Z shell (zsh
).
A felhasználó megváltoztathatja a login shelljét a chsh
paranccsal. Alapértelmezés szerint a parancs interaktív módban fut és megjelenít egy promptot, megkérdezve, hogy melyik shell legyen használatban. A válasz a shell bináris állományának teljes elérési útja kell hogy legyen, mint a példában:
$ chsh Changing the login shell for emma Enter the new value, or press ENTER for the default Login Shell [/bin/bash]: /usr/bin/zsh
A parancsot nem-interaktív módban is kiadhatjuk, az -s
paramétert az állomány elérési útja kell hogy kövesse, mint például:
$ chsh -s /usr/bin/zsh
A legtöbb fióknak van definiált home mappája. Linuxon ez általában az egyetlen hely, ahol annak a fióknak garantált írási joga van, néhány kivétellel (pl. ideiglenes fájlrendszer területei). Egyes fiókok azonban biztonsági okokból szándékosan úgy vannak beállítva, hogy még a saját home mappájukban se legyen írási joguk.
Információszerzés a Felhasználóinkról
Az alapvető felhasználói információk listázása egy mindennapi gyakorlat a Linux rendszereken. Bizonyos esetekben a felhasználóknak váltani kell a fiókok között és jogosultságokat kell szereznük privilegizált feladatok elvégzéséhez.
Az alábbi parancsok használatával még a felhasználók is képesek felsorolni az attribútumokat és hozzáférni a parancssorból. Az alapinformációk megszerzése korlátozott kontextusban nem számítanak privilegizált műveletnek.
A felhasználó aktuális információnak kilistázása a parancssorba egy egyszerű, kétbetűs parancs, az id
. A kimenet a bejelentkezési ID-től függ:
$ id uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Az előző felsorolásban a felhasználó (emma
) azonosítói a következők:
-
1024
= Felhasználói ID (UID), melyet a felhasználónév követ (gyakori elnevezése a login név) zárójelben. -
1024
= az elsődleges csoport ID (GID), melyet a csoportnév követ (gyakori név) zárójelben. -
További GID-ek listája (csoportnevek), amelyekbe a felhasználó tartozik.
A felhasználók utolsó bejelentkezési időpontját a last
paranccsal kaphatjuk meg:
$ last emma pts/3 ::1 Fri Jun 14 04:28 still logged in reboot system boot 5.0.17-300.fc30. Fri Jun 14 04:03 still running reboot system boot 5.0.17-300.fc30. Wed Jun 5 14:32 - 15:19 (00:46) reboot system boot 5.0.17-300.fc30. Sat May 25 18:27 - 19:11 (00:43) reboot system boot 5.0.16-100.fc28. Sat May 25 16:44 - 17:06 (00:21) reboot system boot 5.0.9-100.fc28.x Sun May 12 14:32 - 14:46 (00:14) root tty2 Fri May 10 21:55 - 21:55 (00:00) ...
Az oszlopokban felsorolt információk változhatnak, de az előző felsorolásban is van néhány figyelemre méltó bejegyzés:
-
Egy felhasználó (
emma
) hálózaton keresztül jelentkezett be (pszeudo TTYpts/3
) és még mindig be van lépve. -
Az aktuális boot időpontja, a kernellel együtt. A fenti példában kb. 25 perccel a feIhasználó bejelentkezése előtt.
-
A superuser (
root
) egy virtuális konzolon keresztül lépett be (TTYtty2
), május közepén.
A last
parancs egy variánsa a lastb
parancs, ami az összes utóbbi hibás belépési próbálkozást listázza.
A who
és w
parancsok csak az aktív bejelentkezéseket listázzák:
$ who emma pts/3 2019-06-14 04:28 (::1) $ w 05:43:41 up 1:40, 1 user, load average: 0.25, 0.53, 0.51 USER TTY LOGIN@ IDLE JCPU PCPU WHAT emma pts/3 04:28 1:14m 0.04s 0.04s -bash
Mindkét parancs ugyanazokat az információkat sorolja fel. Például, egy felhasználó (emma
) egy pszeudo TTY eszközzel (pts/3
) lépett be és a bejelentkezés időpontja 04:28.
A w
parancs több információt ad meg, beleértve az alábbiakat:
-
Az aktuális idő, valamint, hogy mióta aktív a rendszer
-
Hány felhasználó van csatlakozva
-
A terhelés átlagai az elmúlt 1, 5 és 15 percben
Valamint az egyes felhasználói munkamenetekkel kapcsolatos további információk.
-
A CPU teljes felhasználási ideje (
IDLE
,JCPU
ésPCPU
) -
Az aktuális processz (
-bash
). A folyamat teljes CPU-használati ideje az utolsó elemet tekintve (PCPU
).
Mindkét parancsnak vannak kapcsolói további információk listázásához.
Felhasználóváltás és a Jogosultság Megváltoztatása
Egy ideális világban a felhasználóknak sosem kellene további jogosultságokat szerezniük a feladataik elvégzéséhez. A rendszer mindig “csak működne” és minden konfigurálva lenne a különböző hozzáférésekhez.
Szerencsénkre a Linux — a megszokottól eltérően — a legtöbb, nem-rendszergazda felhasználó számára így működik, annak ellenére, hogy a legkevesebb privilégium biztonsági modellt követi.
Vannak azonban olyan parancsok, amelyek lehetővé teszik a jogosultságok növelését, ha szükséges. A legfontosabb kettő közülük a su
és a sudo
.
A legtöbb Linux rendszerben a su
parancsot a root jogosultságok megszerzésére használjuk, amely alapértelmezett lesz, ha a parancs után nem adunk meg felhasználónevet. Bár válthatunk vele másik felhasználóra, ez nem egy jó gyakorlat: a felhasználóknak egy másik rendszerből, a hálózaton keresztül vagy fizikai konzolból vagy terminálból kellene bejelentkezniük.
emma ~$ su - Password: root ~#
Miután beírtuk a superuser (root
) jelszavát, a felhasználó megkapja a superuser shelljét (vegyük észre a #
-t a parancssori prompt végén) és minden értelemben ő lesz a superuser (root
).
A jelszavak megosztása nagyon rossz gyakorlat biztonsági szempontból, ezért egy modern Linux rendszerben csak nagyon ritkán van szükség a su
parancsra, ha egyáltalán ez előfordul.
A dollárjel ($
) megszünteti a parancssori promptot egy nem-privilegizált felhasználó shelljében, míg a kettőskereszt (#
) a superuser (root
) parancssori promptját szünteti meg. Erősen ajánlott, hogy ezeket a lezáró karaktereket soha ne változtassuk meg ettől az “általánosan elfogadott” gyakorlattól eltérőre, mivel ezt a nómenklatúrát használják a tananyagok, ahogy ez a lecke is.
Warning
|
Soha ne váltsunk a superuserre ( |
Mi a legnagyobb probléma a su
használatával a superuserre (root
) történő váltásnál? Ha egy általános felhasználó munkamenetét feltörik, a superuser (root
) jelszó rögzíthető. Itt jön a “Switch User Do” (vagy “Superuser Do”):
$ cat /sys/devices/virtual/dmi/id/board_serial cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied $ sudo cat /sys/devices/virtual/dmi/id/board_serial [sudo] password for emma: /6789ABC/
A fenti példában a felhasználó megpróbálja megnézni az alaplapjának a sorozatszámát. Mivel az információ jogosultsághoz kötött, nem kap rá engedélyt.
A sudo
használatával azonban a felhasználó megadja a saját jelszavát, ezzel hitelesítve, hogy ki is ő. Ha a sudoers
konfigurációban rendelkezik a megfelelő felhatalmazással a parancs futtatásához a szükséges kapcsolókkal, működni fog.
Tip
|
Alapértelmezés szerint az első engedélyezett |
A Hozzáférés-vezérlés Fájljai
Szinte az összes operációs rendszerben vannak helyek a hozzáférés-vezérlők támogatására. Linuxban ezek tipikusan az /etc
mappában tárolt szövegfájlok, ahol a rendszerkonfigurációs fájlokat kell tárolni. Alapértelmezés szerint ez a rendszer minden felhasználója által olvasható, de csak a root
-nak van joga írni.
A felhasználói fiókokkal, attribútumokkal és hozzáférés-vezérléssel kapcsolatos fő fájlok a következők:
/etc/passwd
-
Ez a fájl alapvető információkat tartalmaz a rendszer felhasználóiról, beleértve a UID-t és GID-t, home mappát, shellt, stb. A neve ellenére itt nincsenek jelszavak tárolva.
/etc/group
-
Ez a fájl alapvető információkat tartalmaz a rendszer felhasználói csoportjairól, mint a csoportnév, GID és a csoport tagjai.
/etc/shadow
-
Itt vannak tárolva a jelszavak. Biztonsági okokból titkosítottak.
/etc/gshadow
-
Ez a fájl részletesebb információkat tárol a csoportokról, beleértve egy titkosított jelszót, amely lehetővé teszi a felhasználók számára, hogy ideiglenesen a csoport tagjai lehessenek, illetve a felhasználók listáját, akik bármikor a csoport tagjaivá válhatnak, valamint egy listát a csoport adminisztrátorairól.
Warning
|
Ezek a fájlok nem tervezettek és soha nem is szabad őket közvetlenül szerkeszteni. Ez a lecke csak a fájlokban tárolt információkat fedi le és nem a szerkesztésüket. |
Alapértelmezés szerint minden felhasználó beléphet az /etc
-be és olvashatja az /etc/passwd
és az /etc/group
fájlokat. Szintén alapértelmezés szerint a root
kivételével egyetlen felhasználó sem olvashatja az /etc/shadow
vagy az /etc/gshadow
fájlokat.
Linux esetén vannak olyan fájlok is, amelyekhez alapvetően több jogosultság szükséges, például a su
és sudo
parancs használatával. Alapértelmezés szerint a root
felhasználó érheti el őket csak.
/etc/sudoers
-
Ez a fájl szabályozza, hogy ki és hogyan használhatja a
sudo
parancsot. /etc/sudoers.d
-
Ez a mappa olyan fájlokat tartalmazhat, amelyek kiegészítik a
sudoers
fájlban szereplő beállításokat.
Az LPI Linux Essentials vizsga szempontjából csak a default sudo konfigurációs fájl, az /etc/sudoers
nevét és elérési útját kell ismernünk. Konfigurációja meghaladja ezen anyag hatáskörét.
Warning
|
Még ha az |
/etc/passwd
Az /etc/passwd
fájlt gyakran a “jelszófájl” néven emlegetik. Minden sor több mezőt tartalmaz, amelyeket egy kettőspont (:
) választ el egymástól. A név ellenére az egyirányúlag titkosított jelszót nem ebben a fájlban tárolják.
A fájl egy sorának tipikus szintaxisa a következő:
USERNAME:PASSWORD:UID:GID:GECOS:HOMEDIR:SHELL
Ahol:
USERNAME
-
A felhasználónév, azaz login (név), mint
root
,nobody
,emma
. PASSWORD
-
A titkosított jelszó régi helye. Majdnem mindig
x
, jelezve, hogy a jelszó a/etc/shadow
fájlban van tárolva. UID
-
Felhasználói ID (UID), mint
0
,99
,1024
. GID
-
Alapértelmezett csoport ID (GID), mint
0
,99
,1024
. GECOS
-
Egy CSV lista felhasználó információkról, mint név, lokáció, telefonszám. Például:
Emma Smith,42 Douglas St,555.555.5555
HOMEDIR
-
Útvonal a felhasználó home mappájához, mint
/root
,/home/emma
, stb. SHELL
-
A felhasználóhoz tartozó alapértelmezett shell, mint
/bin/bash
,/sbin/nologin
,/bin/ksh
, stb.
Például a következő sor írja le az emma
nevű felhasználót:
emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
A GECOS Mező Értelmezése
A GECOS mező három (3) vagy több mezőt tartalmaz, vesszővel (,
) vannak elválasztva, ez a Comma Separated Values lista (CSV - vesszővel elválasztott értékek). Bár nincs rá szabály, a mezők általában az alábbi sorrendben vannak:
NAME,LOCATION,CONTACT
Ahol:
NAME
-
a felhasználó “Teljes Neve”, vagy a “Szoftver Neve”, ha szolgáltatásfiókról van szó.
LOCATION
-
általában a felhasználó fizikai helye egy épületen belül, szobaszám vagy szolgáltatásfiók esetén az az osztály vagy személy, akivel fel lehet venni a kapcsolatot.
CONTACT
-
kapcsolatfelvételi adatok listája, például otthoni vagy munkahelyi telefonszám.
A további mezők további elérhetőséget tartalmazhatnak, mint otthoni telefonszám vagy e-mail cím. A GECOS mezőben lévő információk megváltoztatásához a chfn
parancsot kell használnunk, majd megválaszolni a kérdéseket, ahogy a lenti példában is látjuk. Ha nem adunk meg felhasználónevet a parancsnak, az aktuális felhasználó információit tudjuk megváltoztatni:
$ chfn Changing the user information for emma Enter the new value, or press ENTER for the default Full Name: Emma Smith Room Number []: 42 Work Phone []: 555.555.5555 Home Phone []: 555.555.6666
/etc/group
Az /etc/group
fájl mezőit mindig kettőspont (:
) választja el, alapvető információkat tartalmaz a rendszerben található csoportokról. Időnként “csoportfájlnak” hívják. A sorok szintaxisa:
NAME:PASSWORD:GID:MEMBERS
Ahol:
NAME
-
a csoport neve, mint
root
,users
,emma
, stb. PASSWORD
-
Az opcionális titkosított csoportjelszó régi helye. Majdnem mindig
x
, jelezve, hogy a jelszó (ha létezik) az/etc/gshadow
fájlban van tárolva. GID
-
Csoportazonosító (GID), mint
0
,99
,1024
. MEMBERS
-
azon felhasználónevek listája vesszővel elválasztva, akik tagja a csoportnak, mint például
jsmith,emma
.
Az alábbi példa a students
csoportról szóló sort mutatja be:
students:x:1023:jsmith,emma
A felhasználót nem kell feltüntetni a members mezőben, ha a csoport a felhasználó elsődleges csoportja. Ha a felhasználó mégis szerepel, az felesleges — ha listázva van, ha nincs, nincs változás a funkcionalitásban.
Note
|
A jelszóval védett csoportok témaköre meghaladja ennek szekciónak a hatáskörét, de ha van jelszó, az a |
/etc/shadow
A következő táblázat felsorolja az /etc/shadow
fájlban tárolt attribútumokat, amelyet általában “árnyékfájlnak” (shadow file) nevezünk. A fájl mezőit kettőspont (:
) választja el egymástól. Bár a fájlban sok mező található, a legtöbb meghaladja a lecke hatáskörét, kivéve az első kettőt.
Egy sor alap szintaxisa a fájlban az alábbi:
USERNAME:PASSWORD:LASTCHANGE:MINAGE:MAXAGE:WARN:INACTIVE:EXPDATE
Ahol:
USERNAME
-
A felhasználónév (ugyanaz, mint az
/etc/passwd
esetén), úgymintroot
,nobody
,emma
. PASSWORD
-
A jelszó, egyirányúan titkosítva, beleértve a megelőző sót is. Például:
!!
,!$1$01234567$ABC…
,$6$012345789ABCDEF$012…
. LASTCHANGE
-
Az utolsó jelszóváltoztatás időpontja az “epoch” óta, mint például
17909
. MINAGE
-
A jelszó minimum életkora napokban.
MAXAGE
-
A jelszó maximum életkora napokban.
WARN
-
A jelszó lejárta előtt történő figyelmeztetés időszaka, napokban.
INACTIVE
-
A jelszó lejárta utáni időszak maximum életkora napokban.
EXPDATE
-
A jelszó lejáratának dátuma napokban, az “epoch”-tól számítva.
Az alábbi példában egy mintabejegyzést láthatunk az /etc/shadow
fájlból. Vegyük észre, hogy néhány érték, mint az INACTIVE
és az EXPDATE
nem definiált.
emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::
Az “epoch” POSIX rendszer esetén az Universal Coordinate Time (UTC) szerinti 1970. január 1., kedd, éjfél. A legtöbb POSIX dátum és idő az “epoch” óta eltelt másodpercekben, vagy az /etc/shadow
fájl esetén napoban van megadva.
Note
|
Az árnyékfájlt úgy tervezték, hogy csak a superuser kapjon hozzá olvasási jogot és és válasszon olyan alaprendszer-hitelesítési szolgáltatásokat, amelyek bejelentkezéskor vagy hitelesítéskor ellenőrzik az egyirányú jelszó hash-t. |
Bár különböző autentikációs megoldások léteznek, a jelszó tárolásának legegyszerűbb módja az egyirányú hash függvény. Ez azt jelenti, hogy a jelszót soha nem tárolják tiszta szövegként a rendszerben, mivel a hash funkció nem visszafordítható. Egy jelszót hash-sé alakíthatunk, de (ideális esetben) nem lehetséges a hash-t visszaalakítani jelszóvá.
Legtöbbször brute force eljárás szükséges ahhoz, hogy egy jelszó minden kombinációját titkosítsuk, amíg nem találunk egyezést. A titkosított jelszó feltörésének esélyeit csökkentve, a Linux rendszerek egy véletlenszerű “sót” használnak minden felhasználó jelszavának hash-énél. Tehát egy felhasználó jelszavának hash-e egy Linux rendszeren nem lesz ugyanaz, mint egy másik Linux rendszeren, akkor sem, ha maga a jelszó ugyanaz.
Az /etc/shadow
fájlban a jelszó több formában jelenhet meg. Ezek a formák általában az alábbiak:
!!
-
Ez egy “letiltott” fiók (az autentikáció nem lehetséges), nincs tárolva titkosított jelszó.
!$1$01234567$ABC…
-
Egy “letiltott” fiók (a kezdő felkiáltójelből láthatjuk), előzetes hash függvénnyel, hash sóval és hash sztringet tárolva.
$1$0123456789ABC$012…
-
Egy “elérhető” fiók, hash függvénnyel, hash sóval és hash sztringet tárolva.
A hash függvényt, a hash sót és a hash sztringet egy dollárjel ($
) előzi meg és határolja. A hash só hosszának nyolc és tizenhat (8-16) karakter közöttinek kell lennie. A három leggyakoribb példa a következő:
$1$01234567$ABC…
-
Az MD5 (
1
) hash függvénye, egy példa hash-sel, ami nyolc karakter hosszú. $5$01234567ABCD$012…
-
Az SHA256 (
5
) hash függvénye, egy példa hash-sel, ami tizenkét karakter hosszú. $6$01234567ABCD$012…
-
Az SHA512 (
6
) hash függvénye, egy példa hash-sel, ami tizenkét karakter hosszú.
Note
|
Az MD5 hash függvény kriptográfiailag bizonytalannak tekinthető az ASIC mai (2010 és későbbi) szintjén, sőt, az általános számítási SIMD teljesítményével összevetve is. Például az Egyesült Államok Szövetségi Információfeldolgozási Szabványai (FIPS) nem engedélyezik az MD5 használatát kriptográfiai funkciókhoz, csak a validáció nagyon limitált eseteiben, de digitális aláírások sértetlenségére vagy hasonló célokra nem engedélyezett. |
Az LPI Linux Essentials feladatai és a vizsga szempontjából csak azt kell megérteni, hogy egy helyi felhasználó jelszavának hash-e csak az /etc/shadow
fájlban van tárolva, amit csak select, autentikációs szolgáltatások olvashatnak, vagy a superuser módosíthatja más parancsokkal.
Gyakorló Feladatok
-
Vegyük figyelembe az alábbi
id
parancs kimenetét:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
Melyik fájlokban vannak tárolva az alábbi attribútumok?
UID and GID
Groups
-
Ezeken felül melyik fájlban van tárolva a felhasználó jelszava?
-
-
Az alábbi titkosítási típusok közül melyiket használja alapértelmezés szerint a Linux a jelszavak helyi tárolására?
-
Asszimnetrikus
-
Egyirányú hash
-
Szimmterikus
-
ROT13
-
-
Ha egy fiók felhasználói azonosítója (UID) 1000 alatti, milyen típusú fiók lehet?
-
Hogyan kaphatunk listát az aktív bejelentkezésekről és hogyan számolhatjuk meg őket?
-
A
grep
paranccsal az alábbi információkat kaptuk megemma
felhasználóról.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Az előző parancs kimenetének segítségével töltsük ki a táblázat üres helyeit a megfelelő információkkal!
Felhasználónév
Jelszó
UID
Elsődleges GID
GECOS
Home Mappa
Shell
Gondolkodtató Feladatok
-
Hasonlítsuk össze a
last
, aw
és awho
eredményeit! Milyen részletek hiányoznak az egyes parancsokból a többihez viszonyítva? -
Próbáljuk ki a
who
és aw -his
parancsokat!-
Milyen információkat távolítottunk el a
w
parancs kimenetéből a “no header” (-h
) és a “short” (-s
) kapcsolókkal? -
Milyen információkat adott a
w
parancs kimenete az “IP-cím” (-i
) kapcsolóval?
-
-
Melyik az a fájl, ami egy felhasználói fiók egyirányúan titkosított jelszavát tárolja?
-
Melyik fájl tartalmazza azoknak a csoportoknak a listáját, amelyeknek egy felhasználói fiók a tagja? Milyen logika mentén tudjuk összeállítani azon csoportok listáját, amelyeknek a felhasználói fiókok tagjai?
-
Egy vagy több (1+) a következő fájlok közül nem olvasható átlagos, jogosultságok nélküli felhasználó által. Melyek ezek?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
-
-
Hogyan változtathatjuk meg az aktuális felhasználó login shelljét a Korn Shellre (
/usr/bin/ksh
) nem-interaktív módban? -
Miért nincs a
root
felhasználó home mappája a/home
mappán belül?
Összefoglalás
Ebben a leckében felfedeztük a Linux felhasználó- és csoportadatbázisait. Megtanultuk a felhasználók és a csoportok legfontosabb tulajdonságait, beleértve a nevüket és a numerikus azonosítóikat. Megvizsgáltuk, hogyan működik a jelszavak titkosítása Linux rendszereken és hogyan vannak hozzárendelve a felhasználók a csoportokhoz.
Ezeket az információkat a következő négy fájl tárolja, melyek a legalapvetőbb, helyi biztonsági hozzáférés-vezérlést biztosítják egy Linux rendszerben:
/etc/passwd
-
Mindenki által olvasható, a rendszer felhasználói fiókjainak összes POSIX attribútuma, a titkosított jelszó kivételével.
/etc/group
-
Mindenki által olvasható, a rendszer csoport fiókjainak összes POSX attribútuma.
/etc/shadow
-
Senki sem olvashatja (kivéve select processzek), a rendszer összes felhasználójának titkosított jelszava (és a lejárati információk).
/etc/sudoers
-
Az összes helyi privilégium információ / engedély a
sudo
parancshoz.
A leckében az alábbi parancsokról beszéltünk:
id
-
Valós (vagy effektív) felhasználó és csoport ID-k listája.
last
-
Utoljára bejelentkezett felhasználók listája.
who
-
Aktuálisan bejelentkezett felhasználók listája.
w
-
Hasonló a
who
parancshoz, de kibővített kontextusban. su
-
Másik felhasználóra váltás login shellel, vagy parancsok lefuttatása a felhasználó nevében, az adott felhasználó jelszavának megadásával.
sudo
-
Switch User (vagy Superuser) Do, ha engedélyezett, az aktuális felhasználó megadja a saját jelszavát (ha szükséges), a jogosultságok kiterjesztése érdekében.
chsh
-
Váltás egy felhasználó shelljére.
chfn
-
A felhasználó adatainak módosítása a GECOS mezőben.
Válaszok a Gyakorló Feladatokra
-
Vegyük figyelembe az alábbi
id
parancs kimenetét:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
Melyik fájlokban vannak tárolva az alábbi attribútumok?
UID and GID
/etc/passwd
Groups
/etc/group
-
Ezeken felül melyik fájlban van tárolva a felhasználó jelszava?
A felhasználó titkosított jelszava az
/etc/shadow
fájlban van tárolva.
-
-
Az alábbi titkosítási típusok közül melyiket használja alapértelmezés szerint a Linux a jelszavak helyi tárolására?
Alapértelmezés szerint az egyirányú hasht használjuk jelszavak tárolására.
-
Ha egy fiók felhasználói azonosítója (UID) 1000 alatti, milyen típusú fiók lehet?
Azok a fiókok, amelyeknek az UID-ja 1000-nél kisebb, általában rendszerfiókok.
-
Hogyan kaphatunk listát az aktív bejelentkezésekről és hogyan számolhatjuk meg őket?
A
w
parancs használatával. Az összes aktív bejelentkezés listáján kívül azt is látni fogjuk, hogy hány felhasználó van bejelentkezve, valamint a rendszer terhelését és üzemidejét is. -
A
grep
paranccsal az alábbi információkat kaptuk megemma
felhasználóról.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Az előző parancs kimenetének segítségével töltsük ki a táblázat üres helyeit a megfelelő információkkal!
Username
emma
Password
x
- mindigx
egy valid, aktív felhasználói login eseténUID
1000
Primary GID
1000
GECOS
Emma Smith,42 Douglas St,555.555.5555
Home Directory
/home/emma
Shell
/bin/ksh
Válaszok a Gondolkodtató Feladatokra
-
Hasonlítsuk össze a
last
, aw
és awho
eredményeit! Milyen részletek hiányoznak az egyes parancsokból a többihez viszonyítva?A
w
és awho
eszközök csak az aktuálisan bejelentkezett felhasználókat listázzák, míg alast
a már kijelentkezett felhasználókat is listázza. Aw
parancs listázza a rendszer kihasználtságát, míg awho
nem. -
Próbáljuk ki a
who
és aw -his
parancsokat!-
Milyen információkat távolítottunk el a
w
parancs kimenetéből a “no header” (-h
) és a “short” (-s
) kapcsolókkal?A header nem jelenik meg, ami parszoláskor hasznos, illetve a login idő és a CPU információ sem.
-
Milyen információkat adott a
w
parancs kimenete az “IP-cím” (-i
) kapcsolóval?Ez kiírja az IP-címet, ahelyett, hogy megpróbálná feloldani a DNS-t, kiírva a hosztnevet. A
w
ezzel a kapcsolóval jobban hasonlít alast
parancs kimenetére.
-
-
Melyik az a fájl, ami egy felhasználói fiók egyirányúan titkosított jelszavát tárolja?
Az
/etc/shadow
fájl tárolja egy felhasználói fiók egyirányúan titkosított jelszavát, mivel ez nem olvasható egy átlagos, jogosultságok nélküli felhasználói fiókkal, szemben az/etc/passwd
fájllal. -
Melyik fájl tartalmazza azoknak a csoportoknak a listáját, amelyeknek egy felhasználói fiók a tagja? Milyen logika mentén tudjuk összeállítani azon csoportok listáját, amelyeknek a felhasználói fiókok tagjai?
Az
/etc/group
fájlban van egy CSV lista azokkal a felhasználónevekkel a csoport bármely sorának utolsó, “members” mezőjében.Bármely sor a
/etc/group
fájlban, ahol a felhasználó szerepel az utolsó “members” mezőben, azt jelenti hogy a felhasználó a csoport tagja — feltételezve, hogy helyesen van formázva (CSV delimitálással). Ezenkívül a felhasználó elsődleges csoporttagsága a/etc/passwd
fájlban egy megfelelő bejegyzést is tartalmaz a/etc/group
fájlban a csoport nevére és a GID-jára vonatkozóan. -
Egy vagy több (1+) a következő fájlok közül nem olvasható átlagos, jogosultságok nélküli felhasználó által. Melyek ezek?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
Az
/etc/shadow
és az/etc/sudoers
fájlok alapértelmezés szerint nem olvashatóak, kivéve kijelölt szolgáltatások vagy a superuser által. Ezek a válaszok változhatnak, a gyakorlatban használt rendszerektől és a felhasználónevektől függően.
-
-
Hogyan változtathatjuk meg az aktuális felhasználó login shelljét a Korn Shellre (
/usr/bin/ksh
) nem-interaktív módban?$ chsh -s /usr/bin/ksh
-
Miért nincs a
root
felhasználó home mappája a/home
mappán belül?Mivel a
root
fiók szükséges a hibák elhárításához és kijavításához, amelyek lehetnek a/home
mappához kapcsolódó fájlrendszeri problémákat is. Ilyen esetekben aroot
teljesen használható kell hogy legyen, még ha a/home
fájlrendszer nem is érhető el.