
Jei kasdien dirbate su „Linux“Anksčiau ar vėliau susidursite su komanda sudoTai raktas, leidžiantis atlikti administravimo užduotis neprisijungiant kaip vartotojui. root Nuolat, o tai ne tik nepatogu, bet ir gana pavojinga. Suprasti, kaip tai veikia, kokias parinktis turi ir kaip tai konfigūruoti, yra labai svarbu, jei nenorite netyčia sugadinti sistemos ar palikti saugumo spragos to nesuvokdami.
Šiame straipsnyje mes išsamiai aptarsime. apie ką tiksliai kalbama? sudoKoks jo ryšys su vartotoju? root ir su byla /etc/sudoersKuo skiriasi naudojimas su y sudoir kaip galite tiksliai suderinti nustatymus, kad suteiktumėte labai konkrečius leidimus (net nereikalaujant slaptažodžio) tam tikriems vartotojams ar grupėms. Idėja ta, kad perskaitę šį tekstą, aiškiai suprasite, kada naudoti sudoKą jis veikia po apačia ir kaip jį valdyti be baimės.
Kas yra sudo ir kodėl jis toks svarbus Linux sistemoje?
Įsakymas sudo Tai viena iš pagrindinių dalių bet kurios šiuolaikinės „Linux“ sistemos. Jos pavadinimas paprastai aiškinamas kaip „superuser do“ arba „substitute user and do“, o jos funkcija paprasta, bet galinga: ji leidžia įgaliotam vartotojui vykdyti komandas taip, lyg jis būtų kitas sistemos vartotojas, paprastai rootribotą laiką.
Praktiškai tai reiškia kad paprastas vartotojas galėtų atlikti administravimo užduotis – diegti paketus, keisti sistemos nustatymus, valdyti paslaugas, keisti jautrių failų teises – be prisijunkite tiesiogiai kaip rootŠis atskyrimas tarp įprasto vartotojo ir supervartotojo yra vienas iš „Linux“ saugumo ramsčių.
Naujausi paskirstymai (Debian, Ubuntu, daugelis išvestinių programų, SLE tipo sistemos ir kt.) atneša sudo Jis yra iš anksto įdiegtas, todėl nerekomenduojama jo pašalinti ar lengvai keisti. Be to, daugelyje sistemų diegimo metu sukurtas vartotojas automatiškai pridedamas prie administratorių grupės, turinčios teisę jį naudoti. sudo, tapdamas numatytuoju privilegijuotu vartotoju.
Labai svarbu nepamiršti kažko yra tai, kad sudo Tai „nepaverčia“ vartotojo į root Tai nesuteikia visiškos prieigos prie sistemos, o leidžia vartotojams vykdyti konkrečias komandas kaip kitam vartotojui, laikantis konfigūracijoje apibrėžtų taisyklių. Tokiu būdu galima suteikti labai specifinius leidimus nesuteikiant visiškos prieigos prie sistemos.
Kaip sudo veikia viduje
Pagrindinė operacija sudo Vartotojo požiūriu, tai labai paprasta: jūs įdedate žodį sudo prieš komandą, kurią norime vykdyti su privilegijomis. Pavyzdžiui, norėdami atnaujinti paketų sąrašą su apt-get Debian'e arba Ubuntu'e paprastas vartotojas turės atlikti tokius veiksmus:
> sudo apt-get update
Jei bandote paleisti administratoriaus komandą be sudoDažniausiai gausite tokias klaidas kaip „Leidimas atmestas“ arba pranešimus, rodančius, kad tam tikro užrakinto failo negalima atidaryti /var/lib arba kitame sistemos kataloge. Kai tik pakartosite tą pačią komandą ir pridėsite sudo Toliau sistema paprašys jūsų slaptažodžio ir, jei viskas sukonfigūruota teisingai, komanda bus vykdoma su supervartotojo teisėmis.
Kai vykdote komandą su sudoPrograma pirmiausia patikrina, ar jūsų vartotojas turi teisę ją naudoti ir kokioms konkrečioms komandoms, peržiūrėdama konfigūracijos failą. /etc/sudoers ir daugelyje sistemų papildomi katalogo failai /etc/sudoers.d/Jei taisyklės leidžia, sudo Jis prašo slaptažodžio (dažniausiai jūsų, o ne jų). root) ir laikinai suteikia jums teises vykdyti komandą kaip tiksliniam vartotojui.
Keista detalė, kuri iš pradžių dažnai jus glumina Kai terminale jūsų prašoma įvesti slaptažodį, įvedant jį, nerodomi jokie simboliai, net žvaigždutės. Tai visiškai normalu: įvestis yra „akla“ ir yra saugumo priemonių, skirtų apsaugoti slaptažodžio ilgį nuo matomumo, dalis.
Be to, „Sudo“ palaiko savotišką „pasitikėjimo sesiją“.Sėkmingai įvedus slaptažodį, padidintos teisės tame pačiame terminale tam tikrą laiką (pagal numatytuosius nustatymus, apie 15 minučių daugelyje distribucijų) lieka aktyvios. Šiuo laikotarpiu galite vykdyti daugiau komandų su sudo neklausiant slaptažodžio vėl ir vėl.
Pagrindinė sintaksė ir naudingiausios sudo parinktys
Bendroji sintaksė sudo Tai labai paprasta:
> sudo komanda
Dažniausias būdas jį naudoti yra tiesiog kaip sudo comandoVis dėlto, jame yra nemažai įdomių variantų. Kai kurie iš dažniausiai naudojamų (ir daugelyje oficialių vadovų pabrėžiamų) yra šie:
- -h: rodo pagalbos pranešimą su programos sintaksė ir visomis galimomis parinktimis
sudo. - -V: rodo dabartinę versiją
sudoir kai kurios kompiliavimo detalės. - -v: Atnaujina autentifikavimo „lengvaties laiką“, t. y. atnaujina skaitiklį, kad jūsų privilegijos nepasibaigtų ir jums nereikėtų netrukus iš naujo įvesti slaptažodžio.
- -k: iš karto anuliuoja saugomus prisijungimo duomenis; tai tarsi pasakymas
sudokuris „pamiršta“, kad jau atlikote autentifikaciją, todėl kitą kartą turėsite dar kartą prašyti slaptažodžio. - -l: rodo, kurias komandas turite leidimą vykdyti
sudopagal dabartinę konfigūracijąsudoers.
Taip pat yra labai naudingų parinkčių komandoms vykdyti kaip ir kitiems vartotojams. skiriasi nuo root. Pavyzdžiui, su -u Galite nurodyti tikslinį vartotoją konkrečiai komandai:
> sudo -u pedro whoami
Tokiu atveju, net jei jūsų sesija priklauso kitam vartotojui, komanda whoami Grąžins „pedro“, nes buvo įvykdyta taip, lyg būtumėte tas vartotojas. Tai labai patogu norint patikrinti teises arba atlikti su paslaugų paskyromis susijusias užduotis, nereikia rankiniu būdu perjungti sesijų.
sudo ir su bei root vartotojas
„Linux“ sistemoje egzistuoja keli mechanizmai. Norėdami gauti administratoriaus teises: užsiregistruokite tiesiogiai kaip root, naudokite komandą su ir naudoti sudoKiekvienas iš jų turi savo privalumų ir trūkumų, ir jų supratimas padės išvengti daugybės problemų.
Prisijunkite tiesiogiai kaip root (pavyzdžiui, su ssh root@servidorTai suteikia jums visišką prieigą prie sistemos nuo pat pradžių. Tai labai patogu, bet kartu ir itin pavojinga: bet kokia neteisingai įvesta komanda gali ištrinti pusę sistemos, pakeisti svarbius leidimus arba padaryti kompiuterį netinkamą naudoti. Todėl daugeliu atvejų nerekomenduojama dirbti su prisijungimo sesijomis. root atidaryta visam laikui.
Įsakymas su (pakaitinis vartotojas) Tai leidžia jums persijungti prie kito vartotojo tame pačiame terminale. Pradinė sesija lieka fone ir „įkapsuliuoja“ naująją. Jei paleidžiate su pedroJūsų bus paprašyta slaptažodžio. pedro ir, patekus į vidų, jei įvesite exit Grąžinsite ankstesnio vartotojo vardą. Jei nenurodysite vartotojo vardo, su Pagal numatytuosius nustatymus bandoma persijungti į root.
Yra svarbus niuansas su su: jei nepanaudosite prisijungimo parinkties (su -, su -l o su --login), pakeičia vartotoją, bet ne aplinką. Tai reiškia, kad liksite ankstesnio vartotojo darbo kataloge ir su kintamaisiais, o tai gali sukelti leidimų klaidų (pavyzdžiui, bandant išvardyti home (pradinio vartotojo su naujo vartotojo kredencialais).
Vietoj to sudo Tai siūlo saugesnį ir labiau kontroliuojamą požiūrįJums nereikia žinoti slaptažodžio, kad rootbet jūsų pačių slaptažodis, ir sistema nusprendžia /etc/sudoerskurie naudotojai gali vykdyti kokias komandas, pavyzdžiui, kurie naudotojai ir iš kurių įrenginių. Be to, kiekvienas sudo Tai įrašoma žurnaluose, todėl lengviau patikrinti, kas buvo padaryta turint padidintas teises.
Interaktyviems seansams „kaip kitas vartotojas“ su sudoYra keletas labai praktiškų variantų:
- Sudo -s: atidaro apvalkalą kaip tikslinis vartotojas, paveldintis dabartinio vartotojo aplinką.
- sudo-i: paleidžia pilną prisijungimo apvalkalą tiksliniam vartotojui, išvalydamas jo aplinką ir katalogą.
$HOME, įkeliami failai, pvz..profileo.bash_profile.
Abu variantai tinka vienkartiniam darbui. kaip kitas vartotojas (dažniausiai root arba bet kurią paslaugos paskyrą) neprisimenant ir nenaudojant slaptažodžio, išlaikant atliktų veiksmų kontrolę ir įrašą.
Failas /etc/sudoers ir katalogas /etc/sudoers.d
Sudo konfigūracijos esmė tai yra archyve /etc/sudoersTen ir apibrėžiama, kas gali tuo naudotis. sudoiš kur, pvz., kuris vartotojas ir kurias konkrečias komandas galima vykdyti. Be to, daugelyje distribucijų yra direktyva, kuri automatiškai įkelia visus papildomus konfigūracijos failus, esančius /etc/sudoers.d/.
Labai svarbu tai suprasti /etc/sudoers Nereikėtų redaguoti „netinkamai redaguojant“. su bet kuriuo teksto redaktoriumi. Jis visada turi būti modifikuotas naudojant komandą visudo, kuris atidaro failą redaktoriumi (pagal numatytuosius nustatymus vi o nano(priklausomai nuo konfigūracijos), tačiau prideda saugumo sluoksnį: prieš išsaugojant patikrina sintaksę ir neleidžia dviem žmonėms jos redaguoti vienu metu.
Tipinis sudoers redagavimo naudojimas yra:
> sudo visudo -f /etc/sudoers
Taip pat galite sukurti konkrečius failus /etc/sudoers.d/ atskirti konfigūracijas pagal vartotojų grupes, paslaugas ir pan. Pavyzdžiui, galite turėti failą /etc/sudoers.d/networking su konkrečiomis tinklo administravimo taisyklėmis, nemaišant jų su likusia bendrąja konfigūracija.
Atidarant /etc/sudoers tipinėje sistemojePamatysite tokias eilutes (neskaičiuojant komentarų):
- šaknis VISKAS=(VISKAS:VISKAS) VISKAS: vartotojas
rootBet kurią komandą galite vykdyti bet kuriame pagrindiniame kompiuteryje, kaip ir bet kuris vartotojas bei bet kuri grupė. - %admin VISI=(VISI) VISI: bet kas grupėje
adminturi visas teises naudotisudo. - %sudo ALL=(ALL:ALL) ALLTas pats pasakytina ir apie grupę
sudo, kuri „Ubuntu“ ir išvestinėse programose paprastai yra pagrindinė grupė. - #include /etc/sudoers.d: nurodo, kad tame kataloge esantys failai taip pat turėtų būti nuskaityti (net jei a
#(Tai nėra komentaras šiame konkrečiame kontekste).
Be naudotojų ir grupių taisyklių, sudoers Tai leidžia apibrėžti slapyvardžius, kad būtų supaprastintos sudėtingos konfigūracijos: vartotojo slapyvardžiai (User_Alias), komandų (Cmnd_Alias), vykdymo grupių (Runas_Alias) arba šeimininkų (Host_Alias).
Tvarkykite vartotojus ir grupes naudodami „sudoers“
Įprasta praktika serveriuose kontroliuoja prieigą prie sudo per grupes. Pavyzdžiui, daugelyje sistemų pakanka pridėti vartotoją prie grupės sudo o wheel kad galėtumėte gauti visus administracinius leidimus.
Norėdami patikrinti, kurie vartotojai priklauso grupei nustatyta (pvz., sudo), galite naudoti:
> grep „sudo“ /etc/group
Jei norite suteikti vartotojui sudo teisesĮprasta praktika yra pridėti jį prie atitinkamos grupės. Pavyzdžiui, norint įtraukti bill Į grupę sudo:
> sudo adduser sąskaita sudo
Kai reikia atšaukti tas privilegijasTiesiog pašalinkite jį iš grupės:
> sudo deluser bill sudo
Kita, daug geresnė galimybė Tai reiškia, kad leidimai suteikiami tik tam tikroms komandoms, nesuteikiant visiškos laisvės. Tam paprastai sukuriami konkretūs failai /etc/sudoers.d/Pavyzdžiui, galite apibrėžti failą /etc/sudoers.d/networking su kažkuo panašiu į:
Cmnd_Alias CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias SERVERIAI = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias NETALL = UŽFIKSUOTI, SERVERIAI
%netadmin VISKAS = NETVISKAS
Naudojant šią konfigūraciją, bet kuris grupės vartotojas netadmin galėsite vykdyti komandas, apibrėžtas slapyvardžiu NETALL (kuris grupuoja slapyvardžius) CAPTURE y SERVERSneturėdamas visiškos prieigos prie visko sudoViskas, ko reikia, tai pridėti bill Į grupę netadmin kad galėtumėte naudoti tcpdump ir apibrėžtus serverio įrankius.
Dažniausios komandos, kurioms reikalinga „sudo“
Kasdieniniame sistemų administravimeYra keletas užduočių tipų, kurios beveik visada eina koja kojon su sudones jie susiję su sistemos modifikavimu arba privilegijuotos informacijos gavimu.
Paketo valdymas: skirstinių, pagrįstų zypper, apt arba kituose paketų tvarkytuvuose bet kokiai operacijai, kuri įdiegia, pašalina arba atnaujina programinę įrangą, reikalingos teisės. Pavyzdžiui:
> sudo zypper diegimo paketas
> sudo apt-get install docker-ce
Tačiau užklausos, kurios tik skaito informaciją, pvz., saugyklų sąrašo sudarymas, paprastai gali būti vykdomas be sudoReikia išbandyti ir pamatyti, kada pati sistema grąžina leidimų klaidą.
Paslaugų valdymas naudojant „systemd“ Paprastai tai daroma per systemctlTokiems veiksmams kaip paslaugų paleidimas, sustabdymas arba paleidimas iš naujo paprastai reikia sudo:
> sudo systemctl paleiskite apache2 iš naujo
Priešingai, nekenksmingesnės komandos, tokios kaip paslaugos būsenos tikrinimas Jie gali veikti be privilegijų daugelyje sistemų:
> systemctl būsena Tinklo tvarkyklė
Vartotojų paskyrų valdymas taip pat reikalauja dėmesioKomandos, tokios kaip usermod, useradd o deluser Jie beveik visada turėtų eiti su sudo, nes jie modifikuoja sistemos vartotojų duomenų bazę:
> sudo usermod -L -f 30 tux
Galiausiai, failų teisės ir nuosavybės valdymas su chown Įmonei paprastai reikia privilegijų, kai jos paveikia sistemos kelius ar kitus vartotojus. Pavyzdžiui, norint, kad visi failai ir pakatalogiai būtų /home/test/tux-files tapti naudotojo nuosavybe tux Galėtumėte naudoti:
> sudo chown -R tux:tux /home/test/tux-files
Praktiniai sudo naudojimo pavyzdžiai
Pažvelkime į keletą realių atvejų. Kur sudo Tai atskiria leidimų klaidą nuo teisingos administravimo operacijos.
Paketų indeksų atnaujinimas Debian/Ubuntu sistemose Be privilegijų, jis pateiks klaidas, nes negalės manipuliuoti failais. /var/lib/apt/listsKomanda:
> apt-get update
Baigsis pranešimais „Leidimas atmestas“.Kai tik tai pakartosi, viskas pasikeis:
> sudo apt-get update
Sistema paprašys jūsų slaptažodžio.ir jei jūsų naudotojas yra įgaliotas sudoersAtnaujinimas veiks be problemų. Tai pasikartojanti tendencija: leidimų klaida be sudoteisingas vykdymas su sudo.
Kitas labai dažnas pavyzdys yra failų kopijavimas į sistemos keliusKaip /usr/local/binJei bandysite nukopijuoti scenarijų ten naudodami paprastą:
> cp script.sh /usr/local/bin/
Terminalui skųstis yra normalu. kad neturite leidimo rašyti į tą katalogą. Jei pakartosite operaciją pridėdami sudo:
> sudo cp script.sh /usr/local/bin/
Jūsų bus paprašyta slaptažodžio ir, sėkmingai patvirtinus autentifikaciją,Kopija bus padaryta ir užregistruota kaip įvykdyta su padidintomis teisėmis.
Taip pat galite derinti su „sudo“ su parinktimi -u vykdyti konkrečias komandas kaip kitas vartotojas, nekeičiant sesijų ar nenaudojant su. Por ejemplo:
> kas aš
> sudo -u pedro whoami
Pirmajame užsakyme bus rodomas jūsų tikrasis vartotojo vardas., o antrasis grąžins „pedro“, tai parodys, kad vykdymas buvo atliktas kaip tas tikslinis vartotojas.
Leidimų suteikimas be slaptažodžio ir kitos išplėstinės parinktys
Vienas iš galingiausių dalykų, susijusių su prakaitavimu Ši funkcija leidžia reguliuoti, kiek slaptažodžio prašoma ir kokioms konkrečioms komandoms. Kartais galite norėti, kad tam tikri vartotojai galėtų vykdyti konkrečias komandas nereikėdami kaskart įvesti slaptažodžio, pavyzdžiui, automatiniams scenarijams arba išjungimo mygtukams darbalaukio aplinkoje.
Tai pasiekiama naudojant etiketę NOPASSWD taisyklėse sudoersPavyzdžiui, jei norite miusuario gali vykdyti /bin/cat su sudo Nereikalaudami slaptažodžio, galite pridėti eilutę:
manovartotojas ALL = NOPASSWD: /bin/cat
Panašiai galite leisti jam valdyti įrangos išjungimą. be pakartotinio autentifikavimo, pridedant kažką panašaus į:
manovartotojas ALL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Švaresnėms ir labiau keičiamo dydžio konfigūracijomsPatartina naudoti slapyvardžius. Tipiškas pavyzdys yra vartotojų grupės, komandų grupės ir, jei reikia, vykdymo vartotojo slapyvardžio apibrėžimas:
User_Alias GROUP = pepe, perico, andres
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias WEB = www-duomenys, apache
Turėdami šiuos apibrėžimus, galėtumėte parašyti Daug lengviau skaitomos taisyklės, pavyzdžiui:
VISA GRUPĖ = GALIA
Taigi, bet kuris vartotojas, įtrauktas į slapyvardį GRUPO Galėsite išjungti arba paleisti kompiuterį iš naujo naudodami sudoir galite nustatyti, ar norite reikalauti slaptažodžio, ar ne NOPASSWD o PASSWDTaip pat galite apriboti naudojimą konkretiems kompiuteriams naudodami Host_Alias kad jis galiotų tik iš konkretaus tinklo.
Be to NOPASSWDYra ir kitų etikečių kaip NOEXEC (kad komanda nepaleistų kitų programų su padidintais leidimais) arba nedidelių įdomybių, pvz., pridėjimo insults iki linijos Defaults, taip kad sudo Kiekvieną kartą, kai neįvesite slaptažodžio, pajuokausiu angliškai.
Visa tai rodo, kad „sudoers“ yra daug daugiau nei paprastas „šakninio vartotojo perjungimas“.Tinkamai sukonfigūravus, galite sukurti labai detalų leidimų modelį, pritaikytą jūsų poreikiams ir pasižymintį daug aukštesniu saugumo lygiu nei įprastas „įeikite kaip root ir darykite ką norite“.
Turėti tokį įrankį kaip sudotinkamai suprastas ir tinkamai sukonfigūruotasTai beveik privaloma bet kurioje šiuolaikinėje „Linux“ sistemoje, kurioje dirba keli vartotojai arba kurioje norite sumažinti riziką, net jei esate vienintelis vartotojas. Pasinaudojant deriniu sudo, /etc/sudoers, grupos como sudo o wheel ir išplėstines žymas, pvz. NOPASSWDGalite pasiekti labai priimtiną pusiausvyrą tarp komforto, puikaus valdymo ir saugumo, nereikėdami nuolat būti prilipusiems prie sesijos. root nei pasikliauti vien sėkme.
