Kör som root. Använda kommandona sudo su


SudoÄr ett program för Unix-liknande operativsystem, som tillåter användare att köra program med säkerhetsbehörigheterna för en annan användare, superanvändare som standard.

Till skillnad från det länkade kommandot su måste användare ange sitt lösenord för autentisering. Efter autentisering, om konfigurationsfilen som vanligtvis finns i / etc / sudoers, låter dig ge användaren åtkomst, kör systemet det önskade kommandot. Konfigurationsfilen ger åtkomstbehörigheter, inklusive att tillåta att utföra kommandon som anropas från terminalen; låter dig begära Lösenord för varje användare eller grupp; låter dig kräva att du anger ditt lösenord igen varje gång, eller aldrig kräva att du anger ett lösenord alls. Den kan också konfigureras för att tillåta överföring av argument eller flera kommandon.

Enkelt uttryckt, för att utföra vissa åtgärder i Linux, måste vi antingen ange ett lösenord eller logga in som en superanvändare (su).
Låt oss överväga ett enkelt exempel, för att kunna ta bort \ kopiera \ ersätta systemfiler i Ubuntu måste du öppna filhanteraren Nautilus på uppdrag av superanvändaren.
För att göra detta, skriv in i terminalen ( ctrl + alt + T). Var försiktig, terminalen är skiftlägeskänslig.

sudo nautilus

Då kommer följande text upp:

lösenord för användare: / ange ditt lösenord här, notera att inga tecken kommer att visas /

Du har alltså öppnat filhanteraren Nautilus på uppdrag av superanvändaren och nu kan du säkert (eller inte) gå och plocka systemfiler ^^

Nästa exempel. Till exempel måste du gräva i innehållet i systemfilen med en textredigerare, men du kan inte göra ändringar i den. Öppna en terminal och skriv in:

sudo gedit

Du har alltså öppnat en textredigerare med superanvändarrättigheter.

Ett annat exempel är om du till exempel kommer att utföra ett stort antal kommandon och varje gång du anger ett lösenord så gillar du det helt enkelt inte. Du kan öppna en superanvändarsession i terminalen som kommer att rädda dig från dessa olägenheter.
Vi går in i terminalen:

sudo su

Sedan anger vi vårt lösenord, superanvändarsessionen är öppen. Tack för uppmärksamheten

Kommandot sudo är mycket viktigt för att hantera behörigheter i operativsystemet Linux. Tack vare detta lilla kommando kan du ge behörighet att utföra vissa åtgärder på uppdrag av administratören till andra användare, utan att ge dem själva superanvändarlösenordet. Dessutom behöver du inte alltid sitta under superanvändarkontot för att ibland utföra administrativa åtgärder.

Det verkar som ett så litet team, med ett minimum av möjligheter och den enklaste användningen, men i själva verket kan det göra mycket mer. I den här artikeln kommer vi att titta på hur man konfigurerar sudo i linux för att kontrollera åtkomst till systemfunktioner och användarmöjligheter.

Innan vi går vidare till att konfigurera åtkomst till sudo-verktyget, låt oss ta en titt på hur det fungerar. På Linux finns det två sätt att få administratörsrättigheter. Du kan byta till root-användaren med hjälp av su-kommandot, eller så kan du skicka det önskade kommandot till sudo-verktyget i parametern, som kommer att köra det som administratör. Dessutom är den andra metoden att föredra, eftersom du inte kommer att glömma vad du använder och inte kommer att göra något överflödigt.

Kommandonamnet betyder ersätta användare gör eller superanvändare gör. Verktyget låter dig köra program på uppdrag av en annan användare, men oftast på uppdrag av roten. Verktyget utvecklades redan 1980 av Bob Cogshel och Cliff Spencer. Under denna tid har många utvecklare ändrats och många funktioner har lagts till.

Sudo fungerar tack vare SUID-åtkomstflaggan. Om denna flagga är inställd för ett program, så exekveras den inte på uppdrag av användaren som startade det, utan på uppdrag av ägaren, förutsatt att sudo-filen tillhör, så exekveras verktyget som root. Sedan läser hon sina inställningar, frågar efter användarens lösenord och bestämmer sig för om han kan få utföra kommandon som administratör. Om så är fallet exekveras kommandot som skickas i parametern.

Nu när du känner till teorin, låt oss ta en titt på hur man ställer in sudo på Linux.

Linux sudo-installation

Alla sudo-inställningar finns i / etc / sudores. Här kan du konfigurera många parametrar, allt från vem som får utföra kommandon på uppdrag av superanvändaren och slutar med att begränsa uppsättningen av tillgängliga kommandon.

För att öppna en fil för redigering, skriv följande kommando som superanvändare:

Du kan också ange i vilken textredigerare du vill redigera konfigurationsfilen:

REDAKTÖR = nano visudo

Därefter kommer vi att titta på de mest intressanta inställningarna som du kan ställa in i den här filen. Men först, låt oss ta en titt på den grundläggande syntaxen för filen. Den består av två typer av strängar, dessa är alias, som låter dig skapa listor med användare och flaggor, såväl som själva reglerna som bestämmer hur sudo-kommandot kommer att bete sig. Aliassyntaxen ser ut så här:

skriv alias_name = artikel 1, artikel 2, artikel 3

Typen anger vilken typ alice ska skapas, namnet är namnet som kommer att användas, och listan över element är de element som kommer att antydas när man refererar till detta namn.

Beskrivningen av behörigheter för användare har en något annorlunda syntax:

användarvärd = (other_user: group) kommandon

Användare anger användaren eller gruppen som vi skapar regeln för, värden är den dator som denna regel kommer att gälla för. En annan användare - under sken av vilken användare den första kan utföra kommandon, och den sista - de tillåtna kommandona. Ett alias kan användas istället för någon av parametrarna. Nu, ställ in sudo på Debian och andra distributioner.

huvudparametrar

Alias ​​​​Defaults låter dig ställa in standardparametrar för verktyget, som vi kommer att överväga i det här avsnittet. Detta alias börjar med ordet Defaults, följt av flaggans namn. Om det finns en symbol framför namnet betyder det att flaggan måste slås på, annars måste den stängas av:

Inaktivera introduktion vid första användningen:

Default! Föreläsning

Superanvändare kan inte köra sudo:

Standardvärden! Root_sudo

Nu om du försöker köra sudo sudo så fungerar ingenting:

Ändra hemkatalogen för målanvändaren, som standard förblir den aktuella användarens mapp som hemkatalog:

Standardinställningar set_home

Spara listan över grupper för den aktuella användaren:

Standardvärden! Preserve_groups

Fråga efter superanvändarlösenord istället för användarlösenord:

Ställ in antalet lösenordsförsök innan sudo avslutas, standard är 3:

Standardvärden passwd_tries = 5

Antalet minuter som kommer att förflyta innan sudo ber om lösenordet igen, som standard 5. Om inställt på 0 kommer lösenordet alltid att frågas, oavsett hur länge sedan du använde verktyget:

Standardtidsstämpel_timeout = 10

Nästa parameter ställer in antalet minuter som sudo kommer att vänta på att lösenordet ska matas in igen om det angetts felaktigt:

Standardvärden passwd_timeout = 10

Du kan ändra meddelandet som kommer att visas när du uppmanas att ange ett lösenord:

Defaults passprompt = "Ditt lösenord:"

Du kan ange en annan användare, inte root, från vilken alla kommandon kommer att köras, för denna användning:

Defaults runas_default = "användare"

Du kan logga alla försök att ansluta till sudo:

Standardloggfil = / var / log / sudo

Sedan försöker vi kontrollera loggens funktion:

sudo cat / var / log / sudo

Dessa var alla de mest intressanta sudo-konfigurationsalternativen du kan behöva, härnäst ska vi titta på hur man ställer in sudo-behörigheter för användare.

Konfigurera sudo-användare

Vi har redan övervägt syntaxen ovan för att konfigurera åtgärder för användare, här är allt mer komplicerat än med alias, men du kan ta reda på det. Låt oss till exempel tillåta vilken användare som helst att använda sudo, från vilken värd som helst, och köra alla kommandon:

ALLA ALLA = (ALLA) ALLA

Ett sådant kommando är väldigt osäkert, det tillåter alla och allt. Den första är ALLA - för att tillåta alla användare, den andra är ALLA - för alla värdar, den tredje är ALLA - för att tillåta alla användare att logga in, och den fjärde är för att tillåta att alla kommandon körs. Men en annan konstruktion används mycket oftare:

% hjul ALLA = (ALLA) ALLA

Betyder samma sak som den tidigare, bara här tillåter vi inte alla användare att använda sudo, utan bara de som är medlemmar i hjulgruppen.

% hjul ALLA = (rot) ALLA

Här har vi redan begränsat det möjliga valet av användare till endast rotanvändaren. Du kan också ange en användargrupp på uppdrag av vilken han kan utföra kommandon:

% hjul ALLA = (root: admins) ALLA

Det betyder att du kan köra kommandot som root eller en annan användare från administratörsgruppen. Vi kan också specificera de kommandon som användaren kan utföra. Till exempel:

% hjul ALLA = (rot) / bin / mount, / bin / umount

Användaren kan endast utföra monterings- och umount-kommandona som superanvändare. Nu för att göra det ännu mer intressant kan användaren köra mount och umount utan lösenord, och alla andra kommandon med ett lösenord:

% hjul ALLA = (rot) ALLA
% hjul ALLA = (rot) NOPASSWD: / bin / mount, / bin / umount

Du kan också begränsa användare efter värdar, till exempel tillåter vi användningen av sudo endast från host1:

% hjul värd1 = (rot) ALLA

Det återstår att se hur man använder alias. Alias ​​kan vara av följande typer:

  • User_Alias- aliaset för de användare som kommer att använda sudo;
  • Runas_Alias- alias för användare på uppdrag av vilka kommandona kommer att utföras;
  • Host_Alias- värdalias;
  • Cmnd_Alias- kommandoalias;

Låt oss till exempel skapa fyra alias och tillämpa dem i vår regel:

User_Alias ​​​​Användare = användare1, användare2, användare3
Runas_Alias ​​​​Admins = root, admin
Host_Alias ​​​​Hosts = host1, host2
Cmd_Alias ​​​​Cmds = / bin / mount, / bin / umount

Users Hosts = (Admins) Cmds

Detta innebär att användare i användarlistan kommer att kunna utföra Cmds-kommandon som Amdins-användare på Hosts-värdar.

Det finns fortfarande några ord kvar att säga om flaggor. NOPASSWD-flaggan talar om för dig att inte be om ett lösenord när du kör denna regel. Till exempel, för att tillåta alla användare att köra mount-kommandot med sudo utan lösenord:

ALLA ALLA = (root) NOPASSWD: / bin / montera

Du kan också förbjuda exekvering av detta speciella kommando helt och hållet med hjälp av NOEXEC-flaggan:

ALLA ALLA = (root) NOEXEC / bin / mount

Du kan kontrollera om filen / etc / sudores var korrekt konfigurerad och se alla skapade regler med kommandot:

Alla installerade flaggor och inställningar, samt behörigheter för denna användare, visas här.

Slutsatser

I den här artikeln tittade vi på hur sudo-installationen görs på linux. Som du kan se, trots att detta är ett väldigt enkelt verktyg, döljer det många användbara inställningar som du kan använda på ditt system. Om du har några frågor, fråga i kommentarerna!

Vilket är det rätta sättet att använda su eller sudo?

Under lång tid har många blivit förvirrade av de olika säkerhetsalternativen när de utför operationer med maximala privilegier. Till exempel rekommenderar den officiella Ubuntu-dokumentationen att du använder något liknande sudo nano , och i många amatörmanualer (i stil med "5 kommandoradsknep som kommer att överraska din mormor") för att få root "nytt skal det rekommenderas att skriva sudo su - ... Jag ska försöka förklara varför detta tillstånd förefaller mig vara fel.

OCH Historiskt sett var det enda universella sättet att utföra ett kommando som en annan användare på Unix med su-programmet. Lanserades utan parametrar, bad den om superanvändarlösenordet och, om det lyckades, ändrade den helt enkelt det nuvarande användarnamnet till root, vilket lämnade nästan alla miljövariabler från den gamla användaren (förutom PATH, USER och ett par till, se. man su från din distribution). Det var mer korrekt att köra det som su - - i det här fallet fick skalet också rätt miljö. Med parameter-c du kan köra kommandot: su -c "vim / etc / fstab".

Samtidigt var betrodda användare tvungna att komma ihåg root-lösenordet "och alla användare som listades i hjulgruppen (det vill säga i en grupp vars medlemmar kunde utföra su-kommandot och bli en superanvändare) hade samma obegränsade tillgång till hela systemet , vilket var ett allvarligt säkerhetsproblem.

Sedan kom sudo-kommandot och det blev ett genombrott. Nu kunde administratören specificera listan över tillåtna kommandon för varje användare (eller användargrupp), filer tillgängliga för redigering, speciella miljövariabler och mycket mer (all denna prakt styrs från/ etc / sudoers, se man sudoers från din distribution). När du kör sudo frågar den användaren om sitt eget lösenord, inte root-lösenordet. Ett komplett skal kan erhållas med " sudo -i"

Särskilt nämns det dedikerade teamet sudoedit som säkert startar redigeraren som anges i miljövariabeln$ REDAKTÖR ... I ett mer traditionellt schema gjordes filredigering ungefär så här:

sudo vi / etc / fstab

Vi lanserade på detta sätt ärver ett skal med obegränsade rättigheter och via:! användaren kunde köra vilket kommando som helst (såvida inte administratören hade tagit hand om detta i förväg) och öppna vilken fil som helst.

sudoedit kontrollerar om denna användare kan ändra den givna filen, kopierar sedan den angivna filen till en tillfällig katalog, öppnar den i editorn (som ärver användarrättigheter, inte root "a), och efter redigering, om filen har ändrats, kopiera den tillbaka med speciella försiktighetsåtgärder...

På Debian-baserade distributioner har root-användaren inget lösenord, istället måste alla administrativa åtgärder göras via sudo eller dess grafiska motsvarighet gksudo ... Komplett ersättning su, sudo bör vara det enda kommandot för att växla mellan användare, men, som det sades i början, är det inte så för tillfället och av någon anledning uppfinner alla vilda sekvenser av sudo, su, vi och bindestreck.

Därför uppmanar jag alla att komma ihåg en gång för alla:

Efter första publiceringen av denna anteckning fick jag flera frågor. Av svaren visade det sig göra en mini-FAQ.

F: hur man använder sudo för att görasu -c "echo 1> / etc / privileged_file"? sudo echo 1 / etc / privileged_filesvär på "tillstånd nekad"

S: Detta beror på att endast echo-kommandot körs med förhöjda privilegier, och resultatet omdirigeras till en fil med normala användarbehörigheter. För att lägga till något till privileged_filen måste du köra följande kommando:

$ echo 1 | sudo tee -a privileged_file> / dev / null

Eller tillfälligt bli en rot:

$ sudo -i

# echo 1> privileged_file

# utgång

F: sudo -i är längre än su -, och det verkar inte vara någon skillnad mellan dem, varför skriva ut mer?

S: sudo har flera fördelar som du bör bry dig om att skriva in några extra tecken:

  • som standard skriver sudo all användaraktivitet till authpriv syslog-kanalen (som regel läggs resultatet i filen /var/log/auth.log), och en liknande funktion måste inkluderas i su genom att ställa in en speciell parameter i filen konfigurationsfil som skiljer sig från distribution till distribution (SULOG_FILE i /etc/login.defs på Ubuntu Linux, /etc/login.conf och /etc/pam.d/su på FreeBSD, etc.)
  • i fallet med su kan systemadministratören inte begränsa de kommandon som körs av användare, och i sudo kan han
  • om en användare skulle fråntas administrativa rättigheter, i fallet med su, efter att ha tagit bort honom från hjulgruppen, måste han glömma root-lösenordet; om sudo används räcker det att ta bort honom från motsvarande grupp (till exempel, wheel eller admin) och/eller sudoers-filen, om den har anpassats ytterligare.

F: Jag är den enda användaren på mitt system och jag är van vid su, varför behöver jag sudo?

S: Jag ska besvara frågan med en fråga: om det finns en giltig sudo, varför använda den föråldrade su?

Lite om sudo själv, från wikipedia. sudo(eng. superanvändare gör , bokstavligen "utför på uppdrag av superanvändare") Är ett program utvecklat för att hjälpa systemadministratören och låter dig delegera vissa privilegierade resurser till användare med en arbetslogg. Huvudtanken är att ge användarna så få rättigheter som möjligt, men samtidigt exakt så mycket som behövs för att lösa de tilldelade uppgifterna.

Kommandot sudo tillåter användare att köra kommandon som root eller andra användare. Reglerna som används av sudo för att bestämma om åtkomst ska beviljas finns i filen / etc / sudoers; deras språk och användningsexempel finns detaljerade i sudoers (5).

För att redigera filen / etc / sudoers, använd visudo-programmet, som kontrollerar syntaxen och därmed undviker regelfel.

I de flesta fall kommer att konfigurera sudo väl göra det onödigt att arbeta som superanvändare.

Som standard är root-kontot i Ubuntu inaktiverat och root har helt enkelt inget lösenord. Alla administrativa uppgifter görs via sudo. Som standard ges den första användaren som skapas under installationen rätten att köra sudo. Alla andra är vanliga användare som standard.

Sudo är ett mycket flexibelt verktyg som låter dig konfigurera rättigheterna att utföra administrativa åtgärder för varje användare separat. Tillåt till exempel en att starta om en server och ge den andra möjligheten att ändra åtkomsträttigheter till filer och mappar. Öppna filen / etc / sudoers. Detta kan göras antingen genom att utfärda ett kommando för att öppna filen i din favorittextredigerare, till exempel:

# nano / etc / sudoers

eller med hjälp av visudo-verktyget:
# visudo

Den senare metoden öppnar filen / etc / sudoers i standardanvändarredigeraren, eller om det inte anges, i vi-redigeraren. Fördelen med denna metod är att filen kommer att kontrolleras mot syntaxen när den sparas.

Den enklaste konfigurationen ser ut så här:

Defaults env_reset

# Specifikation av användarrättigheter
root ALLA = (ALLA) ALLA
användare ALLA = (ALLA) ALLA

Denna konfiguration ger användaren alla rättigheter för rotanvändaren när han kör kommandot sudo. Defaults env_reset tillåter fullständigt alla användarvariabler när kommandon körs som root. Detta är bra ur säkerhetssynpunkt, men det kan ibland orsaka problem. Du kan aktivera privata variabler för att användas av en grupp eller individ genom att lägga till en rad så här:
Standard:% admin! Env_reset

som kommer att spara miljövariabler för alla användare av administratörsgruppen, eller:
Standard: användare env_keep = TZ

som kommer att spara TZ-variabeln för användaren.

Om servern administreras av en grupp människor är det vettigt att göra så här:
% admin ALLA = (ALLA) ALLA

Som du kanske gissar ger denna post root-åtkomst till alla medlemmar i administratörsgruppen.

Du kan konfigurera för varje specifik användare endast åtkomst till specifika kommandon. Till exempel:
användare ALL = / bin / mount, / bin / kill

kommer att ge användaren behörighet att köra mount och kill-kommandon från vilken maskin som helst, och:
user2 mydebiancomp = / sbin / modprobe

kommer att ge user2 tillstånd att köra modprobe från mydebiancomp. Jag tror att syntaxen är tydlig:
användarvärd = kommando

där kommandot skrivs med hela sökvägen. För en grupp är allt sig likt, bara "%"-tecknet läggs till.

III. Avancerade sudo-inställningar.

Det är mycket bekvämt att skapa en aliasgrupp när du konfigurerar sudo. För att inte köra in ständigt upprepade kommandon, användare och värdar kan vi samla dem i grupper och upprätta regler för varje grupp av alias. Till exempel så här:

Cmnd_Alias ​​​​command_alias = kommando1, kommando2, ... // kommandoalias
Host_Alias ​​värd_alias = värdnamn1, värdnamn2, ... // värdalias
User_Alias ​​​​user_alias = användare1, användare2, ... // användaralias

Det är också möjligt att utföra ett kommando på uppdrag av en annan användare. Till exempel, med denna post:
användare ALL = (användare2, användare3) / usr / bin / ark

användaranvändare kan utföra arkkommandot som användare2 eller användare3 med hjälp av u-tangenten, till exempel:
$ sudo -u user2 ark

Som standard kommer sudo ihåg lösenord i 5 minuter. Om du inte vill ha detta kan du för varje användare, grupp eller alias ställa in en separat regel, till exempel när:
Standardvärden: användarens timestamp_timeout = 0

halvanvändarens lösenord kommer inte att komma ihåg alls, men om:
Standardvärden: user timestamp_timeout = -1

kommer att komma ihåg under hela drifttiden.

Sudo utan lösenord är också möjligt. För detta finns en liknande konstruktion:
användare myubuntucomp = NOPASSWD: / bin / döda

vilket gör det möjligt för användare från myubuntucomp-värden att använda kill utan att be om ett lösenord. Infoga dina egna värden, som ALL istället för värdnamnet och kommandot, så att användaren aldrig kan ange ett lösenord alls för att utföra kommandon som root från någon värd, men kom ihåg att detta gör systemet mycket sårbart.

Vakt

Bloggar, bloggar, bloggar. Maxim Fuckin vet mycket om detta.

Interaktiv karta över staden Orenburg. Tillverkad med hjälp av Google Maps-teknik med hjälp av vår egen utveckling. Resursen är ung, men redan ganska intressant och användbar.

Varje ägare av en serverdator vet att du inte ska lita på full åtkomst (root) till alla.
Vi känner till konsekvenserna av några av dessa ögonblick. Och för att förenkla livet, in Unix kärna genomfört kommando sudo.
Ett verktyg som låter användare utföra kommandon med superanvändarbehörighet. Till exempel tillåter det junioradministratörer att använda vissa kommandon för att utföra uppgifter inom kompetensen.

Superanvändarrot- administratörskonto i Unix (liksom Unix-liknande OC) med identifierare 0, som tillåts utföra alla kommandon utan undantag.

Det installeras från arkiven med hjälp av pakethanteraren: apt-get installera sudo eller yum installera sudo.

Sudo config låter dig ange en användare, användargrupp, värdar och fråga eller inte fråga efter ett lösenord vid körning.
Till exempel att utföra ett kommando på uppdrag av en annan användare.

Kör Midnight Commander som superanvändare

Öppna i en textredigerare nano fil nginx.config från användaren Anton.

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

konfigurationsfil sudoers finns i katalogen / etc /.
För att redigera konfigurationsfilen, använd kommandot visudo.

Det är inte värt att ändra filen / etc / sudoers med en textredigerare, eftersom när du sparar kontrolleras inte syntaxen, vilket är fallet med visudo.

Mall för användarrättigheter i konfigurationsfilen / etc / sudoers

Användare /% group ALL / host_name / + machine_group = ALL / enumeration_command_separated_commas (ytterligare parametrar):

Tillåter antonanvändaren att utföra alla kommandon på alla värdar (med en lösenordsuppmaning)

Anton ALLA = (ALLA) ALLA

Tillåter administratörsgruppen att utföra alla kommandon på Alpha-maskinen (utan att ange ett lösenord)

% admins Alfa = ALLA NOPASSWD: ALLA

Som standard, när du kör kommandon via sudo, måste du logga in med ett lösenord. Du kan inaktivera auktorisering med parametern NOPASSWD)

Tillhandahålls i sudo och genom att gruppera kommandogrupper i alias.
Kombinera kommandon för att arbeta med nätverket till en enhet NÄTVERK

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

Du kan använda dem till exempel för begränsning av rättigheter användare eller grupp för att utföra kommandon som påverkar tjänsten.

Tillåt att alla kommandon används av Egor och devops-gruppen, förutom de i NETWORKING-gruppen

Egor ALLA = ALLA,! NÄTVERK% devops ALLA = ALLA,! NÄTVERK

Vi har täckt några av sudo-funktionerna för en detaljerad look, använd man-sidor från ditt distributionspaket.







2021 gtavrl.ru.