
Hvis du jobber med Linux dagligFør eller siden kommer du over kommandoen sudoDet er nøkkelen som lar deg utføre administrative oppgaver uten å måtte logge inn som bruker. root Hele tiden, noe som ikke bare er upraktisk, men også ganske farlig. Å forstå hvordan det fungerer, hvilke alternativer det har og hvordan man konfigurerer det er avgjørende hvis du ikke vil at systemet skal bryte seg ned ved et uhell eller etterlate et sikkerhetsproblem uten å være klar over det.
I denne artikkelen skal vi gå i detalj. hva handler det egentlig om? sudoHva er dens forhold til brukeren? root og med filen /etc/sudoersHva er forskjellene mellom å bruke su y sudoog hvordan du kan finjustere innstillingene for å gi svært spesifikke tillatelser (selv uten å kreve passord) til bestemte brukere eller grupper. Tanken er at når du er ferdig med å lese, vil du være veldig klar over når du skal bruke sudoHva den gjør under og hvordan man kontrollerer den uten frykt.
Hva er sudo og hvorfor er det så viktig i Linux?
Kommandoen sudo Det er en av nøkkeldelene av ethvert moderne Linux-system. Navnet forklares vanligvis som «superbruker gjør» eller «erstatt bruker og gjør», og funksjonen er enkel, men kraftig: den lar en autorisert bruker utføre kommandoer som om de var en annen bruker på systemet, normalt rooti en begrenset periode.
I praksis betyr dette at en vanlig bruker kan utføre administrative oppgaver – installere pakker, endre systeminnstillinger, administrere tjenester, endre tillatelser for sensitive filer – uten logg inn direkte som rootDenne separasjonen mellom den vanlige brukeren og superbrukeren er en av grunnpilarene for sikkerhet i Linux.
De fleste nåværende distribusjoner (Debian, Ubuntu, mange derivater, SLE-lignende systemer osv.) bringer sudo Den er forhåndsinstallert, og det anbefales ikke å avinstallere eller tukle med den lettvint. Dessuten blir brukeren som opprettes under installasjonen automatisk lagt til i administratorgruppen som har tillatelse til å bruke den på mange systemer. sudo, og blir standard bruker med privilegier.
Noe veldig viktig å huske på er at sudo Det «konverterer» ikke en bruker til root Den gir ikke full tilgang til systemet, men lar brukere utføre spesifikke kommandoer som en annen bruker, under regler definert i konfigurasjonen. På denne måten kan svært spesifikke tillatelser gis uten å gi full tilgang til systemet.
Hvordan sudo fungerer internt
Den grunnleggende driften av sudo Det er veldig enkelt fra brukerens synspunkt: du plasserer ordet sudo før kommandoen vi vil kjøre med privilegier. For eksempel, for å oppdatere pakkelisten med apt-get I Debian eller Ubuntu må en vanlig bruker gjøre noe slikt som:
> sudo apt-get update
Hvis du prøver å kjøre en administrativ kommando uten sudoVanligvis vil du motta feilmeldinger som «Ingen tilgang» eller meldinger som indikerer at en bestemt låst fil ikke kan åpnes i /var/lib eller i en annen systemkatalog. Så snart du gjentar den samme kommandoen og legger til sudo Deretter vil systemet be om passordet ditt, og hvis alt er riktig konfigurert, vil kommandoen bli utført med superbrukerrettigheter.
Når du utfører en kommando med sudoProgrammet sjekker først om brukeren din er autorisert til å bruke det og for hvilke spesifikke kommandoer, ved å konsultere konfigurasjonsfilen. /etc/sudoers og, i mange systemer, tilleggsfilene i katalogen /etc/sudoers.d/Hvis reglene tillater det, sudo Den ber om passordet (vanligvis ditt, ikke deres). root) og midlertidig hever rettighetene dine til å kjøre kommandoen som målbrukeren.
En merkelig detalj som ofte forvirrer deg i starten Når du blir bedt om passordet ditt i terminalen, vises ingen tegn, ikke engang stjerner, mens du skriver. Dette er helt normalt: inndataene er "blind" og er en del av sikkerhetstiltakene for å forhindre at lengden på passordet ditt blir synlig.
Videre opprettholder Sudo en slags "tillitsmøte"Etter at passordet er skrevet inn, forblir forhøyede rettigheter aktive i en periode (som standard omtrent 15 minutter i mange distribusjoner) i den samme terminalen. I løpet av denne perioden kan du utføre flere kommandoer med sudo uten at den ber deg om passordet igjen og igjen.
Grunnleggende syntaks og de mest nyttige alternativene for sudo
Den generelle syntaksen til sudo Det er veldig enkelt:
> sudo-kommando
Den vanligste måten å bruke den på er rett og slett som sudo comandoDen har imidlertid en god del interessante alternativer. Noen av de mest brukte (og fremhevet i mange offisielle guider) er følgende:
- -hViser en hjelpemelding med syntaksen og alle tilgjengelige alternativer i programmet
sudo. - -V: viser gjeldende versjon av
sudoog noen detaljer om kompileringen. - -vFornyer autentiseringen med «frist», det vil si at telleren oppdateres slik at rettighetene dine ikke utløper og du ikke trenger å skrive inn passordet på nytt med det første.
- -k: ugyldiggjør lagret legitimasjon umiddelbart; det er som å fortelle
sudosom «glemmer» at du allerede har autentisert deg, og tvinger deg til å be om passordet ditt igjen neste gang. - -lviser hvilke kommandoer du har tillatelse til å kjøre med
sudoi henhold til gjeldende konfigurasjon avsudoers.
Det finnes også veldig nyttige alternativer for å kjøre kommandoer som andre brukere. forskjellig fra root. For eksempel med -u Du kan angi en målbruker for en bestemt kommando:
> sudo -u pedro whoami
I dette tilfellet, selv om økten din tilhører en annen bruker, kommandoen whoami Den vil returnere «pedro» fordi den ble kjørt som om du var den brukeren. Dette er veldig praktisk for å teste tillatelser eller utføre oppgaver knyttet til tjenestekontoer uten å måtte bytte økter manuelt.
sudo versus su og root-brukeren
I Linux eksisterer flere mekanismer samtidig. For å få administratorrettigheter: registrer deg direkte som root, bruk kommandoen su og bruk sudoHver av dem har sine fordeler og ulemper, og å forstå dem vil spare deg for mye trøbbel.
Logg inn direkte som root (for eksempel med ssh root@servidorDette gir deg full tilgang til systemet fra starten av. Dette er veldig praktisk, men også ekstremt farlig: enhver feilstavet kommando kan slette halve systemet, endre kritiske tillatelser eller gjøre maskinen ubrukelig. Derfor anbefales det i de fleste tilfeller ikke å jobbe med påloggingsøkter. root åpent permanent.
Kommandoen su (erstatningsbruker) Den lar deg bytte til en annen bruker i samme terminal. Den opprinnelige økten forblir i bakgrunnen og "innkapsler" den nye. Hvis du kjører su pedroDu vil bli bedt om å oppgi passordet ditt. pedro og når du er inne, hvis du skriver exit Du vil gå tilbake til den forrige brukeren. Hvis du ikke angir et brukernavn, su Som standard prøver den å bytte til root.
Det er en viktig nyanse med su: hvis du ikke fullfører påloggingsalternativet (su -, su -l o su --login), endrer bruker, men ikke miljø. Dette betyr at du vil forbli i arbeidskatalogen og med variablene til den forrige brukeren, noe som kan forårsake tillatelsesfeil (for eksempel når du prøver å liste opp hjem (av den opprinnelige brukeren med den nye brukerens påloggingsinformasjon).
Stedet, sudo Det tilbyr en tryggere og mer kontrollerbar tilnærmingDu trenger ikke å vite passordet for rootmen ditt eget passord, og systemet bestemmer det, ved /etc/sudoershvilke brukere som kan utføre hvilke kommandoer, for eksempel hvilke brukere og fra hvilke maskiner. Videre, hver bruk av sudo Det registreres i loggene, noe som gjør det enklere å revidere hva som er gjort med utvidede tillatelser.
For interaktive økter «som en annen bruker» med sudoDet finnes noen svært praktiske variasjoner:
- Sudo-såpner et skall når målbrukeren arver den nåværende brukerens miljø.
- sudo -istarter et fullstendig innloggingsskall for målbrukeren, med miljøet og katalogen rengjort.
$HOME, laster inn filer som.profileo.bash_profile.
Begge alternativene er nyttige for å jobbe på engangsbasis. som en annen bruker (vanligvis root eller en hvilken som helst tjenestekonto) uten å måtte huske og bruke passordet ditt, samtidig som du beholder kontrollen og en oversikt over utførte handlinger.
Filen /etc/sudoers og katalogen /etc/sudoers.d
Hjertet i sudo-konfigurasjonen den er i arkivet /etc/sudoersDer er det definert hvem som kan bruke det sudohvorfra, for eksempel hvilken bruker og hvilke spesifikke kommandoer som kan utføres. I tillegg inkluderer mange distribusjoner et direktiv som automatisk laster inn alle ekstra konfigurasjonsfiler som ligger i /etc/sudoers.d/.
Det er avgjørende å forstå det /etc/sudoers Du bør ikke redigere «uten redigering» med en hvilken som helst teksteditor. Den må alltid endres ved hjelp av kommandoen visudo, som åpner filen med et redigeringsprogram (som standard vi o nano(avhengig av konfigurasjonen), men den legger til et sikkerhetslag: den sjekker syntaksen før lagring og forhindrer at to personer redigerer den samtidig.
Typisk bruk for redigering av sudoere er:
> sudo visudo -f /etc/sudoers
Du kan også opprette spesifikke filer i /etc/sudoers.d/ for å skille konfigurasjoner etter brukergrupper, tjenester osv. Du kan for eksempel ha en fil /etc/sudoers.d/networking med spesifikke regler for nettverksadministrasjon, uten å blande det med resten av den generelle konfigurasjonen.
Når du åpner /etc/sudoers på et typisk systemDu vil se linjer som disse (kommentarer medregnet ikke):
- rot ALLE=(ALLE:ALLE) ALLEbrukeren
rootDu kan utføre hvilken som helst kommando på hvilken som helst vert, som hvilken som helst bruker og hvilken som helst gruppe. - %admin ALLE=(ALLE) ALLE: alle i gruppen
adminhar full tillatelse til å brukesudo. - %sudo ALLE=(ALLE:ALLE) ALLEDet samme gjelder for gruppen
sudo, som i Ubuntu og derivater vanligvis er nøkkelgruppen. - # inkluderer /etc/sudoers.d: indikerer at filene i den katalogen også skal leses (selv om en
#(Dette er ikke en kommentar i denne spesifikke konteksten).
I tillegg til bruker- og grupperegler, sudoers Det tillater definering av aliaser for å forenkle komplekse konfigurasjoner: brukeraliaser (User_Alias), av kommandoer (Cmnd_Alias), av utførelsesgrupper (Runas_Alias) eller av verter (Host_Alias).
Administrer brukere og grupper med sudoere
Vanlig praksis på servere kontrollerer tilgangen til sudo gjennom grupper. For eksempel er det i mange systemer nok å legge til en bruker i gruppen sudo o wheel slik at du kan få fulle administrative tillatelser.
For å sjekke hvilke brukere som tilhører en gruppe bestemt (for eksempel, sudo), kan du bruke:
> grep 'sudo' /etc/gruppe
Hvis du vil gi sudo-tillatelser til en brukerVanlig praksis er å legge den til i den tilsvarende gruppen. For eksempel å innlemme bill Til gruppen sudo:
> sudo adduser bill sudo
Når du må tilbakekalle disse rettigheteneBare fjern den fra gruppen:
> sudo deluser bill sudo
En annen, mye bedre mulighet Det innebærer å gi tillatelser kun for bestemte kommandoer, uten å gi fritt spillerom. For å gjøre dette opprettes det vanligvis spesifikke filer i /etc/sudoers.d/For eksempel kan du definere en fil /etc/sudoers.d/networking med noe sånt som:
Cmnd_Alias ​​​​CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​​​SERVERE = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​​​NETALL = FANGST, SERVERE
%netadmin ALL = NETALL
Med denne konfigurasjonen kan enhver bruker i gruppen netadmin du vil kunne utføre kommandoene som er definert under aliaset NETALL (som grupperer aliasene) CAPTURE y SERVERSuten å ha full tilgang til alt sudoAlt som trengs er å legge til bill Til gruppen netadmin slik at du kan bruke tcpdump og de definerte serververktøyene.
Vanlige kommandoer som krever sudo
I den daglige administrasjonen av systemerDet finnes flere typer oppgaver som nesten alltid går hånd i hånd med sudofordi de innebærer å endre systemet eller få tilgang til privilegert informasjon.
Pakkehåndteringi fordelinger basert på zypper, apt eller andre pakkebehandlere, enhver operasjon som installerer, fjerner eller oppdaterer programvare krever rettigheter. For eksempel:
> sudo zypper installasjonspakke
> sudo apt-get install docker-ce
Imidlertid spørringer som bare leser informasjon, som for eksempel å liste opp arkiver, kan vanligvis kjøres uten sudoDet handler om å teste og se når systemet selv returnerer en tillatelsesfeil.
Tjenestehåndtering med systemd Det gjøres vanligvis gjennom systemctlHandlinger som å starte, stoppe eller starte tjenester på nytt krever vanligvis sudo:
> sudo systemctl start på nytt apache2
I motsetning til dette brukes mer uskyldige kommandoer, som å sjekke statusen til en tjeneste De kan fungere uten rettigheter på mange systemer:
> systemctl status Nettverksadministrator
Administrering av brukerkontoer krever også forsiktighetKommandoer som usermod, useradd o deluser De burde nesten alltid gå med sudo, siden de endrer systemets brukerdatabase:
> sudo brukermod -L -f 30 tux
Til slutt, filtillatelser og eierskapsadministrasjon med chown Og bedrifter trenger vanligvis rettigheter når det påvirker systemstier eller andre brukere. For eksempel for å gjøre alle filer og underkataloger av /home/test/tux-files bli brukerens eiendom tux Du kan bruke:
> sudo chown -R tux:tux /home/test/tux-filer
Praktiske eksempler på bruk av sudo
La oss se på noen virkelige tilfeller. der sudo Det utgjør forskjellen mellom en tillatelsesfeil og en korrekt administrativ operasjon.
Oppdatering av pakkeindekser i Debian/Ubuntu Uten privilegier vil den gi feil fordi den ikke kan manipulere filer. /var/lib/apt/listsKommandoen:
> apt-get oppdatering
Det vil ende med meldinger om at tillatelse ikke er gitt.SÃ¥ snart du gjentar det slik, forandrer ting seg:
> sudo apt-get update
Systemet vil be om passordet ditt.og hvis brukeren din er autorisert i sudoersOppdateringen vil kjøre uten problemer. Det er et tilbakevendende mønster: tillatelsesfeil uten sudokorrekt utførelse med sudo.
Et annet veldig vanlig eksempel er å kopiere filer til systembanerSom /usr/local/binHvis du prøver å kopiere et skript dit med en enkel:
> cp script.sh /usr/local/bin/
Det er normalt at terminalen klager at du ikke har tillatelse til å skrive til den katalogen. Hvis du gjentar operasjonen ved å legge til sudo:
> sudo cp script.sh /usr/local/bin/
Du vil bli bedt om å oppgi passordet ditt, og etter at du har autentisert,Kopien vil bli laget og registrert som utført med utvidede rettigheter.
Du kan også kombinere sudo med alternativet -u å utføre spesifikke kommandoer som en annen bruker, uten å endre økter eller bruke su. For eksempel:
> hvem
> sudo -u pedro whoami
Den første bestillingen vil vise ditt virkelige brukernavn., mens den andre vil returnere «pedro», som viser at utførelsen er utført av den målbrukeren.
Gi tillatelser uten passord og andre avanserte alternativer
En av de kraftigste tingene med svette Denne funksjonen lar deg justere i hvilken grad et passord kreves og for hvilke spesifikke kommandoer. Noen ganger vil du kanskje at visse brukere skal kunne utføre spesifikke kommandoer uten å måtte oppgi passordet sitt hver gang, for eksempel for automatiserte skript eller avslutningsknapper i et skrivebordsmiljø.
Dette oppnås med etiketten NOPASSWD i reglene for sudoersHvis du for eksempel vil miusuario kan utføre /bin/cat med sudo Uten å kreve et passord kan du legge til en linje:
minbruker ALL = NONPASSWD: /bin/cat
På samme måte kan du tillate den å administrere avstengning av utstyret. uten gjentatt autentisering, og legger til noe sånt som:
minbruker ALL = NONPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
For renere og mer skalerbare konfigurasjonerDet anbefales å bruke aliaser. Et typisk eksempel er å definere en brukergruppe, en kommandogruppe og, om nødvendig, et alias for utførelsesbrukere:
User_Alias ​​​​GROUP = pepe, perico, andres
Cmnd_Alias ​​​​POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias ​​​​WEB = www-data, apache
Med disse definisjonene kan du deretter skrive Mye mer lesbare regler, som for eksempel:
HELE GRUPPE = KRAFT
Dermed enhver bruker som er inkludert i aliaset GRUPO Du vil kunne slå av eller starte datamaskinen på nytt med sudoog du kan justere om du vil kreve et passord eller ikke bruke det NOPASSWD o PASSWDDu kan også begrense bruken til bestemte verter med Host_Alias slik at den bare er gyldig fra et bestemt nettverk.
Beyond NOPASSWDDet finnes andre merkelapper som NOEXEC (for å forhindre at en kommando starter andre programmer med utvidede tillatelser) eller små kuriositeter som å legge til insults til linjen Defaults, så det sudo Jeg kommer til å spøke på engelsk hver gang du ikke klarer å skrive inn passordet.
Alt dette viser at sudoers er mye mer enn en enkel "root-bryter".Når den er riktig konfigurert, lar den deg designe en svært detaljert tillatelsesmodell, skreddersydd til dine behov og med et sikkerhetsnivå som er langt bedre enn det typiske "skriv inn som root og gjør hva du vil".
Å ha et verktøy som sudoriktig forstått og riktig konfigurertDet er nesten obligatorisk på alle moderne Linux-systemer der flere brukere jobber eller der du vil minimere risikoer, selv om du er den eneste brukeren. Å dra nytte av kombinasjonen av sudo, /etc/sudoers, gruppe som sudo o wheel og avanserte tagger som NOPASSWDDu kan oppnå en svært rimelig balanse mellom komfort, fin kontroll og sikkerhet, uten å måtte være konstant limt til en økt. root heller ikke stole utelukkende på flaks.
