- Šakninė teisė suteikia visišką kontrolę, tačiau „Ubuntu“ ir kitose platinimo versijose ji pagal numatytuosius nustatymus išjungiama, siekiant sumažinti riziką.
- „Sudo“ leidžia kiekvienu atveju padidinti privilegijas ir registruoja, kas vykdo kiekvieną komandą.
- Grafinėms programoms yra pagalbinės priemonės, tokios kaip „kdesu“, „gksu“, „gksudo“ arba „pkexec“, kurias galima naudoti .desktop paleidimo priemonėse.
- Saugumas priklauso nuo minimalių privilegijų naudojimo, nepatikimų scenarijų vengimo ir padidintos prieigos audito.

„Windows“ sistemoje daugelis žmonių įpratę paspausti „Shift“ + „Enter“ arba „Shift“ + kairįjį pelės klavišą, kad atidarytų programą su padidintomis teisėmis iš meniu „Pradėti“. „Linux“ sistemoje tai ne visada paprasta, nes saugumas priklauso nuo root, sudo ir grafinių pagalbininkų , o kiekviena darbalaukio aplinka turi savo įrankius. Nepaisant to, yra gana paprastų būdų paleisti programas kaip root iš paleidimo priemonės, nuorodos arba programų meniu, nors svarbu suprasti, ką tai reiškia.
Svarbiausia, kad root vartotojas turi absoliučią sistemos kontrolę , o šiuolaikinės distribucijos, ypač Ubuntu ir jos išvestinės versijos, paprastai išjungia tiesioginį prisijungimą. Todėl nėra įprasta prisijungti kaip root, o kartais reikia padidinti teises naudojant „sudo“ arba grafinę programą, kuri prašo slaptažodžio. Jei norime, kad paleidimo piktograma paleistų programą su tomis teisėmis, turėsime modifikuoti vykdomą komandą arba sukurti specialų paleidimo įrankį.
Ką iš tikrųjų reiškia paleisti kažką kaip root?

„Linux“ sistemoje „root“ yra paskyra su UID 0 ir neribotomis privilegijomis . Ji gali skaityti, modifikuoti arba ištrinti bet kurį failą, įdiegti programinę įrangą, keisti branduolio konfigūraciją ir valdyti procesus, priklausančius bet kuriam vartotojui. Dėl to tai neįtikėtinai galingas įrankis, tačiau kartu ir labai rizikingas, jei naudojamas neatsargiai. Paprasta rašybos klaida su „rm“ arba „mv“ gali padaryti sistemą netinkamą naudoti, o kenkėjiškas scenarijus, vykdomas kaip „root“, gali įdiegti slaptus prieigos taškus, modifikuoti saugumo priemones arba pavogti duomenis praktiškai nepalikdamas jokių pėdsakų.
Ubuntu sistemoje root paskyra neturi numatytojo slaptažodžio ir tiesioginis prisijungimas neleidžiamas. Filosofija yra ta, kad dirbate su savo įprasta vartotojo paskyra ir naudojate „sudo“ konkrečioms užduotims atlikti . „sudo“ iš esmės reiškia komandos vykdymą kaip kitas vartotojas, dažniausiai root, prieš tai autentifikavęsis savo slaptažodžiu, jei priklausote „sudo“ grupei. Tai apriboja laiką, kiek laiko esate pasiekiami, ir saugo įrašus apie tai, kas ką atliko.
Tačiau labai specifinėse situacijose, pavyzdžiui, atkuriant pažeistą sistemą, dirbant ribotoje aplinkoje arba konfigūruojant paslaugas, kurioms reikalinga nuolatinė prieiga, galite apsvarstyti galimybę laikinai įjungti root teises. Bendroji rekomendacija – jas vėl išjungti, kai tik prireiks. Kuo mažiau laiko praleisite kaip root, tuo geriau bus kompiuterio stabilumui ir saugumui.
Rizika naudojant root neatsargiai
Vienas akivaizdžiausių pavojų yra atsitiktinis svarbių failų ištrynimas . Root vartotojui nėra jokių leidimų apribojimų; tokia komanda kaip „sudo rm -rf /“ gali be įspėjimo išvalyti sistemą. Paprastai tokiems ištrynimams taip pat nėra šiukšlinės, todėl atkūrimui gali prireikti sudėtingų teismo ekspertizės įrankių arba net visiško sistemos diegimo iš naujo.
Kita rizika – paleisti nepatikimus scenarijus. Jei paleisite kodą, atsisiųstą iš bet kurios svetainės su padidintomis teisėmis, iš esmės suteiksite jam savo namų raktus . Net jei scenarijus atrodo nekenksmingas, jame gali būti žalingų instrukcijų arba jis gali įdiegti kenkėjiškas programas su root teisėmis. Todėl prieš paleidžiant kodą gamybinėje aplinkoje, patartina jį peržiūrėti, naudoti oficialius šaltinius, patikrinti kontrolines sumas ir išbandyti virtualioje mašinoje arba konteineryje.
Taip pat yra atsekamumo problema. Kai naudojate „sudo“, sistema registruoja komandą, ją išdavusį vartotoją ir laiką faile `/var/log/auth.log`, `/var/log/secure` arba `journalctl` . Jei prisijungiate tiesiogiai kaip root, viskas rodoma kaip root ir prarandate galimybę žinoti, kuris asmuo atliko kiekvieną pakeitimą. Aplinkose, kuriose yra keli administratoriai arba kurios atitinka ISO 27001, PCI DSS ar kitus audito standartus, šis atsekamumo trūkumas yra didelis trūkumas.
Būdai gauti privilegijas iš terminalo

Dažniausias ir rekomenduojamas būdas yra prieš konkrečią komandą įrašyti „sudo“. Pavyzdžiui, norint atnaujinti paketus, paleisti paslaugą iš naujo arba redaguoti apsaugotą failą, „sudo“ paprašys jūsų vartotojo slaptažodžio, o ne root slaptažodžio, ir, jus autentifikavus, vykdys komandą su padidintomis teisėmis. Jei reikia paleisti komandą kaip kitas vartotojas, galite naudoti „sudo -u username command“ . O jei supratote, kad pamiršote naudoti „sudo“, galite pakartoti paskutinę komandą naudodami „sudo !! “.
Kai ketinate atlikti kelias administracines užduotis iš eilės, gali būti patogu atidaryti laikiną šakninį apvalkalą. `sudo -i` imituoja pilną prisijungimą prie root vartotojo, įkelia šakninę aplinką ir perkelia jus į pagrindinį katalogą. `sudo su` arba `sudo su -` taip pat veikia, nors `sudo -i` paprastai yra patikimesnė. Norėdami išeiti iš šios sesijos, tiesiog įveskite `exit`. Nerekomenduojama palikti šakninio apvalkalo atidaryto be priežiūros.
Kita vertus, komanda „su“ perjungia vartotojus. „su - root“ arba tiesiog „su -“ taip pat perima tikslinio vartotojo aplinkos kintamuosius, o „su root“ arba „su“ be brūkšnelio išsaugo dalį ankstesnės aplinkos. Šis skirtumas paaiškina tokias klaidas kaip „komanda nerasta“: administratoriaus komandos paprastai yra aplankuose „/usr/local/sbin“, „/usr/sbin“ ir „/sbin“ – keliuose, kurie ne visada rodomi įprasto vartotojo kelyje (PATH). Jei naudojate „su“ be brūkšnelio, turėsite įvesti visą kelią arba perjungti į „su -“, kad paveldėtumėte šakninį kelią (PATH).
Jei norite įjungti slaptažodį root vartotojui, galite tai padaryti naudodami komandą „sudo passwd root“ . Ubuntu to nerekomenduoja, bet techniškai leidžia root vartotojui turėti slaptažodį. Norėdami užrakinti paskyrą, naudokite komandą „sudo passwd -l root“ , o norėdami ją atrakinti – komandą „sudo passwd -u root“. SSH tinkle tiesioginę root prieigą kontroliuoja „PermitRootLogin“, esantį faile `/etc/ssh/sshd_config`. Saugiausia palikti nustatytą reikšmę „no“ arba daugiausia „prohibit-password“, kad būtų leidžiami tik SSH slaptažodžiai. Po to reikia iš naujo paleisti SSH paslaugą.
Tiksliai sukonfigūruokite megztinius
Failas `/etc/sudoers` apibrėžia, kas ir kokiam tikslui gali naudoti `sudo`. Geriausia jo neredaguoti rankiniu būdu; teisingas būdas yra naudoti `sudo visudo` , kuris užrakina failą ir prieš išsaugojant patikrina sintaksę. Pagrindinė taisyklė yra tokia: `host user=(target_user)`. Pavyzdžiui, `bob ALL=(ALL) ALL` leidžia `bob` vykdyti bet kurią komandą kaip root bet kuriame kompiuteryje. Taip pat galima naudoti grupes, pvz., `%admin ALL=(ALL) ALL`.
Norint suteikti tikslesnes teises, naudojami slapyvardžiai. `User_Alias ADMINS = alice, bob` grupuoja vartotojus, o `Cmnd_Alias LOCATE = /usr/sbin/updatedb` grupuoja komandas. Tada naudojamas `ADMINS ALL = LOCATE`, kad tie vartotojai galėtų vykdyti tik tas komandas. Slapyvardžiai, tokie kaip `NETWORKING`, gali būti sukurti tokioms komandoms kaip `route`, `ifconfig`, `ping`, `iptables` ir kt. Tai taiko mažiausių privilegijų principą, nesuteikiant visiškos root prieigos niekam.
Pasirinkus „NOPASSWD“ , tam tikras komandas galima vykdyti be slaptažodžio, pavyzdžiui, „pi ALL=(ALL)“. NOPASSWD: ALL. Tai patogu, bet pavojinga, jei naudojama piktnaudžiaujant. Be to, kiekvienas „sudo“ naudojimas yra registruojamas, o tai padeda audituoti prieigą ir šalinti problemas. Jei kas nors sugenda, peržiūrėjus šiuos žurnalus galima nustatyti, kuris neseniai atliktas pakeitimas sukėlė gedimą.
Grafinių programų paleidimas kaip root iš paleidimo priemonės

Programoms su grafine sąsaja paprastas „sudo“ naudojimas paprastai neveikia gerai, nes nėra terminalo, kuris paragintų įvesti slaptažodį. Čia praverčia grafiniai pagalbininkai . KDE yra „kdesu“ : jei žinote, kuri komanda paleidžia programą, galite paleisti „kdesu that_command“. KDE meniu parinktis „Vykdyti komandą“ taip pat leidžia paleisti programą kaip kitam vartotojui įvedant jo kredencialus. GNOME ir GTK aplinkose buvo plačiai naudojami „gksu“ ir „gksudo“ ; tai yra „sudo“ arba „su“ sąsajos. Pavyzdžiui, „gksu synaptic“ arba „gksudo gparted“ atidaro programą ir prašo slaptažodžio.
Šiuolaikinėse sistemose „gksu“ yra arba nerekomenduojama, arba nebenaudojama. Įprasta jo alternatyva yra „pkexec“ , pagrįsta „PolicyKit“, kuri leidžia programoms veikti su teisėmis pagal apibrėžtas politikas. Daugelis dabartinių paleidimo priemonių naudoja „pkexec“ administravimo užduotims. Idėja ta pati: vartotojui nereikia atidaryti terminalo, o sistema kontroliuojamu būdu patvirtina autorizaciją.
Norėdami sukurti nuorodą paleidimo priemonėje, redaguokite .desktop failą . Raktas yra eilutė `Exec`. Jei norite, kad programa veiktų kaip root vartotojas, galite naudoti kažką panašaus į `Exec=gksu /kelias/iki/programos`, `Exec=kdesu /kelias/iki/programos` arba `Exec=pkexec /kelias/iki/programos`. Jei naudojate tiesiogiai `sudo`, paleidimo priemonėje turi būti `Terminal=true` arba turite sukonfigūruoti grafinį askpass. Taip pat galite pabandyti paspausti Alt+F2 ir įvesti pagalbininką bei programos pavadinimą, pavyzdžiui, `gksu synaptic`. KDE sistemoje `kdesu synaptic` arba parinktis paleisti kaip kitas vartotojas atlieka panašią funkciją.
Yra klasikinė alternatyva, vadinama „consolehelper“ – tai grafinės sąsajos programų apvalkalas. Sukuriate simbolinę nuorodą, pavyzdžiui, /usr/bin/xterm-root, nukreipiančią į /usr/sbin/consolehelper. Tada konfigūruojate PAM sukurdami /etc/pam.d/xterm-root su autentifikavimo, paskyros ir sesijos įtraukimais iš config-util. Toliau apibrėžiate /etc/security/console.apps/xterm-root su USER=root ir PROGRAM=/usr/bin/xterm. Paleidus „xterm-root“, „consolehelper“ prašo PAM autentifikavimo ir paleidžia „xterm“ kaip root. Jei susiduriate su klaida „Xlib ryšys su :0.0 atmestas serverio“, gali padėti „xhost local:root“ paleidimas.
Bet kuriuo atveju, grafinių programų atidarymas kaip root turi trūkumų: jis sumaišo aplinkos kintamuosius, gali sugadinti sesijos magistralę, paveikti „Wayland“ arba „X11“ ir sukurti root priklausančius failus jūsų namų kataloge. Geriausia tai naudoti tik su konkrečiais administravimo įrankiais ir uždaryti juos, kai tik baigsite. Nenaršykite internete ir neatidarykite įtartinų dokumentų kaip root , nes bet koks spragų išnaudojimas paveldės visas teises.
Įprasti užduočių, kurioms reikalinga root prieiga, pavyzdžiai
Daugeliui kasdienių operacijų reikalingos padidintos teisės. Paketų tvarkymas naudojant „apt“, „zypper“, „dnf“ arba „yum“ dažnai reikalauja „sudo“. Pavyzdžiui, „sudo apt update“ , „sudo apt install firefox“ arba „sudo zypper install docker-ce“. Tas pats pasakytina ir apie sistemos paslaugas: „sudo systemctl restart apache2“, „sudo systemctl restart ssh“ arba „sudo systemctl restart nginx“. Norėdami modifikuoti vartotojų paskyras, naudokite „sudo usermod“, o norėdami pakeisti failo nuosavybę – „sudo chown“. Kritinių konfigūracijų, tokių kaip „/etc/ssh/sshd_config“, redagavimui taip pat reikalingos root teisės, jei tai daroma naudojant „nano“, „vim“ arba „gedit“.
Jums nereikia „sudo“ komandoms, kurios tik skaito informaciją arba nemodifikuoja sistemos, pvz., „zypper repos“ arba „systemctl status NetworkManager“. Naudoti „sudo“ viskam iš įpročio yra bloga praktika. Protinga būtų didinti teises tik tada, kai to reikalauja užduotis , o tada kuo greičiau grįžti prie įprasto vartotojo.
Geriausia praktika dirbant su padidintomis teisėmis

Visur turėtų būti vadovaujamasi mažiausių privilegijų principu. Atskiroms komandoms, kai tik įmanoma, naudokite „sudo“, venkite nuolatinių root apvalkalų, nebent tai būtų absoliučiai būtina, ir uždarykite programą, kai tik baigsite. Nevykdykite skriptų iš nežinomų šaltinių kaip root; prieš tai peržiūrėkite kodą, atsisiųskite jį iš oficialių saugyklų arba patikimų projektų, patikrinkite kontrolines sumas ir, jei turite abejonių, išbandykite izoliuotoje aplinkoje. Sveika skepticizmo dozė yra privalumas dirbant su trečiųjų šalių kodu, turinčiu visas teises.
Taip pat patartina kruopščiai konfigūruoti „sudoer“ komandas, nepasikliauti vien „sudo“ grupe, ir audituoti žurnalus. Jei administruojate serverius, patikrinkite `/var/log/auth.log`, `/var/log/secure` arba `journalctl -xe`, kad aptiktumėte netinkamą naudojimą. Daugelio vartotojų aplinkoje žinojimas, kas vykdė kiekvieną komandą, yra labai svarbus atskaitomybei ir saugumo taisyklių laikymuisi.
Įjungti ir išjungti root su galva
Jei nuspręsite įgalinti root prieigą, priskirkite slaptažodį naudodami „sudo passwd root“, naudokite jį tik būtiniausiems uždaviniams atlikti ir vėl užrakinkite paskyrą. Norėdami išjungti tiesioginį SSH prisijungimą, redaguokite „sshd_config` ir nustatykite „PermitRootLogin no“ arba „prohibit-password“, tada paleiskite SSH iš naujo. Norėdami užrakinti paskyrą lokaliai, naudokite „sudo passwd -l root“. Norėdami ją atrakinti, naudokite „sudo passwd -u root“. Šios priemonės sumažina atakų paviršių ir apsaugo nuo „brute-force“ atakų prieš galingiausią paskyrą.
Daugeliu atvejų praktinis atsakymas į pradinį klausimą yra „taip“: programą galite paleisti iš paleidimo priemonės su root teisėmis naudodami grafinį pagalbininką, pvz., „kdesu“, „gksu“, „gksudo“ ar „pkexec“, arba sukurdami .desktop failą su atitinkama komanda. Tačiau tai nėra kažkas, ką turėtumėte palikti nustatyti bet kuriai programai. Geriau turėti specialius administracinius paleidimo įrankius su aiškiais pavadinimais ir naudoti juos tik tada, kai reikia.
Svarbiausia išvada yra ta, kad root nėra žaislas, o sudo egzistuoja būtent tam, kad suteiktų jums galių, nepaverčiant kiekvieno paspaudimo nuolatine rizika. Jei jums reikia paleisti grafinę programą kaip supervartotojui, pirmenybę teikite pagalbinėms programoms, kurioms reikalingas slaptažodis, patikrinkite, ar programai jo tikrai reikia, ir apribokite jo naudojimą administravimo užduotims. Tokiu būdu mėgausitės paleidimo priemonės patogumu neaukodami saugumo, kuris daro „Linux“ tokią stiprią.