3 modulis · 3.2
sudo ir mažiausios teisės
3 modulis: Naudotojai, teisės ir sudo · Skaitymo laikas: 11 min.
Mokymosi tikslas: po šios pamokos galėsite dirbti kaip paprastas naudotojas su sudo, saugiai pridėti administratorių, keisti sudo nustatymus neužsirakindami sau prieigos ir paaiškinti, kodėl mažiausios teisės apsaugo Jūsų serverį.
Pagrindinės sąvokos: sudo, grupė sudo, grupė wheel, /etc/sudoers, /etc/sudoers.d, visudo, NOPASSWD, sudo -l, root paskyros užrakinimas, sudo žurnalas, mažiausios teisės (least privilege), paslaugos naudotojas
Kodėl nedirbti tiesiog kaip root?
Po įdiegimo dažnai prisijungiama kaip root. Tai patogu: viskas leidžiama. Tačiau būtent tai ir yra problema:
- Užtenka vienos rašybos klaidos.
rm -rf / home/anna/oud(atkreipkite dėmesį į tarpą po pirmojo pasvirojo brūkšnio), paleista kaip root, ištrina visą Jūsų serverį. Paprastas naudotojas gaus klaidos pranešimą. - Viskas veikia kaip root. Iš interneto įklijuotas scenarijus, bandoma programa: viskas gauna visas teises.
- Nelieka pėdsakų. Jei trys žmonės dirba kaip root, vėliau niekas nežino, kas ką padarė.
- Root yra vardas, kurį bando kiekvienas užpuolikas. Prisijungimą kaip root geriausia visiškai išjungti (pamoka 2.2), tačiau tai galima padaryti tik tada, kai turite kitą kelią į administratoriaus teises.
Tas kitas kelias yra sudo: prisijungiate savo vardu ir tik prieš komandą, kuriai reikia administratoriaus teisių, parašote sudo.
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 nuo 25.10 versijos pagal numatytuosius nustatymus naudoja sudo-rs, naują sudo įgyvendinimą. Viskam, kas aprašyta šioje pamokoje, jis veikia taip pat.)
sudo prašo Jūsų slaptažodžio, o ne root slaptažodžio. Po to pagal numatytuosius nustatymus jį įsimena penkiolikai minučių, kad nereikėtų jo įvesti prie kiekvienos komandos. Kiekviena su sudo įvykdyta komanda patenka į žurnalą.
Administratoriaus sukūrimas
Debian ir Ubuntu sistemose kiekvienas grupės sudo narys per sudo gali daryti viską. Tai nurodyta faile /etc/sudoers:
%sudo ALL=(ALL:ALL) ALLTai skaitoma taip: grupės sudo nariai (%) visuose kompiuteriuose (ALL) kaip bet kuris naudotojas ir grupė ((ALL:ALL)) gali vykdyti bet kurią komandą (ALL).
Taigi administratorius pridedamas dviem žingsniais, kaip root:
root@web1:~# adduser anna
root@web1:~# adduser anna sudoTada įrašykite Annos viešąjį raktą į /home/anna/.ssh/authorized_keys su tinkamu savininku ir teisėmis:
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_keysNepamirškite chown: jei failą nukopijavo root, jis priklauso root, ir tada Anna negalės prisijungti savo raktu.
Dabar, palikę root sesiją atvirą, išbandykite antrame lange:
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
rootTik kai tai veikia, SSH nustatymuose nustatykite PermitRootLogin no (pamoka 2.2). Nuo tada visada prisijungiate kaip Anna.
Vienas dalykas, kurį verta prisiminti: dabar Annai sudo reikia slaptažodžio. Laikykite jį savo slaptažodžių tvarkyklėje. Prisijungiama raktu, sudo naudojamas su slaptažodžiu: tai du skirtingi dalykai, kuriuos įsilaužėlis turėtų gauti abu.
sudo nustatymų keitimas: visada su visudo
Klaida faile /etc/sudoers gali reikšti, kad sudo visiškai nebeveiks. Jei ir root negali prisijungti, būsite įstrigę. Todėl sudo nustatymų niekada neredaguokite įprastu redaktoriumi, o naudokite visudo. Jis atidaro laikiną kopiją ir prieš išsaugodamas patikrina jos turinį:
root@web1:~# visudo -f /etc/sudoers.d/backupKaip ir su SSH, verčiau naudokite atskirą failą kataloge /etc/sudoers.d/, o ne pagrindinį failą. Atkreipkite dėmesį į dvi šio katalogo taisykles:
- Failai, kurių pavadinime yra taškas arba kurių pavadinimas baigiasi
~, praleidžiami. Taigibackup.confneveikia, obackupveikia. Taip siekiama ignoruoti redaktorių kopijas, tačiau tai nustebina daugelį žmonių. - Failas turi priklausyti root ir kiti negali turėti teisės į jį rašyti (įprasta 440; tuo pasirūpina visudo).
Jei norite patikrinti esamą failą jo neredaguodami: visudo -c patikrina viską.
NOPASSWD: patogu, bet žinokite, ką darote
Su NOPASSWD sudo nebeprašo slaptažodžio:
anna ALL=(ALL:ALL) NOPASSWD: ALLKai kurie VPS atvaizdai tai nustato numatytajam naudotojui, kad prisijungę raktu iš karto būtumėte administratorius. Su sudo -l pažiūrėkite, kas galioja Jūsų sistemoje. Pasekmė: kas turi Annos raktą, iš karto yra root. Antrosios spynos nebelieka. Asmeniniam serveriui galite tai pasirinkti, bet darykite tai sąmoningai.
Daug geriau NOPASSWD taikyti tik vienai konkrečiai komandai, pavyzdžiui, atsarginių kopijų scenarijui, kuris turi veikti automatiškai:
backup ALL=(root) NOPASSWD: /usr/local/bin/maak-backupTada naudotojas backup gali paleisti būtent tą vieną scenarijų kaip root, be slaptažodžio, ir nieko daugiau. Dvi spąstai:
- Visada naudokite visą kelią. Jei nurodysite tik
maak-backup, kas nors gali įdėti savo programą tokiu pačiu pavadinimu savo kelio pradžioje. - Pats scenarijus tam naudotojui turi būti neįrašomas. Kitaip jis jį pakeis ir tada kaip root vykdys bet kokias komandas. Tas pats galioja komandoms, kurios pačios gali atidaryti apvalkalą, pavyzdžiui, redaktoriui (
vim,nano) arbaless: kas gali jas paleisti per sudo, gali iš programos atidaryti root apvalkalą. Tokių komandų niekada neleiskite atskirai per sudo.
Kas registruojama žurnale
Kiekvieną kartą, kai kas nors naudoja sudo, į journal įrašoma eilutė (o sistemose su rsyslog ir į /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 updateMatote, kas, kur, kieno vardu ir kokią komandą vykdė. Tai viena iš priežasčių, kodėl keliems žmonėms nereikėtų dirbti kaip root. Nesėkmingi sudo bandymai („incorrect password attempts“) iš paskyros, kuri nėra Jūsų, yra pavojaus signalas.
Mažiausios teisės plačiau
sudo yra vienas bendro principo pritaikymas: mažiausios teisės (least privilege). Kiekvienas naudotojas ir kiekviena paslauga gauna tiksliai tiek teisių, kiek reikia, ir ne daugiau. Serveryje tai, be kita ko, reiškia:
- dirbate kaip paprastas naudotojas ir sudo naudojate tik tada, kai reikia;
- kiekviena paslauga veikia savo naudotojo vardu be apvalkalo (pamoka 3.1), o ne kaip root;
- žiniatinklio programa gauna duomenų bazės naudotoją, kuris gali naudoti tik savo duomenų bazę, o ne duomenų bazių serverio administratorių;
- atsarginių kopijų scenarijus gali vykdyti tik tą vieną jam reikalingą komandą (NOPASSWD su visu keliu);
- kolega, kuris tik atnaujina svetainę, gauna rašymo teisę į
/var/www/example.comper grupę, o ne sudo.
Idėja tokia: jei kas nors nutinka (spraga įskiepyje, pavogtas raktas), žala apsiriboja tuo vienu naudotoju ar paslauga. Tai nuolat kartojasi CIS principuose ir sistemos stiprinimo pamokoje (10.1).
AlmaLinux ir Rocky Linux sistemose
Ten administratorių grupė vadinama wheel, o ne sudo: usermod -aG wheel anna. Eilutė faile /etc/sudoers yra %wheel ALL=(ALL) ALL. visudo ir /etc/sudoers.d veikia taip pat. Sudo pranešimai ten taip pat įrašomi į /var/log/secure.
Santrauka
- Dirbkite kaip paprastas naudotojas ir administravimui naudokite sudo; sudo prašo Jūsų paties slaptažodžio ir registruoja kiekvieną komandą.
- Administratoriaus sukūrimas:
adduser anna,adduser anna sudo(RHEL tipo sistemose wheel), raktas su tinkamu savininku ir teisėmis, bandymas antrame lange, tik tada išjungiamas root prisijungimas. - sudo taisykles redaguokite tik su
visudo, geriausia atskirame faile kataloge/etc/sudoers.d/, be taško pavadinime. - NOPASSWD viskam pašalina vieną spyną; verčiau naudokite jį tik vienai komandai su visu keliu, kurios naudotojas negali pakeisti.
- Mažiausios teisės: kiekvienas naudotojas ir paslauga gauna tiksliai tai, ko reikia, kad klaida ar spraga liktų maža.
Testas (quiz)
Užduotis
Užduotis O3.2: Administratorius su sudo. Sukurkite savo serveryje paprastą administratorių (pavyzdžiui, anna), tinkamai įdėkite savo raktą, antrame lange išbandykite prisijungimą ir sudo -l, o tada išjunkite root prisijungimą per SSH (PermitRootLogin no). Pažymėkite atliktus žingsnius, įklijuokite id išvestį (tik vardą ir grupes) ir atsakykite į klausimus: kuri eilutė suteikia Jūsų administratoriui teises, ar kur nors yra NOPASSWD ir kaip pateksite vidun, jei pamiršite slaptažodį?
Užduotis O3.2: Administratorius su sudo
Šią užduotį atliekate patys; niekas jos netikrina. Pažymėkite, ką atlikote, ir pažymėkite užduotį kaip atliktą.
%sudo ALL=(ALL:ALL) ALL faile /etc/sudoers (RHEL: %wheel). NOPASSWD tik sąmoningai ir geriausia apribojant viena komanda. Pamiršus slaptažodį: per paslaugų teikėjo konsolę, naują root slaptažodį nustatant per valdymo skydelį arba gelbėjimo aplinką, tada passwd <gebruiker>.
Jūsų pažymėti varneliai ir pastabos lieka tik šioje naršyklėje; niekur jų nesiunčiame. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotį atlikote.
Skaitykite daugiau
Šiuose straipsniuose aprašyti žingsniai taikomi WebOké VPS serveriams; pas kitus teikėjus tai veikia panašiai.
- Jūsų VPS apsauga: pirmosios penkios minutės
- Nebeturite prieigos prie savo VPS: ką daryti?
- DirectAdmin vadovas 12.2: Duomenų bazės naudotojai, teisės ir slaptažodžiai
- Ubuntu Server: User management: https://ubuntu.com/server/docs/how-to/security/user-management/
- Debian sudoers vadovas: https://manpages.debian.org/trixie/sudo/sudoers.5.en.html
- VPS: nuo pirmojo prisijungimo iki saugaus serverio 3.1: Atskiras naudotojas su sudo teisėmis
