Hoppa yfir í efnið

Notendur og heimildir

Linux var hannað frá upphafi sem fjölnotendakerfi (e. multi-user system). Það þýðir að margir geta unnið á sömu tölvunni án þess að trufla hvern annan. Kerfið heldur utan um hver má lesa, breyta og keyra hvaða skrár.

Þessi hluti snýst fyrst og fremst um venjulega daglega notkun: hver þú ert, hvaða hópum þú tilheyrir og af hverju sumar skrár eru lokaðar.

Hver er ég?

Í Linux ert þú ekki bara tilgreint notandanafn heldur geymir kerfið þig sem sérstakt númer sem kallast UID (e. User ID). Með því að keyra skipanirnar whoami (stytting á who am I), id (stytting á identifier), og groups (stytting á groups):

whoami      # notandanafnið þitt
id          # UID, GID og hópar
groups      # hóparnir þínir
getum við fljótt séð hvaða auðkenni og hópa við tilheyrum.

Dæmi um dæmigert úttak gæti verið

uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo)
þar sem eftirfarandi gildi skipta mestu máli:

  • UID: auðkenni notanda.
  • GID: aðalhópur notanda.
  • groups: aðrir hópar sem notandinn tilheyrir.

Kerfið notar númerin undir yfirborðinu. Nöfnin eru fyrst og fremst þægileg fyrir okkur mannfólkið.


/etc/passwd og /etc/group

Allar upplýsingar um skráða notendur kerfisins eru geymdar í /etc/passwd og til að skoða þær getum við prentað innihald skráarinnar með því að keyra

cat /etc/passwd
sem sýnir okkur allar færslurnar.

Ein tiltekin lína gæti til dæmis litið svona út

anna:x:1000:1000:Anna Nemandi:/home/anna:/bin/bash
þar sem hlutarnir eru aðskildir með tvípunktum:

  1. anna: notandanafn.
  2. x: lykilorðið er ekki geymt hér lengur.
  3. 1000: UID.
  4. 1000: aðal GID.
  5. Anna Nemandi: lýsing eða fullt nafn.
  6. /home/anna: heimamappa.
  7. /bin/bash: sjálfgefin skel.

Á sama hátt eru allir hópar skráðir í /etc/group og við getum prentað þá á skjáinn með skipuninni

cat /etc/group
sem sýnir okkur hvernig hópakerfið er uppbyggt.

Þessar skrár eru venjulega læsilegar öllum, því mörg forrit þurfa að geta flett upp notendanöfnum og hópum. Það þýðir ekki að allir geti breytt þeim.

Af hverju heitir skráin passwd?

Í mjög gömlum Unix-kerfum voru lykilorðshakkar geymdir í /etc/passwd. Í dag eru raunveruleg lykilorð yfirleitt í /etc/shadow, sem venjulegir notendur mega ekki lesa. Nafnið passwd lifði samt áfram.


Að skipta um lykilorð

Á kerfum sem styðjast við hefðbundin lykilorð getur notandi breytt sínu eigin lykilorði með því að nota skipunina passwd (stytting á password):

passwd
sem biður um gamla lykilorðið og nýja lykilorðið í kjölfarið. Á sumum námsþjónum er innskráning hins vegar byggð á SSH-lyklum og þá er ekki víst að þú þurfir að nota passwd.


Eigendur, hópar og aðgangur

Eins og rætt var í kaflanum um skráakerfið mun ítarlegt skráarlistaútgáfa með ls -l sýna eiganda, hóp og heimildir skráarinnar, til dæmis

-rw-r----- 1 anna nemendur 1200 jún  4 12:00 skjal.txt
þar sem sjá má að anna á skrána og nemendur er hópnum úthlutað.

Heimildirnar tilgreina að eigandinn megi lesa og breyta skránni, en hópurinn megi aðeins lesa hana. Við getum breytt þessum réttindum og hópnum með því að keyra skipanir eins og

chmod 640 skjal.txt
chgrp nemendur skjal.txt
sem stilla réttindin nákvæmlega eins og við viljum.

Sjálfgefnar heimildir og umask

Þegar nýjar skrár verða til ákveður kerfið sjálfgefnar heimildir með hliðsjón af svokölluðu umask gildi. Til að skoða og prófa umask-gildið getum við keyrt skipanirnar

cd ~/examples
umask
mkdir -p playground/umask-demo
touch playground/umask-demo/skra.txt
ls -ld playground/umask-demo playground/umask-demo/skra.txt
þar sem við sjáum hvernig nýjar skrár og möppur fá úthlutað réttindum.

Algengt gildi er 0022. Þá eru nýjar skrár oft 644 og nýjar möppur 755: eigandinn má skrifa, en aðrir mega yfirleitt bara lesa eða fara inn.

Prófaðu: skoða eiganda og heimildir

Skoðaðu heimildir á nokkrum æfingaskrám. Hver er munurinn á scripts/hello.sh og permissions/run_me.sh?

Lausn

Við getum rannsakað skráarheimildirnar og okkar eigin hópa með því að keyra skipanirnar

cd ~/examples
ls -l scripts/hello.sh permissions/run_me.sh permissions/private_note.txt
id
groups
en þar sést að scripts/hello.sh hefur keyrsluréttindi x á meðan permissions/run_me.sh vantar þau í upphafi.

Á kerfum þar sem við höfum stjórnandaréttindi getum við framkvæmt skipanir sem ofurpaur (e. superuser, oft kallaður root) með því að slá inn

sudo whoami
sem mun staðfesta að við séum að keyra með fullum réttindum ef okkur er það heimilt.


su og sudo

Þótt tvær skyldar skipanir kunni að virðast svipaðar er munurinn á þeim skýr:

  • Skipunin su (stytting á substitute user) skiptir yfir í annan notanda ef við þekkjum lykilorð viðkomandi.
  • Skipunin sudo (stytting á superuser do) keyrir eina staka skipun með réttindum annars notanda ef kerfið leyfir okkur það.

Við sjáum þetta í verki með skipunum eins og

su - anna
sudo apt update
en á flestum nútíma Linux-kerfum er notkun á sudo mun algengari en að skrá sig beint inn sem root.

Prófaðu: taka heimild af afriti

Afritaðu permissions/private_note.txt í playground/, taktu lesheimildina af og bættu henni svo aftur við.

Lausn

Við getum prófað að eiga við réttindi á okkar eigin afriti með því að keyra skipanalistann

cd ~/examples
cp permissions/private_note.txt playground/private-copy.txt
ls -l playground/private-copy.txt
chmod u-r playground/private-copy.txt
cat playground/private-copy.txt
chmod u+r playground/private-copy.txt
cat playground/private-copy.txt
þar sem við sjáum að cat skilar villu þegar lesheimildina vantar en virkar fullkomlega aftur þegar við bætum henni við.

Prófaðu: umask í verki

Búðu til nýja skrá og nýja möppu í playground/ og skoðaðu hvaða heimildir þær fá sjálfgefið.

Lausn

Til að fylgjast með hvernig sjálfgefnar heimildir verða til getum við keyrt skipanirnar

cd ~/examples
umask
mkdir -p playground/default-dir
touch playground/default-file.txt
ls -ld playground/default-dir playground/default-file.txt
og borið niðurstöðurnar saman við gildin úr umask til að skilja þau betur.


Sérstakar heimildir: SUID, SGID og sticky bit

Auk hefðbundnu réttindanna r, w og x styður Linux nokkrar sérstakar heimildir sem mikilvægt er að þekkja.

SUID

Hægt er að nota SUID (e. Set User ID) til að leyfa forriti að keyra tímabundið með réttindum eiganda skráarinnar. Gott dæmi er passwd og við getum skoðað það með því að keyra

ls -l /usr/bin/passwd
sem prentar ítarlegar upplýsingar á skjáinn.

Úttakið gæti til dæmis litið út á þessa leið

-rwsr-xr-x 1 root root ... /usr/bin/passwd
þar sem bókstafurinn s í stað x hjá eigandanum gefur til kynna að SUID sé virkt.

SGID

Samsvarandi hugmynd er SGID (e. Set Group ID) sem tengist hópnum í stað notandans. Ef við viljum að nýjar skrár inni í tiltekinni möppu erfi sjálfkrafa hópinn hennar getum við keyrt skipunina

chmod g+s sameiginleg_mappa
sem virkjar SGID á möppunni.

Sticky bit

Á sameiginlegum möppum eins og /tmp er oft notað sticky bit sem tryggir að þótt margir geti búið til skrár þar, megi notendur ekki eyða skrám sem aðrir eiga. Við getum skoðað réttindin á /tmp með því að keyra

ls -ld /tmp
og rýna í niðurstöðuna.

Úttakið gæti litið út á þessa leið

drwxrwxrwt  ... /tmp
þar sem bókstafurinn t í endann sýnir að sticky bit er til staðar.

Prófaðu: skoða sérstakar heimildir

Kannaðu sjálf/ur hvernig SUID og sticky bit birtast á þínu kerfi.

Lausn

Við getum prentað réttindin á fljótlegan hátt með því að keyra

ls -l /usr/bin/passwd
ls -ld /tmp
til að skoða réttindastafina beint.

Vissir þú?

Nafnið „sticky bit“ kemur frá eldri Unix-kerfum þar sem bitinn gat látið forrit „festast“ lengur í minni til að ræsast hraðar næst. Sú merking er að mestu horfin, en nafnið lifði áfram.


Hverjir eru inni á kerfinu?

Á stórum fjölnotendakerfum er afar auðvelt að fylgjast með hverjir eru skráðir inn samtímis með því að keyra skipanir eins og who (stytting á who), w (einnig stytting á who en ítarlegri), og last (stytting á last):

who
w
last
sem sýna okkur lista yfir notendur, hvað þeir eru að gera eða sögu yfir nýlegar innskráningar.

Vissir þú?

Ofurpaurinn hefur UID-númerið 0. Í Linux er það númerið, ekki nafnið sjálft, sem gefur ofurpaursréttindi. Notandinn gæti í raun heitið eitthvað annað, en UID 0 hefur samt sérstaka stöðu.

Smá samantekt

Eftir þennan hluta ættirðu að geta:

  • fundið notandanafnið þitt með whoami, id og groups,
  • lesið grunnbyggingu lína í /etc/passwd og /etc/group,
  • útskýrt eiganda, hóp og aðgang annarra,
  • prófað chmod á eigin afritum,
  • skilið í grófum dráttum hvað sudo, su, SUID, SGID og sticky bit eru,
  • skoðað hverjir eru skráðir inn með who og w.