Šakninis vartotojas Linux sistemoje: teisės, rizika ir geriausia praktika

  • Šakninis vartotojas (UID 0) turi visišką sistemos valdymą, o šaknines teises galima laikinai deleguoti naudojant sudo arba su.
  • Tokios platinamosios sistemos kaip „Ubuntu“ išjungia tiesioginį prisijungimą prie root paskyros ir administravimui naudoja sudo bei tokias grupes kaip sudo arba wheel.
  • Neatsargus root teisių naudojimas padidina kritinių ištrynimų, saugumo pažeidimų ir atsekamumo sistemos žurnaluose riziką.
  • Tinkamai sukonfigūravus sudoerius, SSH ir administratorių grupes, galima taikyti mažiausių privilegijų principą ir sustiprinti saugumą.

root vartotojas Linux sistemoje

Bet kurioje GNU/Linux sistemoje root vartotojas Tai figūra, kurią visi gerbia (ir jūs turėtumėte jos šiek tiek bijoti). Tai atitikmuo „administratoriaus“ teisių kitose sistemose, tik čia teisės yra tokios plačios, kad blogai įvesta komanda gali sugadinti sistemą per kelias sekundes. Norint visapusiškai suprasti, kas yra root, kokios yra root teisės ir kaip jas valdyti Tai skiria stabilią sistemą nuo tos, kuri sugenda dėl menkiausios provokacijos.

Be to, kiekvienas platinimas turi savitą būdą tvarkyti šias privilegijas. „Ubuntu“, „Debian“, „Void“, „openSUSE“ ir kiti platinimai Jie elgiasi kitaip su root paskyra, su tokiomis grupėmis kaip ratas arba su failu sudoersJei tvarkote serverius (VPS, debesies ar dedikuotus) arba tiesiog norite lengvai valdyti savo „Linux“ sistemą, turėtumėte suprasti, kaip veikia root vartotojas ir komanda „root“. sudo, naudojimas su ir administratoriaus teisių valdymas.

Kas tiksliai yra root vartotojas Linux sistemoje?

„Linux“ ir kitose UNIX tipo sistemose vartotojas root yra paskyra, kurios UID yra 0Specialus identifikatorius, suteikiantis visišką sistemos valdymą. Ši paskyra paprastai taip pat susieta su GID 0 (pagrindinė grupė) root), kuri leidžia be apribojimų skaityti, modifikuoti ar ištrinti bet kurį failą, valdyti procesus, keisti teises ir liesti bet kurią failų sistemos dalį.

Kai kalbame apie „buvimą šaknimi“, turime omenyje prisijunkite arba gaukite apvalkalą kuris veikia su UID 0. Tai ne tik „daugiau leidimų“: tai paskyros, kuri turi, naudojimas absoliuti valdžia sistemaiViskas, ką darote su ta tapatybe, vykdoma be kliūčių.

Tai jau kitas reikalas. turėti root teisesTai reiškia, kad jūsų įprastas vartotojas (pavyzdžiui, turintis UID 1000) gali, naudodamasis tokiais įrankiais kaip sudoTai leidžia vykdyti tam tikras komandas „tarsi būtumėte root“ vartotojas, nekeičiant sesijos tapatybės visam laikui. Praktiškai galite atlikti tas pačias administravimo užduotis, tačiau per labiau kontroliuojamą laiką ir su geresniu atsekamumu.

Skirtumas tarp root ir root teisių turėjimo

Svarbu aiškiai atskirti sąvokas, nes Prisijungimas kaip root nėra tas pats, kas paleisti kažką su root teisėmis.Čia pradeda veikti ir UID 0 paskyros, ir privilegijų eskalavimo mechanizmai (sudo, su, tokios grupės kaip „wheel“ ir kt.).

Kai Jūs esate root vartotojas (UID 0, GID 0) ir jūs atliekate idPamatysite kažką panašaus į tai:

uid=0(root) gid=0(root) groups=0(root)

Tai rodo, kad dabartinė sesija priklauso root vartotojui ir kad viskas, ką vykdysite, turės šias teises. Nieko nereikia rašyti. sudo priešais nieką: bet kokia komanda turi laisvęŠtai kodėl taip pavojinga per ilgai būti šaknų kiaute.

Tačiau, kai naudojate : sudoPaprastai vis tiek būsite „įprastas“ vartotojas (pavyzdžiui, UID 1000), bet komanda laikinai bus vykdoma kaip UID 0. Jei tai padarysite:

sudo apt update

Jūsų sesija išlieka jūsų vartotojo, bet tik ta konkreti komanda Jis veikia su administratoriaus teisėmis. Tas pats galioja ir paleidus:

sudo systemctl restart apache2

Abiem atvejais autentifikavimo žurnaluose rodoma tapatybė nurodo, kuris vartotojas naudojosi sudo, kuris prisideda atsekamumas ir individuali atsakomybė.

„Wheel“, „Sudoers“ ir vadovų grupių atvejis

Kai kuriuose platinimuose (pvz., „Void Linux“ arba daugelyje BSD išvestinių versijų) yra grupė ratas, kuris naudojamas kontroliuoti, kas gali naudoti sudoKituose (pvz., tipinėje „Ubuntu“ ir „Debian“ konfigūracijoje) naudojama grupė : sudo suteikti tą galimybę. Kiekvienas distribucija tai organizuoja savaip, tačiau idėja ta pati: privilegijas gali suteikti tik tam tikroms grupėms priklausantys vartotojai.

Jei „Void Linux“ nurodo pridėti savo vartotoją prie ratasĮprasta būtų paleisti kažką panašaus:

sudo usermod -aG wheel tu_usuario

Tada, kai daro idRatų grupę turėtumėte matyti tarp pogrupių. Jei jos nėra, gali būti, kad Pakeitimas nebus pritaikytas, kol neatsijungsitearba kad sistema prieigą valdo šiek tiek kitaip (pavyzdžiui, remdamasi PAM arba konkrečia konfigūracija) sudo o su (ne visais atvejais reikia įtraukti ratą).

Tokiose sistemose kaip „Ubuntu“ ar „Debian“ raktų grupė paprastai yra : sudoNorėdami pridėti vartotoją:

sudo adduser nombre_de_usuario sudo

Geriausias valdymo lygis pasiekiamas redaguojant failą / etc / sudoers (arba failai, esantys /etc/sudoers.d/) visada naudojant visudo, kad galėtumėte apibrėžkite, kokias tikslias komandas gali vykdyti kiekvienas vartotojas arba grupė. su root teisėmis, užuot suteikus visišką laisvę.

Šakninimas Ubuntu sistemoje: saugumo politika ir sudo naudojimas

Ubuntu vadovaujasi gana aiškia filosofija: Šakninė paskyra yra, bet ji nenaudojama tiesiogiai prisijungiant.Įdiegus sistemą, root vartotojas turi UID 0, kaip ir bet kurioje UNIX sistemoje, tačiau jam nepriskiriamas tinkamas naudoti slaptažodis prisijungimui. Vietoj to, intensyvus naudojimas sudo.

Tai reiškia, kad pagal numatytuosius nustatymus Negalite prisijungti prie TTY arba grafinės sąsajos kaip root vartotojas su slaptažodžiunes tam vartotojui nėra sukonfigūruotas slaptažodis. Šis sprendimas sumažina atakų paviršių prieš „brute-force“ bandymus ir neleidžia žmonėms be reikalo visą dieną dirbti kaip root.

„Įprastas“ Ubuntu procesas yra toks: prisijungiate naudodami savo vartotojo vardą, tas vartotojas priklauso grupei : sudoO kai reikia atlikti administravimo veiksmus, paleidžiate komandą su sudo o tu rašai savo slaptažodįne root paskyra. Tokiu būdu sistema fiksuoja, kas ką, kada ir su kokia komanda atliko.

Jei bet kuriuo metu norite pilno apvalkalo kaip root (pavyzdžiui, norėdami atlikti keletą užduočių iš eilės), galite naudoti:

sudo -i
sudo su -

Abu duos tau po vieną interaktyvus šakninis apvalkalasPaprastai tai įkelia vartotojo prisijungimo aplinką. Norėdami išeiti iš šio režimo, tiesiog paleiskite exit arba paspauskite Ctrl + D.

Ar root vartotojas visada pasiekiamas?

Paskirstymas nesvarbus: Šakninė paskyra visada egzistuoja viduje nes tai yra ta, kurios UID yra 0. Priklausomai nuo distribucijos, skiriasi tai, ar ta paskyra turi galiojantį slaptažodį, ar leidžiamas tiesioginis prisijungimas ir kokiomis sąlygomis ją galima naudoti.

„openSUSE“ atveju (pavyzdžiui, „Tumbleweed“) diegimo metu techniškai galite palikti root slaptažodį tuščią arba sukonfigūruoti sistemą taip, kad įprastas vartotojas turėtų administratoriaus teises, naudodamas sudoTai gali sukelti Nesu tikras, ar root teisė yra „aktyvi“ Arba ne. Bet pati root paskyra visada yra; tiesiog taip yra... negalite su juo autentifikuotis nes nebuvo nustatytas slaptažodis arba sistema jį blokuoja naudodama PAM arba prisijungimo strategijas.

Kai naudosite su Norėdami perjungti į root paskyrą ir įvesti savo vartotojo slaptažodį vietoj root slaptažodžio, paprastai turėsite neveikianebent distribucija būtų sukonfigūruota su priimti „sudoer“ vartotojo slaptažodį vietoj „root“ (rečiau). Dažniausiai su Jis paprašys tikslinio vartotojo slaptažodžio, t. y. root slaptažodžio, jei atliksite paprastą veiksmą. su.

Be to, jei pastebėsite, kad darydami su Norint tapti root vartotoju, jūsų apvalkalas toliau skaito funkcijas arba slapyvardžius iš jūsų įprasto vartotojo; galite naudoti variantą, pvz. su be brūkšnelio (su prieš su -), todėl Šakninio prisijungimo aplinka ne iki galo įkeliamaŠtai kodėl galite ir toliau naudoti savo .bashrc arba jūsų „zsh“ konfigūraciją, todėl kyla klaidų funkcijose, kurių nėra root paskyroje.

Nuotolinė prieiga kaip root per SSH

Daugelyje serverių, kai samdote VPS arba dedikuotą serverį, paslaugų teikėjas jums suteikia SSH prieiga tiesiogiai kaip rootsu slaptažodžiu arba, dar geriau, su SSH raktu. Iš „Linux“ sistemos prisijungimas yra toks paprastas:

ssh root@IP-del-servidor

„Windows“ sistemoje įprasta naudoti klientą, pvz. PuTTYJums tereikia įvesti serverio IP adresą į atitinkamą lauką. Pagrindinio kompiuterio vardas, spustelėkite Atviras ir, kai pasirodo terminalo langas, Prisijunkite kaip root su pateiktu slaptažodžiu arba su sukonfigūruotu raktu.

Taip pat galite prisijungti prie bet kurio kito serverio naudotojo, o patekę į jį, perkelkite į root teises naudodami sudo arba su jei tas vartotojas priklauso atitinkamoms grupėms arba turi atitinkamą konfigūraciją /etc/sudoersTokiu atveju dirbate su ribotomis teisėmis, kol jums nereikia atlikti konkrečios administracinės užduoties.

Neatsargaus root naudojimo rizika

Šakninės teisės yra neįtikėtinai naudingos, bet kartu ir dviašmenis kardas. Bet kokia spausdinimo klaida ar neteisingai suprasta komanda Dėl to gali būti prarasti visi duomenys, sistema gali tapti nestabili arba atsirasti saugumo spragų, dėl kurių jūsų kompiuteris gali tapti pažeidžiamas.

Vienas aiškiausių pavojų yra netyčia ištrinant arba modifikuojant sistemos failusJei esate root vartotojas, nėra „Ar tikrai?“ ar šiukšlinės. Tokia komanda:

sudo rm -rf /

arba neteisingai parašytas variantas (su neteisingu keliu, papildomu tarpu, netinkamoje vietoje esančiu pakaitos simboliu...) gali Ištrinkite pusę failų sistemos neprašydami patvirtinimoO pasveikimas, jei jis apskritai įmanomas, dažniausiai būna sudėtingas ir labai dalinis.

Taip pat yra vykdymo klausimas iš interneto su root teisėmis atsisiųsti scenarijaiJei scenarijus yra kenkėjiškas arba prastai užprogramuotas, jis gali ištrinti svarbius failus, pakeisti svarbius nustatymus, įdiegti kenkėjiškas programas, išjungti apsaugą arba pridėti galines duris be jūsų žinios. O jei jį paleidote su... sudoJūs jam suteikėte neribotas teises.

Aplinkose su keliais serveriais (gamybos, testavimo, kūrimo) dirbant root teisėmis keliuose terminaluose vienu metu padidėja rizika, kad... vykdyti komandą netinkamame kompiuteryjePaprastas per klaidą atliktas paleidimas iš naujo arba ištrynimas gamybinėje aplinkoje gali atjungti paslaugą ir sukelti rimtų problemų.

Dar blogiau, kai pripranti visada dirbti kaip root vartotojas, lengva per daug atsipalaiduoti ir netikrintumėte du kartus to, ką parašėteSvarbu sumažinti laiką, praleistą su padidintomis teisėmis, ir atidžiai peržiūrėti komandas prieš paspaudžiant Enter, kad išvengtumėte klaidų.

Šakninė prieiga ir saugumas: atakos, žurnalai ir auditas

Saugumo požiūriu, root yra vieno gedimo taškoJei užpuolikas gauna root teises (pavogdamas prisijungimo duomenis, išnaudodamas pažeidžiamumą arba apgaudamas jus, kad paleistumėte kenkėjišką programą), jis įgyja visišką kompiuterio kontrolę.

Serveriuose, prijungtuose prie interneto, tiesioginės root prieigos per SSH įgalinimas naudojant tik slaptažodį atveria duris nuolatinės žiaurios jėgos atakosAutomatiniai robotai bando prisijungti kaip root Nuolat tikrinami slaptažodžių deriniai. Jei slaptažodis silpnas arba pakartotinai naudojamas kitose paslaugose, jums nebereikia.

Be to, jei visada dirbate kaip root, bet kuri pažeidžiama programa, veikianti su ta tapatybe (naršyklė, netinkamai sukonfigūruotas žiniatinklio serveris ir pan.), gali būti įėjimo taškas. Kai tik ta programa pažeidžiama, užpuolikas paveldi visas teises.

Kita svarbi problema yra atsekamumo stokaNaudojant sudo, registruojami administratoriaus veiksmai /var/log/auth.log arba žurnale (arba žurnale)journalctl): kuris vartotojas paleido kurią komandą ir kada. Kita vertus, jei visi prisijungia tiesiogiai kaip root, žurnaluose nurodoma tik „root tai padarė“, negalima nustatyti, kas iš tikrųjų tai padarė.

Aplinkose, kuriose reikalingi saugumo standartai (ISO 27001, PCI DSS ir panašūs), atsekamumas ir individuali atsakomybė yra labai svarbūs. Visada dirbant su root teisėmis nenaudojant sudo, auditai tampa sudėtingesni.Tai apsunkina problemų sprendimą ir dažnai prieštarauja geriausiai praktikai, kurios reikalauja daugelis atitikties sistemų. Be to, saugios įrangos, tokios kaip dev-tpm0 ir TPM Tai gali sustiprinti sistemos vientisumą ir audituojamumą.

Būdai gauti root teises

Praktiškai dauguma šiuolaikinių platinimų naudoja tris pagrindinius mechanizmus administratoriaus teisėms pasiekti: : sudo, su ir tiesioginis prisijungimas (vietinis arba nuotolinis). Kiekvienas turi savo kontekstą ir riziką.

Norint vykdyti vieną komandą su root teisėmis, dažniausiai naudojamas šis būdas:

sudo comando argumentos

Pavyzdžiui:

sudo apt update
sudo apt install firefox
sudo systemctl restart apache2
sudo nano /etc/ssh/sshd_config

Su šiuo, Jūs nekeičiate vartotojų visam laikuiTik ta komanda veikia su UID 0 ir įrašo, kas ją paleido. Daugumai kasdienių administravimo užduočių tai yra saugiausias pasirinkimas.

Jei jums reikia patvaresnės root sesijos, nes ketinate vykdyti kelias komandas iš eilės, galite naudoti:

sudo -i
sudo su -

Šios komandos suteikia jums root apvalkalą, paprastai įkraunantį root prisijungimo aplinką (kintamuosius, PATH ir kt.). Tai labai patogu atliekant tam tikras ilgas užduotis, bet Geriausia atsisakyti šio režimo, kai tik jį baigsite. su exitKuo mažiau laiko praleidžiate kaip root vartotojas, tuo mažesnė tikimybė padaryti klaidą.

Įgalinti ir valdyti root slaptažodį

Nors tai nerekomenduojama, Ubuntu ir kituose distribucijų sektoriuose galite priskirti slaptažodį root paskyrai kad būtų galima jį naudoti tiesiogiai. Įprasta komanda yra:

sudo passwd root

Pirmiausia sistema paprašys jūsų vartotojo slaptažodžio (kad patvirtintų naudojimą) sudo) ir tada jis du kartus paklaus jūsų naujo slaptažodžio, kurį norite priskirti root vartotojui. Nuo to momento, root turės apibrėžtą slaptažodį Ir jei autentifikavimo politika leidžia, galite prisijungti lokaliai arba naudoti su įvesdami tą raktą. Pavyzdžiui, tokiuose įrenginiuose kaip „Raspberry Pi“ patartina pakeisti numatytąjį slaptažodį.

Jei kada norite blokuoti root prisijungimą Neištrindami paskyros, galite:

sudo passwd -l root

Tai išjungia slaptažodį (jo visiškai nepašalinant) ir neleidžia tiesiogiai pasiekti. Norėdami atšaukti šią funkciją:

sudo passwd -u root

Bet kokiu atveju, ypač naudojant Ubuntu, bendra rekomendacija yra tokia Nenaudokite root su slaptažodžiu kasdieniam naudojimuiDaug protingiau toliau dirbti su įprasta vartotojo paskyra ir prireikus naudoti sudo.

SSH konfigūracija, skirta leisti arba uždrausti root'ą

Dėl saugumo priežasčių daugelyje serverių diegimų yra root prisijungimas per SSH išjungtasNorėdami pakeisti šį elgesį (nors tai nėra idealu), turite redaguoti „OpenSSH“ konfigūracijos failą: /etc/ssh/sshd_config.

Įprasta procedūra yra tokia:

  1. Įsitikinkite, kad root turi slaptažodį Jei planuojate naudoti šį autentifikavimo metodą: sudo passwd root.
  2. Redaguoti SSH nustatymus su root teisėmis:
    sudo nano /etc/ssh/sshd_config
  3. Raskite (arba pridėkite) direktyvą PermitRootLogin ir įstatykite jį yes jei norite suteikti tiesioginę root prieigą su slaptažodžiu.
  4. Paleiskite SSH paslaugą iš naujo kad pritaikytumėte pakeitimus:
    sudo systemctl restart ssh (o sshd (priklausomai nuo paskirstymo).

Protingiausia, ką galite padaryti, jei jums reikia šiek tiek lankstumo neatidarydami durų per plačiai, yra naudoti „PermitRootLogin“ draudžiamasis slaptažodis kad tik tie, kurie priima rakto autentifikavimas ir ne slaptažodžiu. Net ir tokiu atveju pageidaujamas variantas paprastai yra prisijungti kaip įprastam vartotojui ir tada naudoti sudo.

Jei norite sustiprinti saugumą, tiesiog atlikite šiuos veiksmus atvirkštine tvarka: sshd_config tu įdėjai PermitRootLogin no, paleiskite paslaugą iš naujo ir, jei norite, užblokuokite root paskyrą naudodami sudo passwd -l rootTai verčia juos Visas nuotolinis administravimas turi būti atliekamas per konkrečius vartotojus, turinčius sudo teises.Kaip papildomą priemonę apsvarstykite galimybę naudoti dm-verity Linux sistemoje siekiant apsaugoti sistemos vientisumą.

Redaguoti sudoers ir suteikti root teises kitiems vartotojams

Pasitaiko atvejų, kai norint gauti naujai sukurtą vartotoją reikia paleisti komandas kaip rootPavyzdžiui, įsivaizduokite, kad sukūrėte vartotoją testftp su useradd o adduserBet kai bandai naudoti sudo Pamatysite tokį pranešimą: testftp is not in the sudoers file.

Daugelyje „Debian“ / „Ubuntu“ pagrindu sukurtų distribucijų „greitas“ būdas yra pridėti vartotoją prie grupės : sudo:

sudo adduser testftp sudo

Kitose aplinkose arba jei norite tikslesnio valdymo, galite redaguoti failą. /etc/sudoers (arba pridėkite konkretų failą /etc/sudoers.d/) visada naudojant:

sudo visudo

Viduje galite pridėti eilutę, kopijuojančią šakninį šabloną, bet tam vartotojui:

testftp ALL=(ALL:ALL) ALL

Su šiuo, „testftp“ galės vykdyti bet kurią komandą kaip root. Naudojant sudo, kaip ir root (bet su atsekamumu). Jei reikia griežtesnių apribojimų, galite apriboti leidžiamas komandas, reikalauti TTY, priverstinai įvesti slaptažodį ir pan.

Jautresniuose serveriuose įprasta nesuteikti „visų galių“ jokiam „sudo“ grupės vartotojui, o apibrėžti jas sudoers tiksliai ką galima ir ko negalima padarytiPavyzdžiui, leidžiant valdyti tik konkrečią paslaugą arba tam tikrus administravimo scenarijus.

Redagavus ir išsaugojus naudojant visudoPaveiktas vartotojas nebeturėtų matyti klaidos „not in the sudoers file“ ir galės kontroliuojamai didinti teises.

Geriausia praktika naudojant root ir sudo

Dirbant su root teisėmis, reikia ne tik žinoti, kurias komandas naudoti, bet ir laikytis protingų saugos įpročiųKeletas pagrindinių rekomendacijų, kurias verta įsisavinti:

Pirmiausia pabandykite Naudokite sudo tik konkrečioms komandoms Kai tik įmanoma. Kuo mažiau laiko praleidžiate root shell'e, tuo mažesnė tikimybė padaryti rimtą klaidą. Trumpa komandų seka su `sudo` paprastai yra saugesnė nei atidaryti root sesiją ir pamiršti atsijungti.

Jei reikia naudoti sudo -i o sudo su -Darykite tai, kai būsite tikri, kad vykdysite administracinių užduočių grupę vieną po kitos. Kai tik baigsite, išeikite iš root. su exitPalikus atidarytą root sesiją fone, ypač bendrai naudojamame kompiuteryje arba prieinamame darbalaukyje, rizika labai padidėja.

Niekada neatidarykite naršyklės, el. pašto programos ar įtartinų dokumentų iš root sesijos. Bet kokie šių programų pažeidžiamumo išnaudojimai gali būti pavojingi. Jis paveldės juos vykdančios paskyros teises.Kai bendraujate su nepatikimu turiniu, darykite tai kaip įprastas vartotojas.

Kitas svarbus dalykas yra Nevykdykite nežinomų scenarijų su sudo jų pirmiausia neperskaitę. Jei kas nors jums liepia „įklijuoti šį curl | sh su sudo“ ir jūs tai padarysite nežiūrėdami, jūs duodate jiems savo sistemos raktus. Atidarykite skriptą teksto redaktoriuje, patikrinkite, ką jis daro, iš kur jis atsirado, ir jei jo nesuprantate arba juo nepasitikite, nepaleiskite.

Kai tik įmanoma, atsisiųskite programinę įrangą ir scenarijus iš oficialūs arba labai patikimi šaltiniaiPatikrinkite kontrolines sumas, jei įmanoma, ir, jei abejojate, pirmiausia išbandykite virtualioje mašinoje arba konteineryje, kurį galite atmesti, jei kas nors nutiks ne taip.

Galiausiai pasinaudokite archyvo privalumais /etc/sudoers taikyti mažiausios privilegijos principasTai suteikia kiekvienam vartotojui tik jam reikalingas teises, ne daugiau, ir registruoja visus veiksmus naudodama sudo, kad galėtumėte peržiūrėti kiekvieno asmens atliktus veiksmus kilus problemai.

Suprasti, kas yra root vartotojas, kuo root teisės skiriasi nuo UID 0 paskyros teisių ir naudoti tokius įrankius kaip sudo, su, administratoriaus grupių ir SSH konfigūracijaBet kurią „Linux“ sistemą galima valdyti daug saugiau ir ramiau, išvengiant nereikalingų išgąsčių ir visada žinant, kas ką ir su kokiais leidimais atliko.

Kaip naudoti „dm-verity“ sistemoje „Linux“
Susijęs straipsnis:
Kaip naudoti „dm-verity“ sistemoje „Linux“: išsamus ir praktinis vadovas