Kako koristiti sudo u Linuxu i savladati sudoers datoteku

  • sudo vam omogućuje izvršavanje naredbi kao drugi korisnik (obično root) na kontroliran i privremen način.
  • Postavke dopuštenja definirane su u /etc/sudoers i u datotekama /etc/sudoers.d pomoću visudo.
  • Grupe poput sudo ili wheel i aliasi u sudoersima olakšavaju dodjeljivanje određenih privilegija određenim korisnicima.
  • Opcije poput NOPASSWD omogućuju vam podešavanje sigurnosti i praktičnosti pri korištenju sudo naredbe u različitim scenarijima.

korištenje sudo naredbe u Linuxu

Ako svakodnevno radite s LinuxomPrije ili kasnije naići ćeš na naredbu sudoTo je ključ koji vam omogućuje obavljanje administrativnih zadataka bez potrebe za prijavom kao korisnik. root Stalno, što nije samo nezgodno već i prilično opasno. Razumijevanje kako funkcionira, koje opcije ima i kako ga konfigurirati ključno je ako ne želite slučajno probiti sustav ili ostaviti sigurnosnu ranjivost nesvjesno.

U ovom članku ćemo detaljno objasniti. o čemu se točno radi? sudoKakav je njegov odnos s korisnikom? root i s datotekom /etc/sudoersKoje su razlike između korištenja su y sudoi kako možete precizno podesiti postavke kako biste određenim korisnicima ili grupama dodijelili vrlo specifična dopuštenja (čak i bez potrebe za lozinkom). Ideja je da ćete, do trenutka kada završite s čitanjem, biti vrlo jasni kada koristiti sudoŠto radi ispod površine i kako to kontrolirati bez straha.

Što je sudo i zašto je toliko važan u Linuxu?

Naredba sudo To je jedan od ključnih dijelova bilo kojeg modernog Linux sustava. Njegovo ime se obično objašnjava kao "superkorisnik do" ili "zamjenski korisnik i do", a njegova funkcija je jednostavna, ali moćna: omogućuje ovlaštenom korisniku izvršavanje naredbi kao da je drugi korisnik na sustavu, obično rootna ograničeno vrijeme.

U praksi, to znači da običan korisnik može obavljati administrativne zadatke - instaliranje paketa, mijenjanje postavki sustava, upravljanje uslugama, promjenu dozvola za osjetljive datoteke - bez prijavite se izravno kao rootOva podjela između običnog korisnika i superkorisnika jedan je od stupova sigurnosti u Linuxu.

Većina trenutnih distribucija (Debian, Ubuntu, mnogi derivati, SLE-tipski sustavi itd.) donose sudo Unaprijed je instaliran i ne preporučuje se njegova deinstalacija ili olako mijenjanje. Nadalje, na mnogim sustavima korisnik stvoren tijekom instalacije automatski se dodaje administratorskoj grupi koja ima dopuštenje za njegovo korištenje. sudo, postajući zadani privilegirani korisnik.

Nešto vrlo važno imati na umu je to sudo Ne "pretvara" korisnika u root Ne daje potpuni pristup sustavu, već korisnicima omogućuje izvršavanje određenih naredbi kao drugi korisnik, prema pravilima definiranim u njegovoj konfiguraciji. Na taj način mogu se dodijeliti vrlo specifična dopuštenja bez davanja potpunog pristupa sustavu.

Kako sudo radi interno

Osnovna operacija od sudo Vrlo je jednostavno s korisničke točke gledišta: postavite riječ sudo prije naredbe koju želimo izvršiti s privilegijama. Na primjer, za ažuriranje popisa paketa s apt-get U Debianu ili Ubuntuu, običan korisnik će trebati učiniti nešto poput:

> sudo apt-get ažuriranje

Ako pokušate pokrenuti administratorsku naredbu bez sudo naredbeNajčešće ćete dobiti pogreške poput "Dozvola odbijena" ili poruke koje pokazuju da se određena zaključana datoteka ne može otvoriti u /var/lib ili u drugom sistemskom direktoriju. Čim ponovite istu naredbu dodajući sudo Zatim će sustav tražiti vašu lozinku i, ako je sve ispravno konfigurirano, naredba će se izvršiti s privilegijama superkorisnika.

Kada izvršite naredbu s sudoProgram prvo provjerava je li vaš korisnik ovlašten koristiti ga i za koje specifične naredbe, konzultirajući konfiguracijsku datoteku. /etc/sudoers i, u mnogim sustavima, dodatne datoteke u direktoriju /etc/sudoers.d/Ako pravila to dopuštaju, sudo Traži lozinku (obično vašu, ne njihovu). root) i privremeno povećava vaše privilegije za pokretanje naredbe kao ciljni korisnik.

Zanimljiv detalj koji vas često u početku zbuni Kada se na terminalu od vas zatraži lozinka, ne prikazuju se nikakvi znakovi, čak ni zvjezdice, dok tipkate. To je sasvim normalno: unos je "slijep" i dio je sigurnosnih mjera kojima se sprječava da se vidi duljina vaše lozinke.

Nadalje, Sudo održava svojevrsnu "sesiju povjerenja"Nakon uspješnog unosa lozinke, povišene privilegije ostaju aktivne određeno vrijeme (prema zadanim postavkama, oko 15 minuta u mnogim distribucijama) u istom terminalu. Tijekom tog razdoblja možete izvršavati više naredbi s sudo bez da vas stalno pita za lozinku.

Osnovna sintaksa i najkorisnije opcije sudo naredbe

Opća sintaksa sudo Vrlo je jednostavno:

> sudo naredba

Najčešći način korištenja je jednostavno kao sudo comandoMeđutim, ima dobar broj zanimljivih opcija. Neke od najčešće korištenih (i istaknutih u mnogim službenim vodičima) su sljedeće:

  • -h: Prikazuje poruku pomoći sa sintaksom i svim dostupnim opcijama programa sudo.
  • -V: prikazuje trenutnu verziju sudo i neke detalje sastavljanja.
  • -vObnavlja "vrijeme odgode" za autentifikaciju, odnosno osvježava brojač kako vam privilegije ne bi istekle i kako ne biste morali uskoro ponovno unositi lozinku.
  • -k: odmah poništava pohranjene vjerodajnice; to je kao da kažete sudo koji "zaboravlja" da ste se već autentificirali, prisiljavajući vas da sljedeći put ponovno tražite lozinku.
  • -l: prikazuje koje naredbe imate ovlaštenje za izvršavanje sudo prema trenutnoj konfiguraciji sudoers.

Također postoje vrlo korisne opcije za izvršavanje naredbi poput drugih korisnika. različito od root. Na primjer, sa -u Možete odrediti ciljnog korisnika za određenu naredbu:

> sudo -u pedro whoami

U ovom slučaju, čak i ako vaša sesija pripada drugom korisniku, naredba whoami Vratit će "pedro" jer je izvršeno kao da ste vi taj korisnik. To je vrlo praktično za testiranje dozvola ili izvršavanje zadataka povezanih s računima usluga bez potrebe za ručnim prebacivanjem sesija.

sudo u odnosu na su i root korisnika

U Linuxu koegzistira nekoliko mehanizama. Za dobivanje administratorskih ovlasti: registrirajte se izravno kao root, upotrijebite naredbu su i koristiti sudoSvaki ima svoje prednosti i nedostatke, a njihovo razumijevanje uštedjet će vam mnogo problema.

Prijavite se izravno kao root (na primjer, s ssh root@servidorTo vam daje potpuni pristup sustavu od samog početka. Vrlo je praktično, ali i izuzetno opasno: svaka pogrešno unesena naredba može izbrisati polovicu sustava, promijeniti kritična dopuštenja ili učiniti stroj neupotrebljivim. Stoga se u većini slučajeva ne preporučuje rad s prijavnim sesijama. root trajno otvoreno.

Naredba su (zamjenski korisnik) Omogućuje vam prebacivanje na drugog korisnika unutar istog terminala. Izvorna sesija ostaje u pozadini i "uključuje" novu. Ako pokrenete su pedroBit ćete upitani za svoju lozinku. pedro i, jednom unutra, ako upišete exit Vratit ćete se na prethodnog korisnika. Ako ne navedete korisničko ime, su Prema zadanim postavkama, pokušava se prebaciti na root.

Postoji važna nijansa s su: ako ne prođete opciju prijave (su -, su -l o su --login), mijenja korisnika, ali ne i okruženje. To znači da ćete ostati u radnom direktoriju i s varijablama prethodnog korisnika, što može uzrokovati pogreške u dopuštenjima (na primjer, pri pokušaju popisa dom (izvornog korisnika s vjerodajnicama novog korisnika).

Umjesto toga, sudo Nudi sigurniji i kontroliraniji pristupNe morate znati lozinku za rootali vaša vlastita lozinka, a sustav odlučuje, /etc/sudoerskoji korisnici mogu izvršavati koje naredbe, na primjer koji korisnici i s kojih računala. Nadalje, svaka upotreba sudo Zapisuje se u zapisnike, što olakšava nadzor nad onim što je učinjeno s povišenim dozvolama.

Za interaktivne sesije "kao drugi korisnik" sa sudo naredbomPostoje neke vrlo praktične varijacije:

  • Sudo -s: otvara ljusku kao ciljni korisnik nasljeđujući okruženje trenutnog korisnika.
  • sudo -i: pokreće punu prijavnu ljusku za ciljnog korisnika, s čistim okruženjem i direktorijem. $HOME, učitavanje datoteka poput .profile o .bash_profile.

Obje opcije su korisne za rad na jednokratnoj osnovi. kao drugi korisnik (obično root ili bilo koji servisni račun) bez potrebe za pamćenjem i korištenjem lozinke, uz održavanje kontrole i evidencije izvršenih radnji.

Datoteka /etc/sudoers i direktorij /etc/sudoers.d

Srce sudo konfiguracije u arhivi je /etc/sudoersTu je definirano tko to može koristiti sudoodakle, na primjer koji korisnik i koje se specifične naredbe mogu izvršiti. Osim toga, mnoge distribucije uključuju direktivu koja automatski učitava sve dodatne konfiguracijske datoteke koje se nalaze u /etc/sudoers.d/.

Ključno je to razumjeti /etc/sudoers Ne biste trebali uređivati ​​"bez odgovarajućeg uređivanja" s bilo kojim uređivačem teksta. Uvijek se mora mijenjati pomoću naredbe visudo, koji otvara datoteku s uređivačem (prema zadanim postavkama vi o nano(ovisno o konfiguraciji), ali dodaje sloj sigurnosti: provjerava sintaksu prije spremanja i sprječava da je dvije osobe uređuju istovremeno.

Tipična upotreba za uređivanje sudoera To je:

> sudo visudo -f /etc/sudoers

Također možete stvoriti određene datoteke u /etc/sudoers.d/ za odvajanje konfiguracija po korisničkim grupama, uslugama itd. Na primjer, možete imati datoteku /etc/sudoers.d/networking sa specifičnim pravilima za administraciju mreže, bez miješanja s ostatkom opće konfiguracije.

Prilikom otvaranja /etc/sudoers na tipičnom sustavuVidjet ćete retke poput ovih (ne računajući komentare):

  • korijen SVE=(SVE:SVE) SVEkorisnik root Možete izvršiti bilo koju naredbu na bilo kojem hostu, kao bilo koji korisnik i bilo koja grupa.
  • %admin SVE=(SVE) SVE: bilo tko unutar grupe admin ima puna dopuštenja za korištenje sudo.
  • %sudo SVE=(SVE:SVE) SVEIsto vrijedi i za grupu sudo, što je u Ubuntuu i derivatima obično ključna skupina.
  • #includedir /etc/sudoers.d: označava da datoteke u tom direktoriju također treba pročitati (čak i ako je #(Ovo nije komentar u ovom konkretnom kontekstu).

Uz pravila za korisnike i grupe, sudoers Omogućuje definiranje aliasa za pojednostavljenje složenih konfiguracija: korisnički aliasi (User_Alias), naredbi (Cmnd_Alias), izvršnih grupa (Runas_Alias) ili domaćina (Host_Alias).

Upravljanje korisnicima i grupama pomoću sudoera

Uobičajena praksa na serverima kontrolira pristup sudo putem grupa. Na primjer, u mnogim sustavima dovoljno je dodati korisnika u grupu sudo o wheel kako biste mogli dobiti pune administrativne dozvole.

Za provjeru koji korisnici pripadaju grupi određeno (na primjer, sudo), možete koristiti:

> grep 'sudo' /etc/group

Ako želite dati sudo dozvole korisnikuUobičajena praksa je dodati ga odgovarajućoj skupini. Na primjer, uključiti bill Grupi sudo:

> sudo adduser bill sudo

Kada trebate opozvati te privilegijeJednostavno ga uklonite iz grupe:

> sudo deluser bill sudo

Druga, mnogo bolja mogućnost To uključuje davanje dozvola samo za određene naredbe, bez davanja slobodnih ruku. Da bi se to postiglo, obično se stvaraju određene datoteke u /etc/sudoers.d/Na primjer, možete definirati datoteku /etc/sudoers.d/networking s nečim poput:

Cmnd_Alias ​​​​CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​​​SERVERI = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​​​NETALL = SNIMANJE, POSLUŽITELJI
%netadmin SVE = SVE

S ovom konfiguracijom, bilo koji korisnik u grupi netadmin moći ćete izvršavati naredbe definirane pod aliasom NETALL (koji grupira pseudonime) CAPTURE y SERVERSbez potpunog pristupa svemu sudoSve što je potrebno je dodati bill Grupi netadmin kako biste mogli koristiti tcpdump i definirane poslužiteljske alate.

Uobičajene naredbe koje zahtijevaju sudo

U svakodnevnoj administraciji sustavaPostoji nekoliko vrsta zadataka koji gotovo uvijek idu ruku pod ruku s sudojer uključuju modificiranje sustava ili pristup povlaštenim informacijama.

Upravljanje paketima: u distribucijama temeljenim na zypper, apt ili druge upravitelje paketa, svaka operacija koja instalira, uklanja ili ažurira softver zahtijeva privilegije. Na primjer:

> instalacijski paket sudo zypper
> sudo apt-get install docker-ce

Međutim, upiti koji samo čitaju informacije, kao što je popisivanje repozitorija, obično se može pokrenuti bez sudoRadi se o testiranju i promatranju kada sam sustav vraća grešku dozvola.

Upravljanje uslugama pomoću systemd-a Obično se to radi putem systemctlRadnje poput pokretanja, zaustavljanja ili ponovnog pokretanja usluga obično zahtijevaju sudo:

> sudo systemctl ponovno pokretanje apache2

Nasuprot tome, bezopasnije naredbe poput provjere statusa usluge Mogu funkcionirati bez privilegija na mnogim sustavima:

> status systemctl-a NetworkManager

Upravljanje korisničkim računima također zahtijeva pažnjuNaredbe poput usermod, useradd o deluser Gotovo uvijek bi trebali ići uz sudo, budući da mijenjaju korisničku bazu podataka sustava:

> sudo usermod -L -f 30 tux

Konačno, dozvole za datoteke i upravljanje vlasništvom s chown I tvrtki su obično potrebne privilegije kada utječu na sistemske putanje ili druge korisnike. Na primjer, da bi se sve datoteke i poddirektorije /home/test/tux-files postati vlasništvo korisnika tux Mogli biste koristiti:

> sudo chown -R tux:tux /početna/test/tux-datoteke

Praktični primjeri korištenja sudo naredbe

Pogledajmo neke stvarne slučajeve. gdje sudo To čini razliku između pogreške u dozvolama i ispravne administrativne operacije.

Ažuriranje indeksa paketa u Debianu/Ubuntuu Bez privilegija, javljat će greške jer ne može manipulirati datotekama. /var/lib/apt/listsNaredba:

> apt-get ažuriranje

Završit će porukom "Dozvola odbijena"Čim to tako ponoviš, stvari se mijenjaju:

> sudo apt-get ažuriranje

Sustav će vas tražiti za lozinku.i ako je vaš korisnik ovlašten u sudoersAžuriranje će se pokrenuti bez problema. To je ponavljajući obrazac: greška dozvola bez sudoispravna izvedba s sudo.

Drugi vrlo čest primjer je kopiranje datoteka u sistemske putanjeKao /usr/local/binAko pokušate kopirati skriptu tamo jednostavnim:

> cp script.sh /usr/local/bin/

Normalno je da se terminal žali da nemate dopuštenje za pisanje u taj direktorij. Ako ponovite operaciju dodavanjem sudo:

> sudo cp script.sh /usr/local/bin/

Bit ćete upitani za lozinku i, nakon uspješne autentifikacije,Kopija će biti napravljena i zabilježena kao izvršena s povišenim privilegijama.

Također možete kombinirati sudo s opcijom -u izvršavati određene naredbe kao drugi korisnik, bez promjene sesija ili korištenja su, Na primjer:

> tko je
> sudo -u pedro whoami

Prva narudžba će prikazati vaše pravo korisničko ime., dok će drugi vratiti „pedro“, pokazujući da je izvršenje izvršeno kao taj ciljni korisnik.

Dodjeljivanje dozvola bez lozinke i druge napredne opcije

Jedna od najmoćnijih stvari kod znojenja Ova značajka omogućuje vam podešavanje opsega u kojem se traži lozinka i za koje određene naredbe. Ponekad biste možda htjeli da određeni korisnici mogu izvršavati određene naredbe bez potrebe da svaki put unose lozinku, na primjer, za automatizirane skripte ili gumbe za isključivanje u okruženju radne površine.

To se postiže oznakom NOPASSWD u pravilima sudoersNa primjer, ako želite miusuario može izvršiti /bin/cat s sudo Bez potrebe za lozinkom, možete dodati redak:

mojkorisnik SVI = BEZ LOZINKE: /bin/cat

Slično tome, mogli biste mu dopustiti da upravlja isključivanjem opreme. bez ponovljene autentifikacije, dodavanjem nečega poput:

mojkorisnik SVE = BEZLOZINKE: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart

Za čišće i skalabilnije konfiguracijePreporučljivo je koristiti aliase. Tipičan primjer je definiranje korisničke grupe, naredbene grupe i, ako je potrebno, izvršnog korisničkog aliasa:

User_Alias ​​​​GROUP = pepe, perico, andres
Cmnd_Alias ​​​​POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias ​​​​WEB = www-podaci, apache

S ovim definicijama mogli biste tada napisati Mnogo čitljivija pravila, kao što su:

CIJELA GRUPA = MOĆ

Dakle, svaki korisnik uključen u alias GRUPO Moći ćete isključiti ili ponovno pokrenuti računalo pomoću sudoi možete prilagoditi želite li zahtijevati lozinku ili ne NOPASSWD o PASSWDTakođer možete ograničiti korištenje na određene hostove pomoću Host_Alias tako da vrijedi samo s određene mreže.

izvan NOPASSWDPostoje i druge oznake kao NOEXEC (kako bi se spriječilo pokretanje drugih programa s povišenim dozvolama naredbom) ili male zanimljivosti poput dodavanja insults do linije Defaults, tako da sudo Svaki put kad ne uneseš lozinku, šalit ću se na engleskom.

Sve ovo pokazuje da je sudoers puno više od jednostavnog "root prekidača".Kada se pravilno konfigurira, omogućuje vam dizajniranje vrlo granularnog modela dozvola, prilagođenog vašim potrebama i s razinom sigurnosti daleko superiornijom od tipičnog "uđite kao root i radite što god želite".

Imati alat poput sudopravilno shvaćen i pravilno konfiguriranGotovo je obavezno na svakom modernom Linux sustavu gdje radi više korisnika ili gdje želite smanjiti rizike, čak i ako ste jedini korisnik. Iskorištavanje kombinacije sudo, /etc/sudoers, grupos como sudo o wheel i napredne oznake kao što su NOPASSWDMožete postići vrlo razumnu ravnotežu između udobnosti, fine kontrole i sigurnosti, bez potrebe da budete stalno prikovani za sesiju. root niti se oslanjati isključivo na sreću.

root korisnik u Linuxu
Povezani članak:
Root korisnik u Linuxu: dozvole, rizici i najbolje prakse