3. modulis · 3.2
sudo un minimālās tiesības
3. modulis: Lietotāji, tiesības un sudo · Lasīšanas laiks: 11 min.
Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet strādāt kā parasts lietotājs ar sudo, droši pievienot administratoru, mainīt sudo iestatījumus, nenobloķējot piekļuvi sev, un izskaidrot, kāpēc minimālās tiesības aizsargā Jūsu serveri.
Pamatjēdzieni: sudo, grupa sudo, grupa wheel, /etc/sudoers, /etc/sudoers.d, visudo, NOPASSWD, sudo -l, root bloķēšana, sudo žurnāls, minimālās tiesības (least privilege), pakalpojuma lietotājs
Kāpēc vienkārši nestrādāt kā root?
Pēc instalēšanas bieži vien piesakāties kā root. Tas ir ērti: viss ir atļauts. Taču tieši tā ir problēma:
- Pietiek ar vienu drukas kļūdu.
rm -rf / home/anna/oud(ievērojiet atstarpi pēc pirmās slīpsvītras) kā root izdzēš visu Jūsu serveri. Kā parasts lietotājs Jūs saņemsiet kļūdas paziņojumu. - Viss darbojas kā root. Skripts, ko iekopējat no interneta, programma, ko testējat: viss saņem pilnas tiesības.
- Nekādu pēdu. Ja trīs cilvēki strādā kā root, pēc tam neviens nezina, kurš ko izdarīja.
- Root ir vārds, ko izmēģina katrs uzbrucējs. Pieteikšanos kā root labāk pilnībā izslēgt (nodarbība 2.2), taču to var izdarīt tikai tad, kad Jums ir cits ceļš uz administratora tiesībām.
Šis otrs ceļš ir sudo: Jūs piesakāties ar savu lietotāju un tikai pirms komandas, kurai vajadzīgas administratora tiesības, ierakstāt 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 kopš versijas 25.10 pēc noklusējuma izmanto sudo-rs, jaunu sudo realizāciju. Visam šajā nodarbībā tā darbojas tāpat.)
sudo prasa Jūsu paroli, nevis root paroli. Pēc tam tas to pēc noklusējuma atceras ceturtdaļstundu, lai Jums nebūtu jāievada parole pie katras komandas. Katra komanda, ko izpildāt ar sudo, tiek ierakstīta žurnālā.
Administratora izveide
Debian un Ubuntu sistēmās ikviens grupas sudo dalībnieks drīkst ar sudo darīt visu. Tas ir norādīts failā /etc/sudoers:
%sudo ALL=(ALL:ALL) ALLLasiet to šādi: grupas sudo dalībnieki (%) drīkst visās mašīnās (ALL) kā jebkurš lietotājs un grupa ((ALL:ALL)) izpildīt jebkuru komandu (ALL).
Tātad administratora pievienošana notiek divos soļos, kā root:
root@web1:~# adduser anna
root@web1:~# adduser anna sudoPēc tam ievietojiet Annas publisko atslēgu failā /home/anna/.ssh/authorized_keys ar pareizo īpašnieku un tiesībām:
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_keysNeaizmirstiet chown: ja failu nokopēja root, tas pieder root, un tad Anna nevar pieteikties ar savu atslēgu.
Tagad, kamēr Jūsu root sesija paliek atvērta, testējiet otrā logā:
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
rootTikai tad, kad tas darbojas, SSH iestatījumos iestatiet PermitRootLogin no (nodarbība 2.2). No šī brīža Jūs vienmēr piesakāties kā Anna.
Viena lieta, ko atcerēties: Annai tagad sudo lietošanai vajadzīga parole. Glabājiet to savā paroļu pārvaldniekā. Pieteikšanās notiek ar atslēgu, sudo ar paroli: divas dažādas lietas, kas ielauzējam jāiegūst abas.
sudo iestatījumu maiņa: vienmēr ar visudo
Kļūda failā /etc/sudoers var nozīmēt, ka sudo vairs vispār nedarbojas. Ja arī root nevar pieteikties, Jūs esat iestrēguši. Tāpēc sudo iestatījumus nekad nerediģējiet ar parastu redaktoru, bet ar visudo. Tas atver pagaidu kopiju un pārbauda saturu pirms saglabāšanas:
root@web1:~# visudo -f /etc/sudoers.d/backupTāpat kā ar SSH, labāk izmantojiet savu failu mapē /etc/sudoers.d/, nevis galveno failu. Ievērojiet divus šīs mapes noteikumus:
- Faili, kuru nosaukumā ir punkts vai kuru nosaukums beidzas ar
~, tiek izlaisti. Tātadbackup.confnedarbojas, betbackupdarbojas. Tas paredzēts, lai ignorētu redaktoru kopijas, taču tas pārsteidz daudzus. - Failam jāpieder root, un citiem tajā nedrīkst būt rakstīšanas tiesību (parasti 440; visudo par to parūpējas).
Ja vēlaties pārbaudīt esošu failu, to nerediģējot: visudo -c pārbauda visu.
NOPASSWD: ērti, bet ziniet, ko darāt
Ar NOPASSWD sudo vairs neprasa paroli:
anna ALL=(ALL:ALL) NOPASSWD: ALLDaži VPS attēli to iestata noklusējuma lietotājam, lai pēc pieteikšanās ar atslēgu Jūs uzreiz būtu administrators. Ar sudo -l pārbaudiet, kas attiecas uz Jums. Sekas: tas, kuram ir Annas atslēga, uzreiz ir root. Otras slēdzenes vairs nav. Personiskam serverim Jūs varat to izvēlēties, bet dariet to apzināti.
Daudz labāk ir NOPASSWD tikai vienai konkrētai komandai, piemēram, rezerves kopiju skriptam, kuram jāspēj darboties automātiski:
backup ALL=(root) NOPASSWD: /usr/local/bin/maak-backupLietotājs backup tad drīkst kā root palaist tieši šo vienu skriptu, bez paroles, un neko citu. Divi slazdi:
- Vienmēr izmantojiet pilnu ceļu. Ar tikai
maak-backupkāds var ievietot savu programmu ar tādu pašu nosaukumu sava ceļa sākumā. - Pašam skriptam nedrīkst būt rakstīšanas tiesību šim lietotājam. Pretējā gadījumā lietotājs to pielāgo un tad kā root izpilda patvaļīgas komandas. Tas pats attiecas uz komandām, kas pašas var atvērt čaulu, piemēram, redaktoru (
vim,nano) vailess: tas, kurš drīkst tās palaist ar sudo, no programmas var atvērt root čaulu. Nekad nepiešķiriet šādas komandas atsevišķi ar sudo.
Kas tiek reģistrēts žurnālā
Katru reizi, kad kāds izmanto sudo, journal tiek ierakstīta rinda (un sistēmās ar rsyslog arī /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 updateJūs redzat, kurš, kur, kā kurš lietotājs un kādu komandu izpildīja. Tas ir viens no iemesliem, kāpēc nestrādāt vairākiem cilvēkiem kā root. Neveiksmīgi sudo mēģinājumi ("incorrect password attempts") no konta, kas nav Jūsu, ir trauksmes signāls.
Minimālās tiesības plašākā mērogā
sudo ir viens vispārēja principa pielietojums: minimālās tiesības (least privilege). Katrs lietotājs un katrs pakalpojums saņem tieši vajadzīgās tiesības, ne vairāk. Serverī tas cita starpā nozīmē:
- Jūs strādājat kā parasts lietotājs un izmantojat sudo tikai tad, kad tas nepieciešams;
- katrs pakalpojums darbojas ar savu lietotāju bez čaulas (nodarbība 3.1), nevis kā root;
- tīmekļa lietotne saņem datubāzes lietotāju, kas drīkst izmantot tikai savu datubāzi, nevis datubāzes servera administratoru;
- rezerves kopiju skripts drīkst izpildīt tikai to vienu komandu, kas tam vajadzīga (NOPASSWD ar pilnu ceļu);
- kolēģis, kurš tikai atjaunina vietni, saņem rakstīšanas tiesības uz
/var/www/example.comcaur grupu, nevis sudo.
Ideja: ja kaut kas noiet greizi (ievainojamība spraudnī, nozagta atslēga), kaitējums paliek ierobežots ar šo vienu lietotāju vai pakalpojumu. CIS principos un drošības pastiprināšanas nodarbībā (10.1) tas atkārtojas vēl un vēl.
AlmaLinux un Rocky Linux sistēmās
Tur administratoru grupu sauc wheel, nevis sudo: usermod -aG wheel anna. Rinda failā /etc/sudoers ir %wheel ALL=(ALL) ALL. visudo un /etc/sudoers.d darbojas tāpat. sudo ziņojumi tur ir arī failā /var/log/secure.
Kopsavilkums
- Strādājiet kā parasts lietotājs un administrēšanai izmantojiet sudo; sudo prasa Jūsu paroli un reģistrē katru komandu.
- Administratora izveide:
adduser anna,adduser anna sudo(wheel RHEL līdzīgās sistēmās), atslēga ar pareizo īpašnieku un tiesībām, tests otrā logā, tikai tad root pieteikšanās izslēgšana. - Rediģējiet sudo noteikumus tikai ar
visudo, vēlams savā failā mapē/etc/sudoers.d/bez punkta nosaukumā. - NOPASSWD visam noņem vienu slēdzeni; labāk izmantojiet to tikai vienai komandai ar pilnu ceļu, ko lietotājs nevar mainīt.
- Minimālās tiesības: katrs lietotājs un pakalpojums saņem tieši to, kas vajadzīgs, lai kļūda vai ievainojamība paliktu maza.
Tests (quiz)
Uzdevums
Uzdevums O3.2: Administrators ar sudo. Izveidojiet savā serverī parastu administratoru (piemēram, anna), pareizi ievietojiet savu atslēgu, otrā logā pārbaudiet pieteikšanos un sudo -l, un pēc tam izslēdziet root pieteikšanos caur SSH (PermitRootLogin no). Atzīmējiet soļus, ielīmējiet id izvadi (tikai vārdu un grupas) un atbildiet uz jautājumiem: kura rinda piešķir Jūsu administratoram tiesības, vai kaut kur ir NOPASSWD, un kā Jūs tiksiet iekšā, ja aizmirsīsiet savu paroli?
Uzdevums O3.2: Administrators ar sudo
Šo uzdevumu veicat paši; neviens to nepārbauda. Atzīmējiet, ko esat izdarījuši, un atzīmējiet uzdevumu kā paveiktu.
%sudo ALL=(ALL:ALL) ALL failā /etc/sudoers (RHEL: %wheel). NOPASSWD tikai apzināti un vēlams ierobežot līdz vienai komandai. Ja parole aizmirsta: caur pakalpojumu sniedzēja konsoli, jauna root parole caur paneli vai glābšanas vidi, pēc tam passwd <gebruiker>.
Jūsu atzīmes un piezīmes paliek tikai šajā pārlūkprogrammā; mēs tās nekur nesūtām. Ja esat pieteikušies, sadaļā Mani kursi saglabājam tikai to, ka uzdevums ir paveikts.
Vairāk lasīt
Soļi šajos rakstos attiecas uz WebOké VPS; pie citiem pakalpojumu sniedzējiem tas darbojas līdzīgi.
- Jūsu VPS aizsardzība: pirmās piecas minūtes
- Vairs nav piekļuves Jūsu VPS: ko darīt tagad?
- DirectAdmin rokasgrāmata 12.2: Datubāzes lietotāji, tiesības un paroles
- Ubuntu Server: User management: https://ubuntu.com/server/docs/how-to/security/user-management/
- Debian rokasgrāmata par sudoers: https://manpages.debian.org/trixie/sudo/sudoers.5.en.html
