Všetko, čo potrebujete na pochopenie sudo vs su na Ubuntu Linux. Získanie práv správcu

sudo je program pre Unixové operačné systémy, ktoré používateľom umožňujú spúšťať programy s bezpečnostnými oprávneniami iného používateľa, predvoleného superužívateľa.

Na rozdiel od súvisiaceho príkazu su, používatelia musia poskytnúť svoje heslo na overenie. Po overení, ak konfiguračný súbor, ktorý sa zvyčajne nachádza v /etc/sudoers, umožňuje udeliť užívateľovi prístup, systém vykoná požadovaný príkaz. Konfiguračný súbor poskytuje prístupové oprávnenia, vrátane možnosti vykonávať príkazy volané z terminálu; umožňuje dotazovať sa heslo pre každého používateľa alebo skupinu; umožňuje vyžadovať zadanie hesla zakaždým znova, alebo nikdy nevyžadovať zadanie hesla vôbec. Môže byť tiež nakonfigurovaný tak, aby umožňoval odovzdávanie argumentov alebo viacerých príkazov.

rozprávanie jednoducho povedané vykonávať určité akcie v linux, budeme musieť zadať heslo alebo sa prihlásiť ako superuser (su).
Zvážte jednoduchý príklad, aby ste mohli vymazať\kopírovať\nahradiť systémové súbory v ubuntu, musíte otvoriť Správca súborovNautilus v mene superužívateľa.
Ak to chcete urobiť, zadajte do terminálu ( ctrl+alt+T). Buďte opatrní, terminál rozlišuje malé a veľké písmená.

sudo nautilus

Potom sa zobrazí nasledujúci text:

heslo pre používateľa: /tu zadajte svoje heslo, nezobrazia sa žiadne znaky/

Otvorili ste teda správcu súborov Nautilus v mene superužívateľa a teraz môžete bezpečne (alebo nie) vybrať systémové súbory ^^

Ďalší príklad. Napríklad musíte vyzdvihnúť obsah systémový súbor pomocou textového editora, ale nemôžete v ňom vykonávať zmeny. Otvorte terminál a zadajte:

sudo gedit

Tak si otvoril textový editor s právami superužívateľa.

Ďalší príklad, ak, povedzme, budete vykonávať veľké množstvo príkazov a zakaždým, keď zadáte heslo, jednoducho sa vám to nepáči. V termináli môžete otvoriť reláciu superužívateľa, ktorá vás ušetrí od týchto nepríjemností.
Zadajte do terminálu:

sudo su

Potom zadáme naše heslo, relácia superužívateľa je otvorená. Ďakujem za tvoju pozornosť

Paradoxne, príkaz sudo nevylučuje spustenie administrátorskej relácie v rámci bežnej užívateľskej relácie. Pretože ho možno použiť na spustenie rovnakého príkazu su:

$ sudo su

A to je dokonca aj v Ubuntu, kde nie je účet root; presnejšie povedané, predvolene neexistuje žiadne heslo. Ale pomocou sudo je to zbytočné aj pre príkaz su. Nie je však zakázané nastaviť heslo superužívateľa - napokon na to stačí zadať príkaz

$ sudo passwd

použiť su zvyčajným spôsobom. A dokonca, ak chcete, prihláste sa ako root pri registrácii v systéme.

Avšak aj tu príkaz sudo poskytuje „ideologicky správnu“ metódu, a dokonca ani jednu. Toto sú voľby -s a -i, ktoré predlžujú, aj keď trochu odlišným spôsobom, pôsobenie príkazu sudo na neurčito, až kým sa „sekundárna relácia“ neskončí príkazom exit.

Voľba -s pri otváraní sekundárnej koreňovej relácie zachová všetky premenné prostredia pôvodného používateľa. Ak k nemu však pridáte voľbu -H, potom sa tieto premenné znova načítajú z profilových súborov domovského adresára administrátora, teda /root, ako pri spustení interaktívnej inštancie shellu. Adresár, ktorý bol aktuálny v čase zadania príkazu, sa však nezmení ani sa nezmení vzhľad príkazového riadka.

Voľba -i úplne reprodukuje prostredie root spustením jeho shellu ako prihlasovacieho shellu. Tým sa samozrejme zmení aj aktuálny adresár na /root a príkazový riadok bude mať podobu opísanú v príslušnej premennej v súbore profilu administratívneho shellu (v bash - PS1).

V praxi nie je veľký rozdiel medzi týmito dvoma formami získania práv trvalého správcu, najmä v bash . Ale v zsh, s príslušnými nastaveniami profilových súborov, ak je to žiaduce, môžete dosiahnuť výrazne odlišné prostredia v každom z týchto prípadov. Je pravda, že koľko toho používateľ potrebuje, je veľká otázka. Ale skutočnosť, že pri použití možností -H sa trvalý administratívny režim nijako navonok nezdá, je plná chýb. Vďaka tomu je vo väčšine prípadov vhodnejšia možnosť -i.

Mimochodom, možnosti suda sa neobmedzujú len na spúšťanie príkazov ako administrátora: nastavením voľby -u užívateľské meno ich možno vykonávať aj v mene užívateľa, ktorého prihlásenie je nastavené ako jeho hodnota. To môže byť užitočné pri prezeraní alebo kopírovaní bodkových súborov a bodkových adresárov iného používateľa, ktoré často dokáže čítať a upravovať iba ich vlastník.

Mimochodom, príkaz sudo je možné spustiť tak, že žiada heslo používateľa, v mene ktorého sa príkaz vykoná (napríklad administrátora), a nie toho, kto vyžaduje jeho oprávnenie. Na to existuje možnosť -targetpw. A aby požiadavka rootovského hesla bola trvalá, stačí zadefinovať napríklad alias like

Alias ​​sudo -targetpw

Vyžadovanie hesla root pri spustení sudo je jeho predvolené správanie v niektorých distribúciách, napríklad sa hovorí, že je to Suse.

Príkaz sudo má oveľa viac možností – vyššie som uviedol len tie, ktoré som musel použiť. Zvyšok je ľahko viditeľný v man sudo. Z tých, ktoré nie sú uvedené, spomeniem aj voľbu -b, ktorá dáva pokyn na spustenie príkazu „jurisdictional“ v pozadie. Môže to byť užitočné pri vykonávaní dlhodobých akcií, ako je napríklad kopírovanie obrázky z USB na flash disk pomocou príkazu dd.

Ako sme práve videli, príkaz sudo dáva používateľovi takmer neobmedzené právomoci na akékoľvek akcie v celom systéme, ako aj na manipuláciu s používateľskými údajmi iných ľudí. S ohľadom na to si položme nasledujúce otázky:

  • či niektorý používateľ môže získať práva správcu prostredníctvom príkazu sudo a
  • Môže cez ňu vykonávať všetky administratívne úkony?

Ak hovoríme o rodine Ubuntu, v ktorej bol tento mechanizmus prvýkrát použitý „out of box“, potom „out of box“, odpoveď na prvú otázku bude negatívna, na druhú - pozitívna. Vo všeobecnosti to závisí od nastavení programu sudo, ktoré sú popísané v súbore /etc/sudoers. A v ňom môžete nastaviť pravidlá, ktoré umožňujú vykonávať určité príkazy iba určitým používateľom. V súhrne to vyzerá takto:

užívateľské meno hostiteľ=príkaz

Tu, ako by ste mohli uhádnuť, používateľské meno je meno používateľa, pre ktorého je toto pravidlo nastavené, hostiteľ je názov počítača, z ktorého sa môže uchýliť k tomuto pravidlu, príkaz je konkrétny príkaz, ktorý môže tento používateľ použiť. tento stroj. Príkaz musí byť zadaný s úplnou absolútnou cestou (t. j. /sbin/fdisk , nie fdisk). Pole popisu príkazu môže obsahovať viacero hodnôt oddelených čiarkami, napríklad:

Používateľské meno ALL = /sbin/fdisk,/bin/mount

V predvolených pravidlách Ubuntu pre prístup používateľov k administrátorským oprávneniam sú popísané nasledovne:

# Špecifikácia privilégií užívateľa root VŠETCI=(VŠETCI) VŠETCI # Členovia skupiny správcov môžu získať privilégiá root %admin VŠETCI=(VŠETCI) VŠETCI

To znamená, že užívateľ root, ako by mal byť, môže vykonávať ľubovoľné príkazy z ľubovoľného hostiteľa. Ale iba používatelia patriaci do skupiny správcov (analóg skupiny kolies, ktorá bola spomenutá v) môžu získať svoje práva. Používateľ vytvorený počas normálna inštalácia, sa automaticky stáva členom tejto skupiny – a teda všetkých administratívne práva k dispozícii bez ďalších nastavení. Ostatní používatelia, ktorých účty budú vytvorené neskôr, sú však o toto privilégium zbavené. Ak, samozrejme, neboli konkrétne zaradení do skupiny správcov.

V iných distribúciách, ktoré nepoužívajú sudo, budete musieť upraviť jeho konfiguračný súbor - rovnaký /etc/sudoers spomenutý vyššie.

Súbor /etc/sudoers je bežný textový súbor, a preto ho možno upravovať v ľubovoľnom textovom editore (alebo povedzme pomocou ed alebo sed). Zároveň však existuje určité riziko, že niečo pokazíte (kvôli obvyklým preklepom), až po úplné zablokovanie prístupu k oprávneniam superužívateľa pre seba. Tieto situácie sú samozrejme opraviteľné – napríklad reštartom v režime pre jedného používateľa. Najlepšie je však nezasiahnuť ich. A preto spoľahlivejším prostriedkom na úpravu /etc/sudoers je použiť utilitu špeciálne navrhnutú na toto - visudo .

Pomôcka visudo nerobí nič prepychové - len otvorí /etc/sudoers v textovom editore popísanom superužívateľskou premennou EDITOR (ak nie je definovaná, bude to opäť klasické vi - odtiaľ názov) a umožní vám ho upravovať bežným spôsobom a potom ukončite editor s uložením výsledkov bežnými prostriedkami. Ešte predtým sa však skontroluje správnosť výsledku úpravy. A ak sa zistí porušenie syntaxe akceptovanej pre /etc/sudoers, vydá sa príslušné varovanie. Potom sa môžete vrátiť k úpravám, odmietnuť vykonané zmeny alebo ich stále prijať (samozrejme na vlastnú zodpovednosť).

Nástroj visudo nezaručuje 100% úspešnosť úprav. Pretože kontroluje iba súlad syntaxe, ale nie „správnosť samotných pravidiel“. To znamená, že ak dôjde k chybe pri špecifikovaní cesty k požadovanému toto pravidlo príkaz - tento príkaz cez sudo nebude fungovať.

V skutočnosti to však zvyčajne vyzerá oveľa jednoduchšie a vôbec nie strašidelne. Takže vo Fedore 11 som v príkladnej konfigurácii /etc/sudoers musel iba odkomentovať riadok

%wheel VŠETKY=(VŠETKY) VŠETKY

dať používateľovi zo zadanej skupiny (a ja som sa tam vopred zaradil, ako je popísané v) všetky práva, ktoré má správca. Zároveň by bolo možné poskytnúť si ťah a možnosť použiť sudo bez hesla. To by vyžadovalo odkomentovanie riadku

# %wheel ALL=(ALL) NOPASSWD: ALL

Obmedzil som sa však len na to, aby bola akcia s heslom dlhšia zadaním (pôvodne chýbajúci riadok

Predvolené nastavenie timestamp_timeout=10

kde hodnota časového limitu je v minútach. Mimochodom, ak ho zmeníte na nulu -

Predvolené nastavenie timestamp_timeout=0

potom sa heslo bude vyžadovať pri každom prístupe k príkazu sudo.

Prípadne môžete vypnúť časový limit pre akciu sudo zadaním zápornej hodnoty:

Predvolené nastavenie timestamp_timeout=-1

V tomto prípade sa heslo bude vyžadovať iba pri prvom zavolaní tohto príkazu.

Bližší pohľad na súbor /etc/sudoers ľahko odhalí možnosti udeliť určitým používateľom alebo skupinám iba obmedzený súbor práv. Tu však začínajú jemnosti skutočnej administratívy. Jednoducho som odobral môjmu dvojitému experimentátorovi prístup k akýmkoľvek administratívnym úkonom, aby som zastavil všetky jeho zásahy do tejto oblasti. Ani toto mi však nie vždy dovolí sa s ním vyrovnať – tak ako sa Timur Shaov nedokáže vyrovnať so svojím lyrickým hrdinom.

Čo je správne použiť: su alebo sudo?

Od dávnych čias boli mnohí zmätení rôznymi možnosťami zabezpečenia pri vykonávaní operácií s maximálnymi privilégiami. Napríklad oficiálna dokumentácia Ubuntu odporúča použiť niečo ako sudo nano a v mnohých amatérskych príručkách (v štýle „5 trikov in príkazový riadokže prekvapí vašu babičku), aby ste dostali koreň „nová škrupina, navrhuje sa napísať sudo su- . Pokúsim sa vysvetliť, prečo sa mi tento stav zdá nesprávny.

A Historicky jediným univerzálnym spôsobom vykonania príkazu ako iného používateľa v systéme Unix bol program su. Spustite bez parametrov, požiadalo o heslo superužívateľa a ak bolo úspešné, jednoducho nahradilo aktuálne používateľské meno rootom, pričom zostali takmer všetky premenné prostredia od starého používateľa (okrem PATH, USER a niekoľkých ďalších, pozri nižšie). muž su z vašej distribúcie). Správnejšie by bolo spustiť to ako su- - v tomto prípade dostala škrupina aj správne prostredie. S parametrom-c mohol spustiť príkaz: su -c "vim /etc/fstab" .

Dôveryhodní používatelia sa zároveň museli spamätať root heslo"a všetci používatelia uvedení v skupine "wheel" (t. j. skupina, ktorej členovia mohli vykonať príkaz su a stať sa superužívateľom) mali rovnaký neobmedzený prístup do celého systému, čo bol vážny bezpečnostný problém.

Potom prišiel príkaz sudo a to bol prelom. Teraz môže správca špecifikovať zoznam povolených príkazov pre každého používateľa (alebo skupinu používateľov), súbory dostupné na úpravu, špeciálne premenné prostredia a oveľa viac (všetka táto veľkoleposť je ovládaná z/etc/sudoers , pozri man sudoers z vašej distribúcie). Keď sa sudo spustí, požiada používateľa o vlastné heslo, nie o heslo root. Úplný shell možno získať pomocou " sudo -i"

Za osobitnú zmienku stojí špeciálny tím sudoedit , ktorý bezpečne spustí editor špecifikovaný v premenná prostredia $EDITOR . S tradičnejšou schémou sa úpravy súborov robili takto:

sudo vi /etc/fstab

Pri spustení týmto spôsobom zdedilo vi neobmedzený shell a cez:! používateľ mohol spustiť ľubovoľný príkaz (samozrejme, ak sa o to vopred nepostaral správca) a otvoriť ľubovoľný súbor.

sudoedit skontroluje, či sa tento používateľ môže zmeniť daný súbor, potom skopírujte zadaný súbor do dočasného adresára, otvorí ho v editore (ktorý zdedí práva používateľa, nie root "a), a po úprave, ak bol súbor zmenený, ho so špeciálnymi opatreniami skopíruje späť.

V distribúciách založených na Debiane nemá užívateľ root heslo, namiesto toho musia byť všetky administratívne úkony vykonané cez sudo alebo jeho grafický náprotivok gksudo . Ako úplná náhrada su, sudo by mal byť jediným príkazom na prepínanie medzi užívateľmi, avšak ako bolo povedané na začiatku, momentálne to tak nie je a z nejakého dôvodu si každý vymýšľa divoké sekvencie sudo, su, vi a pomlčky.

Preto každému odporúčam, aby si raz a navždy zapamätal:

Po prvá publikácia Tento príspevok mi položil niekoľko otázok. Z odpovedí sa ukázalo urobiť mini-FAQ.

Otázka: ako to urobiť pomocou sudosu -c "echo 1 > /etc/privileged_file"? sudo echo 1 /etc/privileged_filenadáva na "povolenie zamietnuté"

Odpoveď: Je to preto, že iba príkaz echo sa vykonáva so zvýšenými právami a výsledok je presmerovaný do súboru, ktorý už s právami má bežný používateľ. Ak chcete niečo pridať do súboru privilegovaného_súboru, musíte spustiť nasledujúci príkaz:

$echo 1| sudo tee -a privilegovaný_súbor >/dev/null

Alebo sa dočasne stať rootom:

$ sudo -i

# echo 1 > privilegovaný_súbor

#VÝCHOD

Otázka: sudo -i je dlhšie ako su - a zdá sa, že medzi nimi nie je žiadny rozdiel, prečo tlačiť viac?

A: sudo má niekoľko výhod, ktoré stoja za námahu napísať pár znakov navyše:

  • štandardne sudo zapisuje všetku aktivitu používateľa do kanála syslog authpriv (spravidla sa výsledok ukladá do súboru /var/log/auth.log) a podobná funkcia musí byť zahrnutá v su nastavením špeciálneho parametra v súbor nastavení, ktorý sa líši v závislosti od distribúcie (SULOG_FILE v /etc/login.defs v ubuntu linux, /etc/login.conf a /etc/pam.d/su na FreeBSD atď.)
  • v prípade su správca systému nemôže obmedziť príkazy, ktoré môžu používatelia vykonávať, ale v prípade sudo môže
  • ak by mal byť používateľ zbavený práv správcu, v prípade su musí po odstránení zo skupiny wheel zabudnúť heslo root, pri použití sudo ho stačí odstrániť z príslušnej skupiny (napr. wheel alebo admin) a/alebo súbor sudoers, ak bol ďalej upravený.

Otázka: Som jediný používateľ v mojom systéme a som zvyknutý na to, prečo potrebujem sudo?

A: Na otázku odpoviem otázkou: ak existuje správne sudo, prečo používať zastarané su?

Od dávnych čias boli mnohí zmätení rôznymi možnosťami zabezpečenia pri vykonávaní operácií s maximálnymi privilégiami. Napríklad oficiálna dokumentácia Ubuntu odporúča použiť niečo ako sudo nano ako príkaz na úpravu a mnohé amatérske príručky (v štýle „5 trikov na príkazovom riadku, ktoré prekvapia vašu babičku“) odporúčajú napísať sudo su, aby ste získali koreň " nová škrupina - pokúsim sa vysvetliť, prečo sa mi tento stav zdá nesprávny.

Historicky jediným univerzálnym spôsobom vykonania príkazu ako iného používateľa v systéme Unix bol program su. Spustite bez parametrov, vyžiadalo si heslo superužívateľa a v prípade úspechu jednoducho nahradilo aktuálne používateľské meno rootom, pričom ponechali takmer všetky premenné prostredia od starého používateľa (okrem PATH, USER a niekoľkých ďalších, pozri man su z vašej distribúcie ). Správnejšie bolo spustiť to ako su - - v takom prípade by shell tiež získal správne prostredie. S voľbou -c bolo možné vykonať príkaz: su -c "vim /etc/fstab" .

Dôveryhodní používatelia si zároveň museli zapamätať heslo root a všetci používatelia uvedení v skupine wheel (teda v skupine, ktorej členovia mohli vykonať príkaz su a stať sa superužívateľom) mali rovnaký neobmedzený prístup do celého systému , čo bol vážny bezpečnostný problém.

Potom prišiel príkaz sudo a to bol prelom. Teraz mohol administrátor špecifikovať zoznam povolených príkazov pre každého užívateľa (alebo skupinu užívateľov), súbory dostupné na úpravu, špeciálne premenné prostredia a oveľa viac (celá táto nádhera je ovládaná z /etc/sudoers, pozri man sudoers z vašej distribúcie) . Keď sa sudo spustí, požiada používateľa o vlastné heslo, nie o heslo root. Úplný shell možno získať pomocou " sudo -i "

Za zvláštnu zmienku stojí špeciálny príkaz sudoedit , ktorý bezpečne spustí editor špecifikovaný v premennej prostredia $EDITOR. S tradičnejšou schémou sa úpravy súborov robili takto:
sudo vi /etc/fstab

Vi spustená týmto spôsobom zdedila shell s neobmedzenými právami a cez:! používateľ mohol spustiť ľubovoľný príkaz (samozrejme, ak sa o to vopred nepostaral správca) a otvoriť ľubovoľný súbor.

Sudoedit skontroluje, či tento používateľ môže upraviť daný súbor, následne skopíruje zadaný súbor do dočasného adresára, otvorí ho v editore (ktorý zdedí práva používateľa, nie root „a) a po úprave, ak bol súbor upravený, skopíruje ho so špeciálnymi opatreniami späť.

V distribúciách založených na Debiane nemá užívateľ root heslo, namiesto toho sa všetky administratívne úkony musia vykonávať cez sudo alebo jeho grafický náprotivok gksudo . Ako úplná náhrada za su , sudo by malo byť jediným príkazom na prepínanie medzi používateľmi, avšak ako už bolo spomenuté na začiatku, momentálne to tak nie je a každý si z nejakého dôvodu vymýšľa divoké sekvencie sudo, su, vi a pomlčky .

Preto každému odporúčam, aby si raz a navždy zapamätal:

Po prvom zverejnení tejto poznámky som dostal niekoľko otázok. Z odpovedí sa ukázalo urobiť mini-FAQ.

Otázka: ako urobiť su -c "echo 1 > /etc/privileged_file" pomocou sudo? sudo echo 1 /etc/privileged_file prisahá "povolenie odmietnuté"
Odpoveď: Je to preto, že iba príkaz echo sa vykonáva so zvýšenými právami a výsledok je presmerovaný do súboru, ktorý už má normálne používateľské práva. Ak chcete niečo pridať do súboru privilegovaného_súboru, musíte spustiť nasledujúci príkaz:
$echo 1| sudo tee -a privilegovaný_súbor >/dev/null
Alebo sa dočasne stať rootom:
$ sudo -i # echo 1 > privilegovaný_súbor # exit $
Otázka: sudo -i je dlhšie ako su - a zdá sa, že medzi nimi nie je žiadny rozdiel, prečo tlačiť viac?
A: sudo má niekoľko výhod, ktoré stoja za námahu napísať pár znakov navyše:

  • štandardne sudo zapisuje všetku aktivitu používateľa do kanála syslog authpriv (spravidla sa výsledok ukladá do súboru /var/log/auth.log) a podobná funkcia musí byť zahrnutá v su nastavením špeciálneho parametra v súbor nastavení, ktorý sa líši v závislosti od distribúcie (SULOG_FILE v /etc/login.defs na Ubuntu Linux, /etc/login.conf a /etc/pam.d/su na FreeBSD atď.)
  • v prípade su správca systému nemôže obmedziť príkazy, ktoré môžu používatelia vykonávať, ale v prípade sudo môže
  • ak by mal byť používateľ zbavený práv správcu, v prípade su musí po odstránení zo skupiny wheel zabudnúť heslo root, pri použití sudo ho stačí odstrániť z príslušnej skupiny (napr. wheel alebo admin) a/alebo súbor sudoers, ak bol ďalej upravený.
Otázka: Som jediný používateľ v mojom systéme a som zvyknutý na to, prečo potrebujem sudo?
A: Na otázku odpoviem otázkou: ak existuje správne sudo, prečo používať zastarané su?

Príkaz sudo je veľmi dôležitý pre správu prístupových práv v operačnom systéme. Linuxový systém. Vďaka tomuto malému príkazu môžete udeliť povolenie na vykonávanie určitých akcií v mene správcu iným používateľom, pričom im nedáte samotné heslo superužívateľa. Tiež nemusíte vždy sedieť pod účtu superužívateľ niekedy vykonávať administratívne akcie.

Zdalo by sa, že taký malý tím, s minimom príležitostí a maximom jednoduché použitie ale v skutočnosti dokáže oveľa viac. V tomto článku sa pozrieme na to, ako je sudo nakonfigurované v linuxe na riadenie prístupu k systémovým funkciám a možnostiam používateľa.

Skôr než prejdeme k nastaveniu prístupu k nástroju sudo, pozrime sa, ako to funguje. V systéme Linux existujú dva spôsoby, ako získať práva správcu. Príkazom su sa môžete prepnúť na používateľa root alebo môžete požadovaný príkaz odovzdať ako parameter obslužnému programu sudo, ktorý ho vykoná s právami správcu. Okrem toho je vhodnejšia druhá metóda, pretože nezabudnete, čo používate, a neurobíte nič navyše.

Názov príkazu znamená náhradný užívateľ urobiť alebo super užívateľ robiť. Pomôcka vám umožňuje spúšťať programy v mene iného používateľa, najčastejšie však v mene root. Pomôcku vyvinuli už v roku 1980 Bob Cogshell a Cliff Spencer. Počas tejto doby sa veľa vývojárov zmenilo a pribudlo mnoho funkcií.

sudo funguje vďaka príznaku prístupu SUID. Ak je tento príznak nastavený pre program, potom sa nevykoná v mene používateľa, ktorý ho spustil, ale v mene vlastníka, keďže sudo súbor patrí, nástroj sa spustí ako root. Potom načíta svoje nastavenia, požiada o heslo používateľa a rozhodne, či mu môže byť povolené spúšťať príkazy ako správca. Ak áno, vykoná sa príkaz odovzdaný v parametri.

Teraz, keď poznáte teóriu, poďme sa pozrieť na to, ako nastaviť sudo v systéme Linux.

Nastavenie sudo v systéme Linux

Všetky nastavenia sudo sa nachádzajú v /etc/sudores. Tu môžete nakonfigurovať množstvo parametrov, počnúc tým, kto bude môcť vykonávať príkazy v mene superužívateľa, a končiac obmedzením množiny dostupných príkazov.

Ak chcete otvoriť súbor na úpravu, zadajte nasledujúci príkaz ako superuser:

Môžete tiež zadať textový editor, v ktorom chcete upraviť konfiguračný súbor:

EDITOR=nano video

Ďalej sa pozrieme na najzaujímavejšie nastavenia, ktoré môžete v tomto súbore nastaviť. Najprv sa však pozrime na základnú syntax súboru. Pozostáva z dvoch typov riadkov, ide o aliasy, ktoré umožňujú vytvárať zoznamy používateľov a príznakov, ako aj samotné pravidlá, ktoré určujú, ako sa bude príkaz sudo správať. Syntax aliasu vyzerá takto:

zadajte alias_name = prvok1, prvok2, prvok3

Typ určuje, aký typ alice sa má vytvoriť, názov špecifikuje názov, ktorý sa má použiť, a zoznam prvkov špecifikuje prvky, ktoré budú naznačené pri odkazovaní na toto meno.

Popis povolení pre používateľov má mierne odlišnú syntax:

hostiteľský užívateľ = (other_user:group) tímov

Používateľ špecifikuje používateľa alebo skupinu, pre ktorú vytvárame pravidlo, hostiteľ je počítač, pre ktorý bude toto pravidlo platiť. Iný používateľ - pod rúškom ktorého môže prvý vykonávať príkazy a posledný - povolené príkazy. Namiesto ktoréhokoľvek z parametrov možno použiť alias. A teraz nastavenie sudo na Debiane a iných distribúciách.

Hlavné nastavenia

Alias ​​Defaults vám umožňuje nastaviť štandardné parametre, aby nástroj fungoval, a my ich zvážime v tejto časti. Takýto alias začína slovom Defaults, za ktorým nasleduje názov príznaku. Ak je pred názvom symbol !, znamená to, že vlajku je potrebné zapnúť, v opačnom prípade vypnúť:

Zakázať úvod pri prvom použití:

Predvolené !prednáška

Superuser nemôže sudo:

Predvolené !root_sudo

Ak sa teraz pokúsite použiť sudo sudo, nič nebude fungovať:

Zmeňte domovský adresár pre cieľového používateľa, predvolený zostáva priečinok súčasný užívateľ ako domovský adresár:

Predvolené nastavenie set_home

Uložte zoznam skupín aktuálneho používateľa:

Predvolené !preserve_groups

Výzva na zadanie hesla superužívateľa namiesto hesla používateľa:

Nastavte počet pokusov o zadanie hesla pred ukončením sudo, predvolená hodnota je 3:

predvolená hodnota passwd_tries=5

Počet minút, ktoré uplynú, kým sudo znova požiada o heslo, predvolená hodnota je 5. Ak je nastavená na 0, heslo sa bude vyžadovať vždy, bez ohľadu na to, ako dlho ste nástroj použili:

Predvolené nastavenie timestamp_timeout=10

Nasledujúci parameter určuje počet minút, počas ktorých sudo bude čakať na opätovné zadanie hesla, ak je zadané nesprávne:

predvolená hodnota passwd_timeout=10

Môžete zmeniť správu, ktorá sa zobrazí po výzve na zadanie hesla:

Defaults passprompt="Vaše heslo je:"

Na toto použitie môžete zadať iného používateľa, nie root, od ktorého sa budú vykonávať všetky príkazy:

predvolené runas_default="user"

Môžete zaznamenať všetky pokusy o pripojenie k sudo:

Predvolené nastavenie logfile=/var/log/sudo

Potom sa pokúsime skontrolovať fungovanie denníka:

sudo cat /var/log/sudo

Toto sú všetky najzaujímavejšie možnosti konfigurácie sudo, ktoré môžete potrebovať, ďalej sa pozrieme na to, ako nastaviť povolenia sudo pre používateľov.

Nastavenie používateľov sudo

O syntaxi nastavenia akcií pre používateľov sme už hovorili vyššie, všetko je tu komplikovanejšie ako pri aliasoch, ale môžete na to prísť. Dovoľme napríklad každému používateľovi používať sudo z akéhokoľvek hostiteľa a vykonávať ľubovoľné príkazy:

VŠETCI VŠETCI = (VŠETCI) VŠETCI

Takýto príkaz je veľmi neistý, povoľuje všetkým a všetko. Prvým je VŠETKO na povolenie všetkých používateľov, druhým VŠETKÝM pre všetkých hostiteľov, tretím VŠETKÝM na umožnenie prihlásenia ako ktorýkoľvek používateľ a štvrtým povolením vykonania ľubovoľného príkazu. Ale oveľa častejšie sa používa iná konštrukcia:

%wheel ALL = (ALL) ALL

Znamená to isté ako predchádzajúce, len tu nepovoľujeme sudo všetkým užívateľom, ale iba tým, ktorí sú členmi skupiny wheel.

%wheel ALL = (root) ALL

Tu sme už obmedzili možný výber používateľov iba na používateľa root. Môžete tiež určiť skupinu používateľov, v mene ktorej môže vykonávať príkazy:

%wheel VŠETKO = (root:admins) VŠETKO

To znamená, že príkaz môžete spustiť ako root alebo iný používateľ zo skupiny admins. Môžeme tiež určiť príkazy, ktoré môže používateľ vykonať. Napríklad:

%wheel ALL = (root) /bin/mount, /bin/umount

Užívateľ môže vykonávať príkazy mount a umount iba ako root. Teraz to urobme ešte zaujímavejšie, používateľ môže spustiť pripojenie a odpojenie bez hesla a všetky ostatné príkazy s heslom:

%wheel ALL = (root) ALL
%wheel ALL = (root) NOPASSWD: /bin/mount, /bin/umount

Môžete tiež obmedziť používateľov podľa hostiteľov, napríklad povoľujeme použitie sudo iba z hostiteľa1:

%wheel host1 = (root) VŠETKY

Zostáva zvážiť, ako používať aliasy. Aliasy môžu byť nasledujúcich typov:

  • User_Alias- alias používateľov, ktorí budú používať sudo;
  • Runas_Alias- alias používateľov, v mene ktorých sa budú príkazy vykonávať;
  • alias_hostiteľa- alias hostiteľa;
  • Cmnd_Alias- alias príkazu;

Vytvorme napríklad štyri aliasy a aplikujme ich na naše pravidlo:

User_Alias ​​​​Users = používateľ1, používateľ2, používateľ3
Runas_Alias ​​​​Admins = root, správca
Host_Alias ​​​​Hosts = hostiteľ1, hostiteľ2
Cmd_Alias ​​​​Cmds = /bin/mount, /bin/umount

Užívatelia Hostitelia = (správcovia) Cmds

To znamená, že používatelia v zozname Používatelia budú môcť spúšťať príkazy Cmds ako používatelia Amdins na hostiteľoch.

Zostáva povedať pár slov o vlajkách. Príznak NOPASSWD vám povie, aby ste pri vykonávaní tohto pravidla nepožadovali heslo. Napríklad, ak chcete všetkým používateľom povoliť vykonať príkaz mount pomocou sudo bez hesla:

VŠETKY VŠETKY = (root) NOPASSWD: /bin/mount

Tento konkrétny príkaz môžete tiež úplne zakázať pomocou príznaku NOEXEC:

VŠETKY VŠETKY = (root) NOEXEC /bin/mount

Môžete skontrolovať, či bol súbor /etc/sudores správne nakonfigurovaný a zobraziť všetky vytvorené pravidlá pomocou príkazu:

Tu sú zobrazené všetky nastavené príznaky a nastavenia, ako aj povolenia tohto používateľa.

závery

V tomto článku sme sa pozreli na to, ako je sudo nakonfigurované v linuxe. Ako vidíte, napriek tomu, že ide o veľmi jednoduchú utilitu, skrýva množstvo užitočných nastavení, ktoré môžete na svojom systéme využiť. Ak máte nejaké otázky, opýtajte sa v komentároch!