Moodul 3 · 3.1
Kasutajad, grupid ja failiõigused
Moodul 3: Kasutajad, õigused ja sudo · Lugemisaeg: 12 minutit
Õpieesmärk: Pärast seda õppetundi oskad luua ja vaadata kasutajaid ja gruppe, lugeda faili või kausta õigusi käsu ls -l väljundist ning seada need käskudega chmod ja chown õigesti, ilma et teeksid kõik kõigile lahti.
Põhimõisted: root (UID 0), tavakasutaja, süsteemikasutaja, /etc/passwd, /etc/shadow, grupp, adduser, id, rwx, omanik, grupp, teised, kaheksandsüsteem (644, 755, 600), chmod, chown, umask, setuid, 777
Igaüks on number
Linux on algusest peale ehitatud nii, et ühel masinal on mitu kasutajat. Iga töötav protsess töötab mingi kasutaja nimel ja igal failil on omanik. Süsteemi jaoks on kasutaja eelkõige number, UID:
- root on UID 0. Root võib kõike: lugeda ja muuta iga faili, peatada iga teenuse, luua iga kasutaja. Küsimust "oled sa kindel?" ei tule.
- Tavakasutajad, näiteks
anna, saavad Debianis ja Ubuntus UID alates 1000. Nad võivad kirjutada oma kodukausta ja muud vähe. - Süsteemikasutajatel on väike number ning tavaliselt pole neil parooli ega shelli. Teenused töötavad sellise kasutaja all: nginx kasutaja
www-dataall, PostgreSQL kasutajapostgresall. Kui selline teenus häkitakse, on sissetungijal ainult selle kasutaja õigused, mitte root'i omad.
Kes sa oled, näed käsuga id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Annal on UID 1000, oma grupp anna ning ta kuulub ka gruppidesse sudo ja users.
Kus kasutajad asuvad
Kasutajate loend on failis /etc/passwd, üks rida kasutaja kohta:
anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bashVäljad, eraldatud koolonitega: nimi, x (parool on mujal), UID, põhigrupp, kirjeldus, kodukaust, shell. Kasutajal www-data on shelliks /usr/sbin/nologin: sisse logida ei saa.
Paroolid ise on krüptitult (räsina) failis /etc/shadow. Seda faili saab lugeda ainult root. ! või * paroolivälja alguses tähendab, et parooliga sisse logida ei saa. Nii on root Ubuntus vaikimisi lukus, ja Debianis siis, kui sa paigaldamisel root'i parooli ei andnud.
Kasutajate ja gruppide loomine
Debianis ja Ubuntus kasuta sõbralikku käsku adduser:
root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...adduser loob kasutaja, samanimelise oma grupi ja kodukausta ning küsib parooli. Olemas on ka madalama taseme useradd (AlmaLinuxis ja Rocky Linuxis on see tavaline käsk), kuid ilma suvanditeta teeb see vähem: parooli ei määra ja mõnes süsteemis kodukausta ei loo.
Grupp on viis anda õigusi mitmele kasutajale korraga. Kasutaja lisamine gruppi:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # sama, töötab kõikjalPane tähele -a käsus usermod: ilma -a-ta asendad kõik kasutaja lisagrupid ainult selle ühega. Uus grupp hakkab kehtima alles pärast uuesti sisselogimist.
Konto sulgemine ilma seda kustutamata (näiteks endise kolleegi oma):
root@web1:~# usermod -L -e 1 jan-L lukustab parooli, -e 1 laseb kontol aeguda. Tähelepanu: lukustatud parool ei peata alati SSH-võtit. Eemalda seega ka võtmed failist /home/jan/.ssh/authorized_keys (õppetund 2.3); aegunud konto (-e 1) lükkab sshd aga tagasi.
Õiguste lugemine
anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna www-data 1520 Nov 9 10:12 index.html
-rw-r----- 1 anna www-data 412 Nov 9 10:14 config.php
drwxr-xr-x 2 anna www-data 4096 Nov 9 10:15 images
drwxrwxr-x 2 www-data www-data 4096 Nov 9 10:20 uploadsEsimene kümnemärgiline plokk on kõige võti:
- Märk 1: tüüp.
-on tavaline fail,dkaust (directory),lotsetee (symlink). - Märgid 2 kuni 4: mida võib omanik.
- Märgid 5 kuni 7: mida võib grupp.
- Märgid 8 kuni 10: mida võivad teised (kõik ülejäänud).
Seejärel tulevad linkide arv, omanik, grupp, suurus ja kuupäev.
Tähed tähendavad faili puhul:
| Täht | Tähendus faili puhul |
|---|---|
r | lugemine |
w | muutmine |
x | käivitamine programmi või skriptina |
Ja kausta puhul veidi teisiti:
| Täht | Tähendus kausta puhul |
|---|---|
r | kaustas olevate failide nimede küsimine |
w | failide loomine, ümbernimetamine ja kustutamine kaustas |
x | kausta sisenemine ja selles olevate failide avamine |
Viimane üllatab paljusid. Ilma kausta x-õiguseta ei pääse sa selles olevate failide juurde, isegi kui need ise on loetavad. Ja kellel on kaustal w, see saab selles faile kustutada, isegi kui need kuuluvad kellelegi teisele.
Näites: index.html võivad lugeda kõik; config.php (andmebaasi parooliga) võib Anna lugeda ja muuta, grupp www-data (ehk veebiserver) ainult lugeda ja ülejäänud ei saa midagi. Kausta uploads võib veebiserver kirjutada, sest sinna tulevad külastajate üleslaaditud failid.
Õigused numbrina
Õigusi kirjutatakse sageli kolme numbrina, kaheksandsüsteemis. Igal tähel on väärtus: r = 4, w = 2, x = 1. Liida iga rühma kohta kokku:
| Õigused | Number | Kasutus |
|---|---|---|
rw-r--r-- | 644 | tavaline fail, mida kõik võivad lugeda |
rw-r----- | 640 | fail omanikule ja grupile, näiteks parooliga konfiguratsioon |
rw------- | 600 | salajane fail, näiteks authorized_keys või privaatvõti |
rwxr-xr-x | 755 | kaust või programm, mida kõik võivad kasutada |
rwx------ | 700 | privaatne kaust, näiteks ~/.ssh |
Õiguste muutmine: chmod ja chown
anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.phpchmod muudab õigusi numbri või tähtedega (u, g, o omaniku, grupi ja teiste jaoks; + või - ja täht). chown eigenaar:groep muudab omanikku ja gruppi; seda võib teha ainult root. -R-ga töötavad mõlemad terve kausta peal, ja just seal läheb sageli valesti: chmod -R 644 kaustale muudab kõik alamkaustad kasutuskõlbmatuks, sest kaustad vajavad x-õigust. Terve puu jaoks kasuta parem find:
root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +Mitte kunagi 777
"See ei töötanud, panin lihtsalt 777 peale." 777 tähendab: kõik serveris võivad seda lugeda, muuta ja käivitada. Kui mõni teenus või veebisait su serveris kunagi häkitakse, saab sissetungija kirjutada kõikjale, kus on 777, ka sinu PHP-failidesse. Tegelik probleem on peaaegu alati omanik või grupp: anna veebiserverile grupi kaudu täpselt see õigus, mida ta vajab, ja ainult kaustale, kus seda vaja on.
Vaikeõigused ja erilised bitid
Uued failid saavad oma õigused umask'i kaudu. Levinud umask'iga 022 saavad uued failid 644 ja uued kaustad 755. Oma umask'i näed käsuga umask.
Mõnikord näed x asemel s, näiteks failil /usr/bin/passwd (-rwsr-xr-x). See on setuid-bitt: programm töötab omaniku (root) õigustega ka siis, kui selle käivitab tavakasutaja. See on vajalik mõne süsteemiprogrammi jaoks, kuid ära pane seda kunagi ise skriptile. Ootamatu setuid-fail on tuntud sissemurdmise märk; käsuga find / -perm -4000 -type f 2>/dev/null näed neid kõiki.
AlmaLinuxis ja Rocky Linuxis
adduser on seal teine nimi käsule useradd; kasuta useradd -m anna ja seejärel passwd anna. Gruppe lisatakse käsuga usermod -aG. SELinux lisab selles õppetunnis kirjeldatud õiguste kõrvale veel ühe kihi: õigete õigustega fail võidakse siiski tagasi lükata, kui sellel on vale SELinuxi silt (ls -Z näitab seda).
Kokkuvõte
- Igal kasutajal on UID; root (0) võib kõike, teenused töötavad oma süsteemikasutajate all ilma shellita.
- Kasutajad on failis
/etc/passwd, paroolide räsid failis/etc/shadow. Loo kasutajad käsugaadduserja lisa gruppe käsugausermod -aG. ls -lnäitab tüüpi, omaniku, grupi ja teiste õigusi ning seejärel omanikku ja gruppi. Kausta puhul tähendabxsisenemist jawfailide loomist ja kustutamist.- Levinud numbrid: 644 ja 755 avaliku jaoks, 640 saladusi sisaldava konfiguratsiooni jaoks, 600 ja 700 privaatse jaoks. Mitte kunagi 777.
- Kasuta
find, et seada õigused tervele puule; jälgi setuid-faile.
Test (quiz)
Ülesanne
Ülesanne Z3.1: Õiguste lugemine. Ava näidisfail rechten-1.txt: käsu id väljund kolme kasutaja kohta ja käsu ls -l väljund ühes veebikaustas. Vasta iga küsimuse puhul, kes mida võib (näiteks: "kas veebiserver saab muuta faili config.php?", "millisel failil on liiga laiad õigused?", "milline number vastab õigustele .env?"). Programm võrdleb su vastuseid kindla võtmega ja selgitab iga küsimuse juures, miks.
Loe edasi
Nende artiklite sammud kehtivad WebOké majutuspakettide ja VPS-ide kohta; teiste teenusepakkujate juures toimib see sarnaselt.
- Keelatud (403): sul pole õigust avada / selles serveris
- Sisselogimine oma VPS-i SSH kaudu (ja SSH-võtme loomine)
- WordPressi kursuses: õppetund 7.4 "Saidi karastamine: õigused, päised ja turvapluginad"
- Debiani juhend, adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debiani juhend, chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
