Moodul 3 · 3.2
sudo ja minimaalsed õigused
Moodul 3: Kasutajad, õigused ja sudo · Lugemisaeg: 11 minutit
Õpieesmärk: Pärast seda õppetundi oskad töötada tavakasutajana koos sudoga, lisada turvaliselt halduri, muuta sudo seadeid ilma end välja lukustamata ning selgitada, miks minimaalsed õigused su serverit kaitsevad.
Põhimõisted: sudo, grupp sudo, grupp wheel, /etc/sudoers, /etc/sudoers.d, visudo, NOPASSWD, sudo -l, root-konto lukustamine, sudo logi, minimaalsed õigused (least privilege), teenusekasutaja
Miks mitte lihtsalt root'ina töötada?
Pärast paigaldust logid sageli sisse root'ina. See on mugav: kõik on lubatud. Aga just see ongi probleem:
- Ühest trükiveast piisab.
rm -rf / home/anna/oud(pane tähele tühikut pärast esimest kaldkriipsu) kustutab root'ina kogu su serveri. Tavakasutajana saad veateate. - Kõik töötab root'ina. Internetist kleebitud skript, programm, mida testid: kõik saavad täisõigused.
- Jälge ei jää. Kui kolm inimest töötavad root'ina, ei tea hiljem keegi, kes mida tegi.
- root on nimi, mida iga ründaja proovib. root'ina sisselogimise on parem üldse välja lülitada (õppetund 2.2), kuid seda saad teha alles siis, kui sul on haldusõigusteni mõni muu tee.
See teine tee on sudo: logid sisse iseendana ja paned sudo ainult nende käskude ette, mis vajavad haldusõigusi.
anna@web1:~$ apt update
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
anna@web1:~$ sudo apt update
[sudo] password for anna:
Hit:1 http://deb.debian.org/debian trixie InRelease
...(Ubuntu kasutab alates versioonist 25.10 vaikimisi sudo-rs'i, mis on sudo uus teostus. Kõige selles õppetunnis kirjeldatu jaoks töötab see samamoodi.)
sudo küsib sinu parooli, mitte root'i oma. Seejärel jätab see selle vaikimisi veerandtunniks meelde, nii et sa ei pea iga käsu juures uuesti sisestama. Iga käsk, mille sudoga käivitad, jõuab logisse.
Halduri loomine
Debianis ja Ubuntus võib iga grupi sudo liige sudo kaudu kõike teha. See on kirjas failis /etc/sudoers:
%sudo ALL=(ALL:ALL) ALLLoe seda nii: grupi sudo liikmed (%) võivad kõigis masinates (ALL) iga kasutaja ja grupina ((ALL:ALL)) käivitada iga käsu (ALL).
Halduri lisamine käib seega root'ina kahes sammus:
root@web1:~# adduser anna
root@web1:~# adduser anna sudoSeejärel pane Anna avalik võti faili /home/anna/.ssh/authorized_keys õige omaniku ja õigustega:
root@web1:~# mkdir -p /home/anna/.ssh
root@web1:~# cp /root/.ssh/authorized_keys /home/anna/.ssh/
root@web1:~# chown -R anna:anna /home/anna/.ssh
root@web1:~# chmod 700 /home/anna/.ssh
root@web1:~# chmod 600 /home/anna/.ssh/authorized_keysÄra unusta käsku chown: kui root faili kopeerib, kuulub fail root'ile ja siis ei saa Anna oma võtmega sisse logida.
Testi nüüd teises aknas, samal ajal kui su root-seanss jääb avatuks:
anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$ sudo -l
[sudo] password for anna:
User anna may run the following commands on web1:
(ALL : ALL) ALL
anna@web1:~$ sudo whoami
rootAlles siis, kui see töötab, sea SSH seadetes PermitRootLogin no (õppetund 2.2). Sellest hetkest logid alati sisse Annana.
Üks asi, mida meeles pidada: Anna vajab nüüd sudo jaoks parooli. Hoia seda oma paroolihalduris. Sisselogimine käib võtmega, sudo parooliga: kaks eri asja, mis sissetungijal peavad mõlemad olemas olema.
sudo seadete muutmine: alati visudoga
Viga failis /etc/sudoers võib tähendada, et sudo ei tööta enam üldse. Kui ka root ei saa sisse logida, oled lõksus. Seepärast ei muuda sa sudo seadeid kunagi tavalise redaktoriga, vaid käsuga visudo. See avab ajutise koopia ja kontrollib sisu enne salvestamist:
root@web1:~# visudo -f /etc/sudoers.d/backupNagu SSH puhul, kasuta põhifaili asemel pigem oma faili kaustas /etc/sudoers.d/. Pane tähele kahte selle kausta reeglit:
- Failid, mille nimi sisaldab punkti või lõpeb märgiga
~, jäetakse vahele.backup.confseega ei tööta,backupaga töötab. See on mõeldud redaktorite koopiate eiramiseks, kuid üllatab paljusid. - Fail peab kuuluma root'ile ega tohi olla teistele kirjutatav (tavaline on 440; visudo hoolitseb selle eest).
Kui tahad olemasolevat faili kontrollida ilma seda muutmata: visudo -c kontrollib kõike.
NOPASSWD: mugav, aga tea, mida teed
Valikuga NOPASSWD ei küsi sudo enam parooli:
anna ALL=(ALL:ALL) NOPASSWD: ALLMõned VPS-i tõmmised seavad selle vaikekasutajale, nii et pärast võtmega sisselogimist oled kohe haldur. Vaata käsuga sudo -l, mis sinu puhul kehtib. Tagajärg: kellel on Anna võti, on kohe root. Teist lukku enam pole. Isikliku serveri puhul võid selle kasuks otsustada, kuid tee seda teadlikult.
Palju parem on kasutada NOPASSWD-d ainult ühe kindla käsu jaoks, näiteks varundusskripti jaoks, mis peab saama automaatselt käivituda:
backup ALL=(root) NOPASSWD: /usr/local/bin/maak-backupKasutaja backup võib siis käivitada root'ina täpselt selle ühe skripti, ilma paroolita, ja mitte midagi muud. Kaks lõksu:
- Kasuta alati täielikku teed. Kui on ainult
maak-backup, võib keegi panna oma samanimelise programmi oma PATH-i algusesse. - Skript ise ei tohi olla kirjutatav sellele kasutajale. Muidu muudab ta seda ja käivitab siis suvalisi käske root'ina. Sama kehtib käskude kohta, mis suudavad ise kesta avada, näiteks redaktor (
vim,nano) võiless: kes tohib neid sudo kaudu käivitada, saab programmist avada root-kesta. Ära anna selliseid käske kunagi eraldi sudo kaudu.
Mida logitakse
Iga kord, kui keegi sudot kasutab, tekib rida journal'isse (ja rsyslogiga süsteemides ka faili /var/log/auth.log):
anna@web1:~$ sudo journalctl _COMM=sudo --since today
Nov 09 10:31:02 web1 sudo[2214]: anna : TTY=pts/0 ; PWD=/home/anna ; USER=root ; COMMAND=/usr/bin/apt updateNäed, kes, kus, kellena ja millise käsu käivitas. See on üks põhjus, miks mitte töötada mitme inimesega root'ina. Ebaõnnestunud sudo katsed ("incorrect password attempts") kontolt, mis pole sinu oma, on häiresignaal.
Minimaalsed õigused laiemalt
sudo on üks üldise põhimõtte rakendus: minimaalsed õigused (least privilege). Iga kasutaja ja iga teenus saab täpselt need õigused, mida vaja, ja mitte rohkem. Serveris tähendab see muu hulgas järgmist:
- töötad tavakasutajana ja kasutad sudot ainult siis, kui vaja;
- iga teenus töötab oma kesta-ta kasutaja all (õppetund 3.1), mitte root'ina;
- veebirakendus saab andmebaasikasutaja, kes tohib kasutada ainult oma andmebaasi, mitte andmebaasiserveri haldurit;
- varundusskript tohib käivitada ainult seda ühte käsku, mida ta vajab (NOPASSWD täieliku teega);
- kolleeg, kes ainult veebisaiti uuendab, saab grupi kaudu kirjutusõiguse kausta
/var/www/example.com, mitte sudot.
Mõte on selles: kui midagi läheb valesti (turvaauk pluginas, varastatud võti), jääb kahju piiratuks selle ühe kasutaja või teenusega. CIS-i põhimõtetes ja turvatugevduse õppetunnis (10.1) tuleb see ikka ja jälle tagasi.
AlmaLinuxis ja Rocky Linuxis
Seal on haldurite grupi nimi sudo asemel wheel: usermod -aG wheel anna. Rida failis /etc/sudoers on %wheel ALL=(ALL) ALL. visudo ja /etc/sudoers.d töötavad samamoodi. sudo teated on seal ka failis /var/log/secure.
Kokkuvõte
- Tööta tavakasutajana ja kasuta haldamiseks sudot; sudo küsib sinu enda parooli ja logib iga käsu.
- Halduri loomine:
adduser anna,adduser anna sudo(RHEL-i laadsetes wheel), võti õige omaniku ja õigustega, test teises aknas, alles siis lülita root-login välja. - Muuda sudo reegleid ainult käsuga
visudo, eelistatult oma failis kaustas/etc/sudoers.d/, ilma punktita nimes. - NOPASSWD kõigele eemaldab ühe luku; kasuta seda pigem ainult ühe käsu jaoks täieliku teega, mida kasutaja muuta ei saa.
- Minimaalsed õigused: iga kasutaja ja teenus saab täpselt seda, mida vaja, nii et viga või turvaauk jääb väikeseks.
Test (quiz)
Ülesanne
Ülesanne O3.2: Haldur, kellel on sudo. Loo oma serveris tavaline haldur (näiteks anna), sea võti õigesti, testi teises aknas sisselogimist ja käsku sudo -l ning lülita seejärel root-login SSH kaudu välja (PermitRootLogin no). Märgi sammud tehtuks, kleebi käsu id väljund (ainult nimi ja grupid) ja vasta küsimustele: milline reegel annab su haldurile õigused, kas kuskil on NOPASSWD ja kuidas pääsed sisse, kui unustad oma parooli?
Ülesanne O3.2: Haldur, kellel on sudo
Selle ülesande teed ise, keegi ei kontrolli seda. Märgi ära, mida tegid, ja märgi ülesanne tehtuks.
%sudo ALL=(ALL:ALL) ALL failis /etc/sudoers (RHEL: %wheel). NOPASSWD ainult teadlikult ja eelistatult piiratuna ühe käsuga. Kui parool ununes: teenusepakkuja konsooli kaudu, uus root-parool paneelist või päästekeskkonnast, seejärel passwd <gebruiker>.
Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.
Loe edasi
Nende artiklite sammud kehtivad WebOké VPS-ide kohta; teiste teenusepakkujate juures toimib see sarnaselt.
- Oma VPS-i turvamine: esimesed viis minutit
- Pole enam ligipääsu oma VPS-ile: mis nüüd?
- DirectAdmin juhend 12.2: Andmebaasi kasutajad, õigused ja paroolid
- Ubuntu Server: User management: https://ubuntu.com/server/docs/how-to/security/user-management/
- Debiani juhend sudoers: https://manpages.debian.org/trixie/sudo/sudoers.5.en.html
