Sudo fra en annen ubuntu-bruker. Redigering av sudoers-filen på Ubuntu og CentOS

Hvis du bruker sudo-kommandoen med jevne mellomrom, er jeg sikker på at du har lagt merke til en særegenhet ved hvordan det fungerer, er at etter at du har skrevet inn passordet ditt, kan du bruke sudo flere ganger uten å skrive inn et passord i det hele tatt. Men etter en stund begynner sudo-kommandoen å be om et passord igjen.

Denne oppførselen har ingenting å gjøre med antall kommandoer som utføres via sudo, men det har med tid å gjøre. Ja, som standard vil ikke sudo be deg om et passord på 15 minutter etter at det har blitt bekreftet. Etter disse 15 minuttene vil sudo be deg om å skrive inn passordet ditt på nytt.

Du kan imidlertid endre den beskrevne oppførselen hvis du ønsker det. For å gjøre dette, åpne /etc/sudoers konfigurasjonsfilen ved å bruke følgende kommando:

Sudo visudo

Etter dette må du gå til linjen

Defaults env_reset

og legg til følgende variabel med den nye verdien (i fet skrift) på slutten av denne linjen:

Defaults env_reset ,timestamp_timeout=[ny verdi]

"[ny verdi]"-feltet bør erstattes med antall minutter sudo-økten skal eksistere i. For eksempel brukte jeg verdien 40.

Hvis du vil bli bedt om et passord hver gang du bruker sudo-kommandoen, kan du sette denne variabelen til 0. Og hvis du trenger at sudo-økten skal vare evig, kan du sette denne variabelen til -1.

Vær oppmerksom på at det sterkt frarådes å bruke en verdi på -1 for den aktuelle variabelen.

sudo passord

Som du kanskje har lagt merke til, vises ingen symboler under prosessen for inntasting av passord, ikke engang de vanlige stjernene. Selv om dette ikke er et stort problem, ønsker noen brukere å se minst stjerner av ulike årsaker.

Heldigvis er den tilsvarende passordmodusen ganske enkel å aktivere. Alt du trenger å gjøre er å endre følgende linje i filen /etc/sudoers:

Defaults env_reset

per linje

Defaults env_reset,pwfeedback

Nå vil stjerner vises når du skriver inn passordet ditt mens du bruker sudo-verktøyet.

Noen viktige sudo-kommandoalternativer

Foruten -u-alternativet (som vi diskuterte i begynnelsen av denne artikkelen), er det flere andre viktige sudo-kommandoalternativer som er verdt å nevne. Vi vil diskutere noen av dem i denne delen.

Alternativ -k

La oss si at du bare kjørte en kommando ved hjelp av sudo og skrev inn passordet ditt. Som du vet, vil sudo som standard ikke be om passord de neste 15 minuttene. La oss nå si at du trengte å gi noen tilgang til terminalen din uten muligheten til å bruke sudo. Hva kan gjøres i dette tilfellet?

Heldigvis er det et -k-alternativ for å avslutte sudo-økten med makt. Her er hva som er skrevet om denne parameteren på sudo-manualsiden:

-k, --reset-tidsstempel

Når den brukes uten en kommando, kan du tilbakestille bufrede brukerinnstillinger. Med andre ord, neste gang du ringer sudo vil du bli bedt om et passord. Dette alternativet krever ikke passord og ble lagt til spesielt for å tillate brukere å fjerne sudo-tillatelsesinformasjon fra .logout-filen.

Når det brukes sammen med en kommando eller passordkrevende alternativ, kan du bli bedt om å angi et passord fordi dette alternativet fører til at bufret sudo-tillatelsesinformasjon ignoreres. Som et resultat vil sudo igjen be deg om et passord (hvis det kreves av sikkerhetspolicyen) og vil ikke oppdatere informasjon om bufrede tillatelser.

-s alternativ

Det kan hende at mens du jobber, må du kjøre mange kommandoer som krever root-privilegier, og du vil ikke skrive sudo-prefikset foran hver av dem. Du vil heller ikke konfigurere varigheten av sudo-økten ved å redigere /etc/sudoers-konfigurasjonsfilen.

I dette tilfellet kan du finne alternativet -s nyttig. Dette er beskrivelsen av dette alternativet fra sudo-man-siden:

-s, --skall

Start et kommandoskall hvis binære bane er spesifisert av SHELL-miljøvariabelen, hvis en finnes, eller et kommandoskall hvis binære bane er spesifisert i den anropende brukerens kontoparametere. Hvis en kommando brukes, vil den bli sendt til dette skallet for påfølgende utførelse ved bruk av standard-c-alternativet. Hvis ingen kommando er gitt, vil brukeren få tilgang til det interaktive kommandoskallet som kjører.

Så denne parameteren gjør følgende:

  1. Starter et nytt kommandoskall, banen til den binære filen spesifiseres ved hjelp av miljøvariabelen $SHELL. Hvis miljøvariabelen $SHELL er tom, startes kommandoskallet, banen til den binære filen er spesifisert på linjen som beskriver gjeldende brukerkontoparametere i filen /etc/passwd.
  2. Hvis du sender kommandoen sammen med -s-alternativet (for eksempel kjører sudo -s whoami), blir følgende kommando utført: sudo /bin/bash -c whoami .
  3. Hvis du ikke prøver å utføre noen av kommandoene dine (det vil si at du bare kjører sudo -s), har du tilgang til et interaktivt kommandoskall med root-privilegier.

Merk at -s-alternativet gir deg et kommandoskall med root-privilegier, men uten rotmiljøet - dette skallet vil bruke .bashrc-filen din. I hovedsak betyr dette at når du for eksempel kjører whoami-kommandoen ved å bruke dette skallet, vil det skrive ut brukernavnet ditt i stedet for root.

Alternativ -i

Alternativet -i ligner på -s-alternativet vi nettopp diskuterte. Det er imidlertid noen forskjeller mellom dem. En av hovedforskjellene er at -i-alternativet også gir deg root-brukerens miljø, så din (brukerens) .bashrc-fil ignoreres. Dette kan sammenlignes med å bruke root-brukerkontoen uten å logge på som root. I tillegg trenger du ikke skrive inn root-passordet ditt.

Viktig notat: Husk at det også er en su-kommando som lar deg kjøre som andre brukere (som standard blir du root). Denne kommandoen krever root-brukerens passord. For å unngå å måtte skrive inn brukerens passord, kan du også bruke sudo-prefikset (det vil si sudo su-kommandoen); i dette tilfellet må du skrive inn passordet ditt. Imidlertid har su- og sudo su-kommandoene noen forskjeller; For å forstå dem, så vel som for å bli kjent med sammenligningen av disse kommandoene med sudo -i-kommandoen, referer bare til diskusjonen tilgjengelig på denne lenken.

Konklusjon

Jeg håper at du i det minste har en grunnleggende forståelse av hvordan sudo-kommandoen fungerer, samt hvordan du endrer standardoppførselen. Prøv selv modifikasjonene til /etc/sudoers, og sjekk ut diskusjonen (lenket i forrige avsnitt) hvis du vil vite litt mer om denne kommandoen.

Siden antikken har mange blitt forvirret av mangfoldet av sikkerhetsalternativer når de utfører operasjoner med maksimale privilegier. For eksempel, i den offisielle Ubuntu-dokumentasjonen anbefales det å bruke noe sånt som sudo nano som en redigeringskommando, og i en rekke amatørmanualer (i stil med "5 kommandolinjetriks som vil overraske bestemoren din") for å få et rotskall. foreslås å skrive sudo su - jeg skal prøve å forklare hvorfor denne tilstanden virker feil for meg.

Historisk sett var den eneste universelle måten å utføre en kommando på som en annen bruker på Unix med su-programmet. Lansert uten parametere, ba den om superbrukerpassordet og, hvis det lykkes, erstattet den ganske enkelt det nåværende brukernavnet med root, og la nesten alle miljøvariablene fra den gamle brukeren (bortsett fra PATH, USER og et par til, se man su fra distribusjonen din ). Det ville være mer riktig å kjøre det som su - i så fall vil skallet også motta riktig miljø. Med alternativet -c kan du kjøre kommandoen: su -c "vim /etc/fstab" .

I dette tilfellet måtte pålitelige brukere huske root-passordet, og alle brukere oppført i "wheel"-gruppen (det vil si i gruppen hvis medlemmer kunne kjøre su-kommandoen og bli en superbruker) hadde samme ubegrensede tilgang til hele systemet, som var et alvorlig sikkerhetsproblem.

Så kom sudo-kommandoen og det var et gjennombrudd. Nå kan administratoren spesifisere en liste over tillatte kommandoer for hver bruker (eller gruppe av brukere), filer tilgjengelig for redigering, spesielle miljøvariabler og mye mer (all denne skjønnheten styres fra /etc/sudoers, se man sudoers fra distribusjonen din) . Når den startes, ber sudo brukeren om sitt eget passord, ikke root-passordet. Et fullt skall kan fås ved å bruke "sudo -i"

Spesielt å merke seg er den spesielle kommandoen sudoedit, som trygt starter editoren spesifisert i miljøvariabelen $EDITOR. Med et mer tradisjonelt opplegg ble redigering av filer gjort noe slikt:
sudo vi /etc/fstab

Lansert på denne måten, arvet vi skallet med ubegrensede rettigheter og gjennom:! brukeren kunne kjøre hvilken som helst kommando (med mindre, selvfølgelig, admin tok seg av dette på forhånd) og åpne en hvilken som helst fil.

Sudoedit sjekker om denne brukeren kan endre en gitt fil, kopierer deretter den spesifiserte filen til en midlertidig katalog, åpner den i en editor (som arver rettighetene til brukeren, ikke root), og etter redigering, hvis filen har blitt endret, kopierer den med spesielle forholdsregler tilbake.

På Debian-baserte distribusjoner har ikke root-brukeren et passord; i stedet må alle administrative handlinger utføres gjennom sudo eller dens grafiske ekvivalent gksudo. Som en fullstendig erstatning for su , bør sudo være den eneste kommandoen for å bytte mellom brukere, men som det ble sagt i begynnelsen, er dette ikke tilfelle for øyeblikket, og av en eller annen grunn finner alle opp ville sekvenser av sudo, su, vi og streker.

Derfor foreslår jeg at alle husker en gang for alle:

Etter den første publiseringen av dette notatet ble jeg stilt flere spørsmål. Fra svarene klarte vi å lage en mini-FAQ.

Spørsmål: Hvordan kan jeg bruke sudo til å gjøre su -c "echo 1 > /etc/privileged_file"? sudo echo 1 /etc/privileged_file klager over "tillatelse nektet"
A: Dette skjer fordi bare ekko-kommandoen utføres med forhøyede rettigheter, og resultatet blir omdirigert til filen med rettighetene til en vanlig bruker. For å legge til noe i privileged_file, må du kjøre følgende kommando:
$ ekko 1| sudo tee -a privileged_file >/dev/null
Eller bli midlertidig en rot:
$ sudo -i # echo 1 > privileged_file # exit $
Spørsmål: sudo -i er lengre enn su - , men det ser ikke ut til å være noen forskjell mellom dem, hvorfor skrive ut mer?
A: sudo har flere fordeler som er verdt bryet med å skrive noen ekstra tegn:

  • som standard registrerer sudo all brukeraktivitet i authpriv syslog-kanalen (som regel plasseres resultatet i filen /var/log/auth.log), og i så fall må en lignende funksjon aktiveres ved å sette en spesiell parameter i innstillingsfilen, som varierer fra distribusjon til distribusjon (SULOG_FILE i /etc/login.defs på Ubuntu Linux, /etc/login.conf og /etc/pam.d/su på FreeBSD, etc.)
  • i tilfelle su kan ikke systemadministratoren begrense kommandoene som utføres av brukere, men i sudo kan han det
  • hvis brukeren skulle bli fratatt administrative rettigheter, i tilfelle su, etter å ha fjernet ham fra hjulgruppen, må han glemme root-passordet; hvis sudo brukes, er det nok å fjerne ham fra den tilsvarende gruppen (for eksempel, wheel eller admin) og/eller sudoers-filen, hvis den ble ytterligere tilpasset.
Spørsmål: Jeg er den eneste brukeren på systemet mitt og jeg er vant til su, hvorfor trenger jeg sudo?
A: Jeg vil svare på spørsmålet med et spørsmål: hvis det er riktig sudo, hvorfor bruke den utdaterte suen?

Hver eier av en servermaskin vet at du ikke bør stole på full tilgang (root) til alle.
Vi kjenner konsekvensene av noen av disse øyeblikkene. Og for å gjøre livet enklere, Unix kjerne team implementert sudo.
Et verktøy som gir brukere rettigheter til å utføre kommandoer med superbrukerrettigheter. For eksempel lar det junioradministratorer bruke visse kommandoer for å utføre oppgaver innenfor deres kompetanse.

Superbrukerrot- en administratorkonto i Unix (samt Unix-lignende OS) med identifikator 0, som har tillatelse til å utføre alle kommandoer uten unntak.

Installert fra repositories ved hjelp av en pakkebehandling: apt-get install sudo eller nam installer sudo.

sudo-konfigurasjon lar deg spesifisere en bruker, brukergruppe, verter og om et passord kreves eller ikke ved kjøring.
For eksempel å utføre en kommando på vegne av en annen bruker.

Kjør Midnight Commander som superbruker

Åpne i et tekstredigeringsprogram nano fil nginx.config fra brukeren Anton.

Sudo -u anton nano /etc/nginx/nginx.config

Konfigurasjonsfilen sudoers ligger i katalogen /etc/.
Bruk kommandoen for å redigere konfigurasjonsfilen visudo.

Du bør ikke endre filen /etc/sudoers med et tekstredigeringsprogram, fordi... Ved lagring sjekkes ikke syntaksen, slik tilfellet er med visudo.

Brukerrettighetsmal i konfigurasjonsfilen /etc/sudoers

User/%group ALL/host_name/+machine_group = ALL/comma-separated_commands (ekstra parametere):

Lar brukeren anton kjøre alle kommandoer på alle verter (med passordforespørsel)

Anton ALLE=(ALLE) ALLE

Lar administratorgruppen kjøre alle kommandoer på Alpha-maskinen (uten å angi passord)

%admins Alpha = ALLE NOPASSWD: ALLE

Som standard, når du utfører kommandoer via sudo, må du logge på med et passord. Du kan deaktivere autorisasjon ved å bruke parameteren NOPASSWD)

Levert av sudo og gruppering av kommandoer i aliaser.
Kombinere kommandoer for arbeid med nettverket til én enhet NETTVERK

Cmnd_Alias ​​NETTVERK = /sbin/rute, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial , / sbin/iwconfig, /sbin/mii-tool

De kan brukes for eksempel til begrensning av rettigheter bruker eller gruppe for å utføre kommandoer som påvirker tjenesten.

Tillat at alle kommandoer brukes av Egor-brukeren og devops-gruppen, bortsett fra de i NETTVERK-gruppen

Egor ALLE = ALLE, !NETTVERKING %devopser ALLE = ALLE, !NETTVERKING

Vi har sett på noen av funksjonaliteten til sudo; for detaljert informasjon, bruk man-sider fra distribusjonen din.

Siden antikken har mange blitt forvirret av mangfoldet av sikkerhetsalternativer når de utfører operasjoner med maksimale privilegier. For eksempel, i den offisielle Ubuntu-dokumentasjonen anbefales det å bruke noe sånt som sudo nano som en redigeringskommando, og i en rekke amatørmanualer (i stil med "5 kommandolinjetriks som vil overraske bestemoren din") for å få et rotskall. foreslås å skrive sudo su - jeg skal prøve å forklare hvorfor denne tilstanden virker feil for meg.

Historisk sett var den eneste universelle måten å utføre en kommando på som en annen bruker på Unix med su-programmet. Lansert uten parametere, ba den om superbrukerpassordet og, hvis det lykkes, erstattet den ganske enkelt det nåværende brukernavnet med root, og la nesten alle miljøvariablene fra den gamle brukeren (bortsett fra PATH, USER og et par til, se man su fra distribusjonen din ). Det ville være mer riktig å kjøre det som su - i så fall vil skallet også motta riktig miljø. Med alternativet -c kan du kjøre kommandoen: su -c "vim /etc/fstab" .

I dette tilfellet måtte pålitelige brukere huske root-passordet, og alle brukere oppført i "wheel"-gruppen (det vil si i gruppen hvis medlemmer kunne kjøre su-kommandoen og bli en superbruker) hadde samme ubegrensede tilgang til hele systemet, som var et alvorlig sikkerhetsproblem.

Så kom sudo-kommandoen og det var et gjennombrudd. Nå kan administratoren spesifisere en liste over tillatte kommandoer for hver bruker (eller gruppe av brukere), filer tilgjengelig for redigering, spesielle miljøvariabler og mye mer (all denne skjønnheten styres fra /etc/sudoers, se man sudoers fra distribusjonen din) . Når den startes, ber sudo brukeren om sitt eget passord, ikke root-passordet. Et fullt skall kan fås ved å bruke "sudo -i"

Spesielt å merke seg er den spesielle kommandoen sudoedit, som trygt starter editoren spesifisert i miljøvariabelen $EDITOR. Med et mer tradisjonelt opplegg ble redigering av filer gjort noe slikt:
sudo vi /etc/fstab

Lansert på denne måten, arvet vi skallet med ubegrensede rettigheter og gjennom:! brukeren kunne kjøre hvilken som helst kommando (med mindre, selvfølgelig, admin tok seg av dette på forhånd) og åpne en hvilken som helst fil.

Sudoedit sjekker om denne brukeren kan endre en gitt fil, kopierer deretter den spesifiserte filen til en midlertidig katalog, åpner den i en editor (som arver rettighetene til brukeren, ikke root), og etter redigering, hvis filen har blitt endret, kopierer den med spesielle forholdsregler tilbake.

På Debian-baserte distribusjoner har ikke root-brukeren et passord; i stedet må alle administrative handlinger utføres gjennom sudo eller dens grafiske ekvivalent gksudo. Som en fullstendig erstatning for su , bør sudo være den eneste kommandoen for å bytte mellom brukere, men som det ble sagt i begynnelsen, er dette ikke tilfelle for øyeblikket, og av en eller annen grunn finner alle opp ville sekvenser av sudo, su, vi og streker.

Derfor foreslår jeg at alle husker en gang for alle:

Etter den første publiseringen av dette notatet ble jeg stilt flere spørsmål. Fra svarene klarte vi å lage en mini-FAQ.

Spørsmål: Hvordan kan jeg bruke sudo til å gjøre su -c "echo 1 > /etc/privileged_file"? sudo echo 1 /etc/privileged_file klager over "tillatelse nektet"
A: Dette skjer fordi bare ekko-kommandoen utføres med forhøyede rettigheter, og resultatet blir omdirigert til filen med rettighetene til en vanlig bruker. For å legge til noe i privileged_file, må du kjøre følgende kommando:
$ ekko 1| sudo tee -a privileged_file >/dev/null
Eller bli midlertidig en rot:
$ sudo -i # echo 1 > privileged_file # exit $
Spørsmål: sudo -i er lengre enn su - , men det ser ikke ut til å være noen forskjell mellom dem, hvorfor skrive ut mer?
A: sudo har flere fordeler som er verdt bryet med å skrive noen ekstra tegn:

  • som standard registrerer sudo all brukeraktivitet i authpriv syslog-kanalen (som regel plasseres resultatet i filen /var/log/auth.log), og i så fall må en lignende funksjon aktiveres ved å sette en spesiell parameter i innstillingsfilen, som varierer fra distribusjon til distribusjon (SULOG_FILE i /etc/login.defs på Ubuntu Linux, /etc/login.conf og /etc/pam.d/su på FreeBSD, etc.)
  • i tilfelle su kan ikke systemadministratoren begrense kommandoene som utføres av brukere, men i sudo kan han det
  • hvis brukeren skulle bli fratatt administrative rettigheter, i tilfelle su, etter å ha fjernet ham fra hjulgruppen, må han glemme root-passordet; hvis sudo brukes, er det nok å fjerne ham fra den tilsvarende gruppen (for eksempel, wheel eller admin) og/eller sudoers-filen, hvis den ble ytterligere tilpasset.
Spørsmål: Jeg er den eneste brukeren på systemet mitt og jeg er vant til su, hvorfor trenger jeg sudo?
A: Jeg vil svare på spørsmålet med et spørsmål: hvis det er riktig sudo, hvorfor bruke den utdaterte suen?

Sudo er et program for Unix-aktig operativsystemer som lar brukere kjøre programmer med sikkerhetsrettighetene til en annen bruker, som standard superbruker.

I motsetning til den koblede kommandoen su, må brukere oppgi passordet sitt for autentisering. Etter autentisering, hvis konfigurasjonsfilen, som vanligvis ligger i /etc/sudoers, lar deg gi brukeren tilgang, utfører systemet den nødvendige kommandoen. Konfigurasjonsfilen gir tilgangstillatelse, inkludert lar deg utføre kommandoer kalt fra terminalen; lar deg be om passord for hver bruker eller gruppe; lar deg kreve at et passord legges inn på nytt hver gang, eller aldri kreve at et passord oppgis i det hele tatt. Den kan også konfigureres til å tillate at argumenter eller flere kommandoer sendes.

Med enkle ord, for å utføre visse handlinger i Linux, må vi enten skrive inn et passord eller logge på som superbruker (su).
La oss se på et enkelt eksempel for å kunne slette\kopi\erstatte systemfiler i Ubuntu, må du åpne filbehandleren Nautilus på vegne av superbrukeren.
For å gjøre dette, skriv inn i terminalen ( ctrl+alt+T). Vær forsiktig, terminalen skiller mellom store og små bokstaver.

sudo nautilus

Følgende tekst vises da:

passord for bruker: /skriv inn passordet ditt her, vær oppmerksom på at ingen tegn vil vises/

På denne måten har du åpnet filbehandleren Nautilus på vegne av superbrukeren og nå kan du trygt (eller ikke så mye) tukle med systemfiler ^^

Neste eksempel. For eksempel må du tukle med innholdet i en systemfil ved hjelp av et tekstredigeringsprogram, men du kan ikke gjøre endringer i den. Åpne en terminal og skriv inn:

sudo gedit

På denne måten har du åpnet et tekstredigeringsprogram med superbrukerrettigheter.

Et annet eksempel: la oss si at du kjører et stort antall kommandoer og å skrive inn et passord hver gang rett og slett ikke passer deg. Du kan åpne en superbrukerøkt i terminalen som vil spare deg for disse ulempene.
Skriv inn i terminalen:

sudo su

Skriv deretter inn passordet ditt, superbrukerøkten er åpen. Takk for din oppmerksomhet