Získání administrátorských práv. nástroje sudo, visudo a sudoedit

V každém systému Linux je vždy jeden privilegovaný uživatel - root. Tento uživatel má práva provádět jakékoli akce, mazat jakékoli soubory a měnit jakákoli nastavení. Je téměř nemožné nějak omezit svobodu jednání roota. Na druhou stranu všichni ostatní uživatelé systému většinou nemají většinu potřebná práva, například práva k instalaci programů, protože se jedná o administrativní operaci, pro kterou má práva pouze root. Další běžnou operací, přístupnou pouze superuživateli, je kopírování a změna souborů v systémových složkách, kam běžný uživatel nemá přístup.

Dříve tento problémřešení bylo celkem jednoduché: pokud jste měli heslo roota, mohli jste se přihlásit do systému pod jeho účtem nebo dočasně získat jeho práva pomocí příkazu su. Poté proveďte všechny potřebné operace a vraťte se zpět do běžný uživatel. Toto schéma v zásadě funguje dobře, má však mnoho významných nedostatků, zejména nelze žádným způsobem (přesněji je to velmi obtížné) omezit oprávnění správce pouze na určitý okruh úkolů.

Proto v modern Linuxové distribuce místo účtu root slouží ke správě utilita sudo.

V Ubuntu je standardně root účet zcela zakázán, tzn. Neexistuje způsob, jak se stát rootem, aniž byste to povolili. root je zakázán, tzn. je v systému přítomen, jen se do něj nemůžete přihlásit. Pokud chcete vrátit možnost používat root, přečtěte si odstavec níže o povolení účtu root.

Co je sudo

sudo je nástroj, který uděluje rootovi oprávnění k provádění administrativních operací podle jeho nastavení. Umožňuje vám snadno řídit přístup k důležitým aplikacím v systému. Ve výchozím nastavení, kdy instalace Ubuntu první uživatel (ten vytvořený během instalace) má plná práva k použití sudo. Tito. ve skutečnosti má první uživatel stejnou svobodu jednání jako root. Toto chování sudo je však snadné změnit, viz níže v odstavci o nastavení sudo;

Kde se sudo používá?

sudo se používá vždy, když něco spustíte z nabídky Správa systému. Například, když spustíte Synaptic, budete požádáni o zadání hesla. Synaptic je nainstalovaný program pro správu softwaru, takže k jeho spuštění potřebujete administrátorská práva, která získáte přes sudo zadáním hesla.

Ne všechny programy, které vyžadují oprávnění správce, se však automaticky spouštějí přes sudo. Obvykle musíte ručně spouštět programy s právy správce.

Spouštění grafických programů s právy správce

Chcete-li začít grafické programy S administrátorskými právy můžete využít dialog pro spuštění programu, který se standardně vyvolá klávesovou zkratkou Alt + F2.

Řekněme, že musíme běžet správce souborů Nautilus s administrátorskými právy nějak změnit obsah přes GUI systémové složky. Chcete-li to provést, zadejte příkaz v dialogovém okně spuštění aplikace

Gksudo nautilus

gksudo lze nahradit gksu a uživatelé KDE by také měli místo gksudo psát kdesu. Budete požádáni o zadání hesla, a pokud ano potřebná práva, Nautilus poběží jako správce. Jakýkoli grafický software s administrátorskými právy můžete spustit jednoduchým zápisem do spouštěcího dialogu

Gksudo<имя_команды>

Při práci v aplikacích spuštěných s právy správce buďte velmi opatrní. Můžete provádět jakoukoli operaci bez varování systému, zejména smazat systémové soubory, čímž je systém nefunkční.

Spouštění programů s administrátorskými právy v terminálu

Chcete-li spustit příkaz v terminálu s právy správce, jednoduše před něj napište sudo:

sudo<команда>

Budete požádáni o zadání hesla. Při zadávání hesla buďte opatrní v žádném případě se nezobrazuje, je to normální a provádí se to z bezpečnostních důvodů, stačí napsat až do konce a stisknout Enter. Po zadání hesla bude zadaný příkaz proveden jako root.

Systém si po nějakou dobu pamatuje zadané heslo (uchovává sudo session otevřenou). Proto následné spuštění sudo nemusí vyžadovat zadání hesla. Chcete-li zaručit ukončení relace sudo, zadejte terminál

Chyby související s kanály v Linuxu jsou navíc běžné. Při provádění příkazu

Sudo cat test.txt | grep text > vysledek.txt

s právy root bude spuštěn pouze cat, takže soubor result.txt nemusí registrovat. Buď musíte před každým příkazem napsat sudo, nebo dočasně přepnout na superuživatele.

Získání práv superuživatele pro spouštění více příkazů

Někdy je nutné spustit několik příkazů za sebou s právy správce. V tomto případě se můžete dočasně stát superuživatelem pomocí jednoho z následujících příkazů:

Sudo -s sudo -i

Tím se dostanete do režimu superuživatele (s omezeními uloženými prostřednictvím nastavení sudo), jak je označeno symbolem # na konci příkazového řádku. Tyto příkazy jsou podobné v akci jako su, nicméně: - sudo -s- nezmění domovský adresář na /root, domovský adresář volajícího uživatele zůstává domovem sudo -s, což je obvykle velmi pohodlné. - sudo -i- také změní domovský adresář na /root.

Chcete-li se vrátit zpět do normálního uživatelského režimu, napište exit nebo jednoduše stiskněte Ctrl + D.

Pomocí tradičního účtu root a příkazu su

Odemknutí účtu root vede ke zbytečným rizikům (při neustálé práci pod rootem máte 100 500 způsobů, jak se „střelit do nohy“), a také usnadňuje útočníkovi získat přístup k vašemu počítači.

Ubuntu 11.04 a starší

Chcete-li se přihlásit jako root, stačí mu zadat heslo:

Sudo passwd root

Poté na přihlašovací obrazovce klikněte na Jiné... a zadejte uživatelské jméno (root) a heslo, které jste nastavili.

Ubuntu 11.10 a starší

Počínaje verzí 11.10 byl nainstalován správce přihlášení lightdm a přihlášení jako root je trochu složitější.

1. Nastavte heslo uživatele root. Zadejte do terminálu:

Sudo passwd root

2. Zapněte položku „Zadat přihlášení“. Zadejte do terminálu:

Gksu gedit /etc/lightdm/lightdm.conf

Na konec souboru přidejte:

Greeter-show-manual-login=true

3. Restartujte lightdm. Zadejte do terminálu:

Restartujte službu Sudo lightdm

To je vše, na přihlašovací obrazovce se objeví položka „Přihlášení“. Do přihlašovacího pole zadáme „root“, do pole hesla - heslo, které jsme nastavili v první fázi.

Chcete-li zvrátit uzamčení účtu root, budete muset vrátit zpět změny v nastavení lightdm a také uzamknout účet příkaz root v terminálu:

Sudo passwd -l root

Nastavení sudo a oprávnění ke spouštění různých příkazů

sudo vám umožňuje povolit nebo zakázat uživatelům spouštění konkrétní sady programů. Všechna nastavení související s přístupovými právy jsou uložena v souboru /etc/sudoers. Toto není obyčejný soubor. Chcete-li to upravit nutné(z bezpečnostních důvodů) použijte příkaz

Sudo vidění

Ve výchozím nastavení říká, že všichni členové skupiny admin mít plný přístup k sudo, jak naznačuje řádek

%admin VŠECHNY=(VŠECHNY) VŠECHNY

Spuštěním si můžete přečíst více o syntaxi a možnostech přizpůsobení tohoto souboru

Muž sudoers

Pokud při úpravě tohoto souboru uděláte chybu, můžete zcela ztratit přístup k administrativním funkcím. Pokud k tomu dojde, musíte zavést systém do režimu obnovení a automaticky získáte práva správce a budete moci vše opravit. Tento soubor můžete také upravit z LiveCD.

Umožněte uživateli provést příkaz bez zadání hesla

Aby systém pro určité příkazy nepožadoval heslo, je nutné za řádek přidat sudoery # Specifikace aliasu Cmnd přidejte řádek, kde vypíšete požadované příkazy s úplnou cestou oddělenou čárkami (cestu příkazu lze najít spuštěním který název_příkazu:

# Specifikace aliasu Cmnd Cmnd_Alias ​​​​SHUTDOWN_CMDS = /sbin/shutdown, /usr/sbin/pm-hibernate, /sbin/reboot

A přidejte řádek na konec souboru

Uživatelské jméno ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS

Pozor! Výše uvedené kroky nenahrazují nutnost zadat příkaz sudo před vaším příkazem

Vytváření synonym (aliasů)

Abyste nejen nemuseli zadávat heslo pro sudo, ale také abyste sudo nemuseli vůbec zadávat, proveďte následující: otevřete soubor .bashrc umístěný ve vašem domovském adresáři

nano ~/bashrc

a přidejte řádky na konec souboru

alias reboot ="sudo reboot" alias poweroff ="sudo poweroff" alias pm-hibernate="sudo pm-hibernate" alias hibernate ="sudo pm-hibernate" alias shutdown ="sudo shutdown"

Doba platnosti zadaného hesla

Možná budete chtít změnit dobu, po kterou sudo trvá bez zadání hesla. Toho lze snadno dosáhnout přidáním něčeho podobného do /etc/sudoers (visudo):

Výchozí: foo timestamp_timeout=20

Zde je sudo pro uživatele foo platné bez nutnosti zadávat heslo po dobu 20 minut. Pokud chcete, aby sudo vždy vyžadovalo heslo, nastavte timestamp_timeout na 0.

sudo nepožaduje heslo

sudo bez hesla je strašná bezpečnostní díra, každý si může dělat, co chce. Pokud jste to dovolili schválně, okamžitě to vraťte zpět, jak to bylo.

V některých případech však sudo najednou přestane vyžadovat heslo samo. Pokud uděláte visudo , můžete vidět něco jako tento řádek, který uživatel zřejmě nepřidal:

VŠECHNY VŠE=(VŠECHNY) NOPASSWD:ALL

S největší pravděpodobností byla tato katastrofální linie přidána při instalaci programu jako Connect Manager od MTS nebo Megafon. V tomto případě je třeba jej změnit na řádek, který umožňuje spuštění pouze tohoto správce připojení jako root, něco takového:

Uživatelské jméno ALL= NOPASSWD: /cesta/k/programu

Jsou další možnosti řešení problému, krátká diskuze.

Něco málo o sudo samotném z Wikipedie. sudo(Angličtina) superuživatel dělat , doslova „vystupovat jménem superuživatel") je program navržený tak, aby pomáhal správce systému a umožňuje vám delegovat určité privilegované zdroje uživatelům při zachování protokolu práce. Hlavní myšlenkou je dát uživatelům co nejméně práv, ale zároveň přesně tolik, kolik je potřeba k řešení zadaných úkolů.

Příkaz sudo umožňuje uživatelům spouštět příkazy jako root nebo jiní uživatelé. Pravidla, která sudo používá k rozhodnutí, zda udělit přístup, jsou v souboru /etc/sudoers; jejich jazyk a příklady použití jsou podrobně popsány v sudoers(5).

Chcete-li upravit soubor /etc/sudoers, měli byste použít program visudo, který zkontroluje syntaxi a tím zabrání chybám v pravidlech.

Ve většině případů, správná konfigurace sudo dělá běh jako superuživatel zbytečný.

Ve výchozím nastavení je účet root v Ubuntu zakázán a root prostě nemá heslo. Všechny administrativní úkony se provádějí přes sudo. Ve výchozím nastavení je právo spustit sudo uděleno prvnímu uživateli vytvořenému během instalace. Všichni ostatní jsou ve výchozím nastavení běžní uživatelé.

Sudo je velmi flexibilní nástroj, který umožňuje konfigurovat práva k provádění administrativních akcí pro každého uživatele zvlášť. Umožněte například jednomu restartovat server a jinému dejte možnost změnit přístupová práva k souborům a složkám. Otevřete soubor /etc/sudoers. To lze provést buď vydáním příkazu k otevření souboru ve vašem oblíbeném textový editor, například takto:

# nano /etc/sudoers

nebo pomocí nástroje visudo:
#vizum

Druhá metoda otevře soubor /etc/sudoers ve výchozím editoru uživatele, nebo pokud není zadán, pak v editoru vi. Výhoda tato metoda je, že při ukládání bude soubor zkontrolován, zda odpovídá syntaxi.

Nejjednodušší konfigurace vypadá takto:

Výchozí nastavení env_reset

#Specifikace uživatelských oprávnění
root ALL=(ALL) ALL
uživatel ALL=(ALL) ALL

Tato konfigurace dává uživateli všechna práva uživatele root při spouštění příkazu sudo. Výchozí nastavení env_reset zcela zakáže všechny uživatelské proměnné při provádění příkazů jako root. To je dobré z bezpečnostního hlediska, ale někdy to způsobuje problémy. Můžete povolit použití soukromých proměnných skupinou nebo jednotlivcem přidáním řádku, jako je tento:
Výchozí: %admin !env_reset

což uloží proměnné prostředí pro všechny uživatele skupiny administrátorů, nebo:
Výchozí: uživatel env_keep=TZ

který uloží proměnnou TZ pro uživatele uživatele.

Pokud je server spravován skupinou lidí, pak má smysl to udělat:
%admin VŠECHNY=(VŠECHNY) VŠECHNY

Jak asi tušíte, tato položka poskytuje přístup root všem členům skupiny administrátorů.

Každého konkrétního uživatele můžete nakonfigurovat tak, aby měl přístup pouze ke konkrétním příkazům. Například:
user ALL = /bin/mount, /bin/kill

poskytne uživatelská práva ke spouštění příkazů připojení a ukončení z libovolného počítače a:
user2 mydebiancomp = /sbin/modprobe

dá uživateli 2 oprávnění ke spuštění modprobe z mydebiancomp. Myslím, že syntaxe je jasná:
uživatel hostitel = příkaz

kde je příkaz zapsán s úplnou cestou. U skupiny je vše podobné, pouze je přidán znak „%“.

III. Pokročilá nastavení sudo.

Při nastavování sudo je velmi výhodné vytvořit skupinu aliasů. Abychom se vyhnuli neustálému opakování příkazů, uživatelů a hostitelů, můžeme je seskupit do skupin a nastavit pravidla pro každou skupinu aliasů. Například takto:

Cmnd_Alias ​​​​command_alias = příkaz1, příkaz2, ... // aliasy příkazů
Host_Alias ​​​​host_alias = název_hostitele1, název_hostitele2, ... // aliasy hostitele
User_Alias ​​​​user_alias = uživatel1, uživatel2, ... // uživatelské aliasy

Je také možné provést příkaz jménem jiného uživatele. Například s tímto záznamem:
uživatel VŠECHNY = (uživatel2, uživatel3) /usr/bin/ark

uživatel uživatel může spustit příkaz ark jako uživatel2 nebo uživatel3 pomocí klávesy u takto:
$ sudo -u user2 ark

Ve výchozím nastavení si sudo pamatuje hesla po dobu 5 minut. Pokud si to nepřejete, můžete pro každého uživatele, skupinu nebo alias nastavit samostatné pravidlo, například když:
Výchozí: user timestamp_timeout=0

Heslo uživatele nebude vůbec zapamatováno, ale pokud:
Výchozí: user timestamp_timeout=-1

zůstane v paměti po celou dobu provozuschopnosti.

Sudo bez hesel je také možné. K tomu existuje podobný design:
uživatel myubuntucomp = NOPASSWD: /bin/kill

což umožní uživateli z hostitele myubuntucomp použít kill bez výzvy k zadání hesla. Vložte své vlastní hodnoty, jako je ALL místo názvu hostitele a příkazu, aby uživatel nikdy nemohl zadat heslo pro spouštění příkazů jako root z jakéhokoli hostitele, ale pamatujte, že to činí systém velmi zranitelným.

Hlídat

Blogy, blogy, blogy. Maxim Fuckin o tom ví hodně.

Interaktivní mapa města Orenburg. Vyrobeno pomocí technologie Google mapy pomocí našeho vlastního vývoje. Zdroj je mladý, ale už docela zajímavý a užitečný.

Paradoxně příkaz sudo nebrání spuštění administrátorské relace v rámci běžné uživatelské relace. Protože s jeho pomocí můžete spustit stejný příkaz su:

$sudo su

A to je dokonce i v Ubuntu, kde není žádný root účet; přesněji řečeno, neexistuje žádné výchozí heslo. Ale pomocí sudo je to zbytečné i pro příkaz su. Není však zakázáno nastavit heslo superuživatele - koneckonců k tomu stačí zadat příkaz

$sudo passwd

abyste mohli v budoucnu su používat obvyklým způsobem. A dokonce, pokud chcete, přihlaste se jako root při registraci do systému.

I zde však příkaz sudo poskytuje „ideologicky správnou“ metodu, a dokonce ne jen jednu. Jsou to volby -s a -i, které prodlužují, i když trochu odlišným způsobem, působení příkazu sudo na dobu neurčitou, dokud není „sekundární relace“ ukončena příkazem exit.

Volba -s při otevírání sekundární kořenové relace zachová všechny proměnné prostředí původního uživatele. Pokud k tomu však přidáte volbu -H, pak se tyto proměnné znovu načtou z profilových souborů domovského adresáře administrátora, tedy /root, jako při spouštění instance interaktivního shellu. Adresář, který byl aktuální v době zadání příkazu, se však nezmění ani se nezmění vzhled příkazového řádku.

Volba -i zcela reprodukuje prostředí root a spouští jeho příkazový shell jako přihlašovací shell. V tomto případě se samozřejmě aktuální adresář změní na /root a příkazový řádek má podobu popsanou v odpovídající proměnné v souboru profilu administrátorského shellu (v bash - PS1).

V praxi není rozdíl mezi oběma formami získání trvalých administrátorských práv velký, zejména v bash. Ale v zsh, s příslušným nastavením profilových souborů, pokud je to žádoucí, můžete v každém z těchto případů dosáhnout výrazně odlišného prostředí. Je pravda, jak moc to uživatel potřebuje, je velká otázka. Ale skutečnost, že při použití voleb -H se trvalý administrativní režim navenek nijak neprojevuje, je plná chyb. A ve většině případů je vhodnější použít volbu -i.

Mimochodem, možnosti sudo nejsou omezeny na spouštění příkazů jako správce: zadáním volby -u uživatelské jméno je lze spustit jménem uživatele, jehož login je zadán jako jeho hodnota. To může být užitečné při prohlížení nebo kopírování tečkových souborů a tečkových adresářů jiného uživatele, které jsou často čitelné a upravitelné pouze vlastníkem.

Mimochodem, příkaz sudo lze spustit tak, že žádá o heslo uživatele, pod jehož jménem se příkaz provede (například administrátora), a ne toho, kdo vyžaduje jeho oprávnění. K tomu existuje možnost -targetpw. A aby požadavek roota na heslo byl trvalý, stačí definovat například alias like

Alias ​​sudo -targetpw

Vyžadování zadání hesla uživatele root při spuštění sudo je výchozí chování v některých distribucích, například, jak se říká, v Suse.

Příkaz sudo má mnohem více možností – výše jsem uvedl pouze ty, které jsem musel použít. Zbytek lze snadno vyhledat v man sudo. Z těch, které nejsou uvedeny, zmíním také volbu -b, která dává pokyn ke spuštění příkazu „supervisory“ v pozadí. Může být užitečné při provádění dlouhodobých akcí, jako je kopírování obrázky USB na flash disk pomocí příkazu dd.

Jak jsme právě viděli, příkaz sudo dává uživateli téměř neomezené pravomoci pro jakékoli akce v rámci celého systému a také pro manipulaci s uživatelskými daty jiných lidí. V této souvislosti si položme následující otázky:

  • zda některý uživatel může získat práva správce prostřednictvím příkazu sudo, a
  • může pomocí něj provádět všechny administrativní úkony?

Pokud mluvíme o rodině Ubuntu, ve které byl tento mechanismus poprvé použit „out of box“, pak „out of box“ bude odpověď na první otázku negativní, na druhou - pozitivní. Obecně to závisí na nastavení programu sudo, které je popsáno v souboru /etc/sudoers. A v něm můžete nastavit pravidla, která povolí provádět určité příkazy pouze určitým uživatelům. V souhrnu to vypadá takto:

Uživatelské jméno host = příkaz

Zde, jak asi tušíte, uživatelské jméno je jméno uživatele, pro kterého je toto pravidlo nastaveno, hostitel je název počítače, ze kterého se může uchýlit k tomuto pravidlu, příkaz je specifický příkaz, jehož použití je povoleno tomuto uživateli z tohoto stroje. Příkaz musí být zadán s plným absolutní cesta(tj. /sbin/fdisk , nikoli fdisk). Pole popisu příkazu může obsahovat více hodnot oddělených čárkami, například:

Uživatelské jméno VŠE = /sbin/fdisk,/bin/mount

V Ubuntu jsou výchozí pravidla pro přístup uživatelů k administrátorská oprávnění jsou popsány následovně:

# Specifikace uživatelských oprávnění root VŠECHNY=(VŠE) VŠECHNY # Členové skupiny administrátorů mohou získat oprávnění root %admin VŠECHNY=(VŠICHNI) VŠECHNY

To znamená, že uživatel root může podle očekávání provádět libovolné příkazy z libovolného hostitele. Její práva však mohou získat pouze uživatelé, kteří jsou členy skupiny admin (analogické skupině wheel, o které se mluvilo). Uživatel vytvořený při běžné instalaci se automaticky stává členem této skupiny – a jsou mu tedy k dispozici všechna administrátorská práva bez dalšího nastavování. Ostatní uživatelé, jejichž účty budou následně vytvořeny, jsou však o toto oprávnění zbaveni. Pokud ovšem nebyli konkrétně zařazeni do skupiny administrátorů.

V jiných distribucích, které nepoužívají sudo ihned po vybalení, jej budete muset upravit konfigurační soubor- stejné /etc/sudoers uvedené výše.

Soubor /etc/sudoers je běžný textový soubor a lze jej tedy upravovat v libovolném textovém editoru (nebo řekněme pomocí ed nebo sed). Existuje však určité riziko, že něco poděláte (kvůli obyčejným překlepům), a to až do té míry, že vám zcela zablokujete přístup k oprávněním superuživatele. Tyto situace lze samozřejmě napravit – například restartem v režimu pro jednoho uživatele. Je však lepší je nezasáhnout. A proto spolehlivějším prostředkem pro úpravu /etc/sudoers by bylo použití nástroje speciálně navrženého pro tento účel - visudo.

Utilita visudo nedělá nic nadpřirozeného - jednoduše otevře /etc/sudoers v textovém editoru popsaném superuživatelskou proměnnou EDITOR (pokud není definována, bude to opět klasické vi - odtud název) a umožní vám jej upravovat obvyklým způsobem a poté ukončete editor s uložením výsledků pomocí jeho standardních prostředků. Předtím se však zkontroluje správnost výsledku úprav. A pokud je zjištěno porušení syntaxe akceptované pro /etc/sudoers, je vydáno odpovídající varování. Poté se můžete vrátit k úpravám, odmítnout provedené změny nebo je přesto přijmout (samozřejmě na vlastní odpovědnost).

Nástroj visudo nezaručuje 100% úspěšnost úprav. Protože kontroluje pouze konzistenci syntaxe, ale ne „správnost samotných pravidel“. Tedy pokud dojde k chybě při zadávání cesty k požadovanému tohoto pravidla příkaz - tento příkaz nebude fungovat přes sudo.

Ve skutečnosti to však většinou vypadá mnohem jednodušeji a vůbec ne děsivě. Takže ve Fedoře 11 jsem v ukázkové konfiguraci /etc/sudoers musel pouze odkomentovat řádek

%wheel VŠECHNY=(VŠECHNY) VŠECHNY

dát uživateli ze zadané skupiny (a já jsem se tam předem zařadil, jak je popsáno v) všechna práva udělená administrátorovi. Zároveň si můžete dát příležitost použít sudo bez hesla. To by vyžadovalo odkomentování řádku

# %wheel ALL=(ALL) NOPASSWD: ALL

Ale omezil jsem se na to, aby heslo vydrželo déle přidáním (původně chybějící řádek

Výchozí timestamp_timeout=10

kde je hodnota časového limitu uvedena v minutách. Mimochodem, pokud to změníte na nulu -

Výchozí timestamp_timeout=0

pak bude heslo požadováno pokaždé, když použijete příkaz sudo.

Časový limit sudo akce můžete naopak deaktivovat zadáním záporné hodnoty:

Výchozí timestamp_timeout=-1

V tomto případě bude heslo požadováno pouze při prvním volání tohoto příkazu.

Bližší pohled na soubor /etc/sudoers snadno odhalí možnosti udělit určitým uživatelům nebo skupinám pouze omezenou sadu práv. Zde však začínají jemnosti skutečné administrativy. Jednoduše jsem zbavil svého dvojitého experimentátora přístup k jakýmkoli administrativním úkonům, abych zastavil všechny jeho pokusy na tomto poli. Ani to mi však ne vždy dovolí se s ním vyrovnat – stejně jako se Timur Shaov nedokáže vyrovnat se svým lyrickým hrdinou.

Od pradávna byli mnozí zmateni rozmanitostí možností zabezpečení při provádění operací s maximálními oprávněními. Například v úředním Dokumentace Ubuntu Jako editační příkaz se doporučuje použít něco jako sudo nano a v četných amatérských příručkách (ve stylu „5 triků s příkazovým řádkem, které překvapí vaši babičku“) se pro získání root shellu doporučuje napsat sudo su - . Pokusím se vysvětlit, proč se mi tento stav zdá špatný.

Historicky jediné univerzálním způsobem spustit příkaz jako jiný uživatel v Unixu existoval program nazvaný su. Spuštěna bez parametrů, požádala o heslo superuživatele, a pokud byla úspěšná, jednoduše nahradila aktuální uživatelské jméno rootem, přičemž ponechala téměř všechny proměnné prostředí starého uživatele (kromě PATH, USER a několika dalších, viz man su z vaší distribuce ). Správnější by bylo spustit jej jako su - v takovém případě by shell také obdržel správné prostředí. S volbou -c můžete spustit příkaz: su -c "vim /etc/fstab" .

V tomto případě si důvěryhodní uživatelé museli zapamatovat heslo uživatele root a všichni uživatelé uvedení ve skupině „wheel“ (tedy ve skupině, jejíž členové mohli spustit příkaz su a stát se superuživatelem) měli stejný neomezený přístup k celému systém, což byl vážný bezpečnostní problém.

Pak přišel příkaz sudo a to byl průlom. Nyní mohl administrátor specifikovat seznam povolených příkazů pro každého uživatele (nebo skupinu uživatelů), soubory dostupné k editaci, speciální proměnné prostředí a mnoho dalšího (všechny tyto krásy se ovládají z /etc/sudoers, viz man sudoers z vaší distribuce) . Při spuštění se sudo zeptá uživatele na jeho vlastní heslo, nikoli heslo root. Úplný shell lze získat pomocí "sudo -i"

Za zvláštní zmínku stojí speciální tým sudoedit , který bezpečně spustí editor zadaný v proměnné prostředí $EDITOR. S tradičnějším schématem se úpravy souborů prováděly takto:
sudo vi /etc/fstab

Tímto způsobem spuštěný vi zdědil shell s neomezenými právy a prostřednictvím:! uživatel mohl spustit libovolný příkaz (samozřejmě pokud se o to předem nepostaral správce) a otevřít libovolný soubor.

Sudoedit zkontroluje, zda tento uživatel může upravovat tento soubor, pak zkopíruje zadaný soubor do dočasného adresáře, otevře jej v editoru (který zdědí práva uživatele, nikoli root) a po úpravě, pokud byl soubor změněn, jej se zvláštními opatřeními zkopíruje zpět.

V distribucích založených na Debianu uživatel root nemá heslo, všechny administrativní akce musí být prováděny pomocí sudo nebo jeho grafického ekvivalentu gksudo. Jako úplná náhrada za su , sudo by mělo být jediným příkazem pro přepínání mezi uživateli, nicméně jak bylo řečeno na začátku, v tuto chvíli tomu tak není a z nějakého důvodu si každý vymýšlí divoké sekvence sudo, su, vi a čárky.

Proto doporučuji všem, aby si jednou provždy zapamatovali:

Po prvním zveřejnění této poznámky mi bylo položeno několik otázek. Z odpovědí se nám podařilo udělat mini-FAQ.

Otázka: Jak mohu použít sudo k provedení su -c "echo 1 > /etc/privileged_file"? sudo echo 1 /etc/privileged_file si stěžuje na „povolení odepřeno“
Odpověď: K tomu dochází, protože se zvýšenými právy je proveden pouze příkaz echo a výsledek je přesměrován do souboru s normálními uživatelskými právy. Chcete-li přidat něco do privilegovaného_souboru, musíte spustit následující příkaz:
$ echo 1| sudo tee -a privilegovaný_soubor >/dev/null
Nebo se dočasně staňte rootem:
$ sudo -i # echo 1 > privilegovaný_soubor # konec $
Otázka: sudo -i je delší než su -, ale zdá se, že mezi nimi není žádný rozdíl, proč tisknout více?
A: sudo má několik výhod, které stojí za námahu napsat pár znaků navíc:

  • ve výchozím nastavení sudo zaznamenává veškerou aktivitu uživatele v kanálu syslog authpriv (výsledek je zpravidla umístěn do souboru /var/log/auth.log) a v su musí být podobná funkce povolena pomocí úlohy speciální parametr v souboru nastavení, který se liší distribuci od distribuce (SULOG_FILE v /etc/login.defs v Ubuntu Linux, /etc/login.conf a /etc/pam.d/su na FreeBSD atd.)
  • v případě su nemůže správce systému omezit příkazy prováděné uživateli, ale v sudo ano
  • pokud by měl být uživatel zbaven administrátorských práv, v případě su musí po odebrání ze skupiny wheel zapomenout heslo root, pokud je použito sudo, stačí jej odebrat z odpovídající skupiny (např. wheel nebo admin) a/nebo soubor sudoers, pokud byl dále upraven.
Otázka: Jsem jediný uživatel na svém systému a jsem zvyklý na su, proč potřebuji sudo?
A: Na otázku odpovím otázkou: pokud existuje správné sudo, proč používat zastaralé su?

Někdy k vyřešení problému potřebujete otevřít terminál a provádět příkazy jako superuživatel (sudo nebo su), také nazývané ROOT. I když některé z nich lze provést pomocí GUI.

Můžete zjistit, proč je Root potřebný a používaný v unixových systémech od, a dále probereme, jak se sudo nebo su používá v systémech Linux.

Předpokládejme, že to musíme udělat nestandardní úkol, kde nám nepomohou grafické nástroje. Kromě příkazový řádek je velmi flexibilní nástroj, zde můžete vidět výstup příkazů a pochopit, co se děje špatně. A co je nejdůležitější, příkazy v terminálu jsou standardní pro všechny distribuce Linuxu.

Existují tedy dva hlavní způsoby, jak získat práva superuživatele (Root) - sudo nebo su

Příkaz sudo se používá v systémech podobných Debianu nebo populárnějším Ubuntu, "su" se používá téměř ve všech ostatních distribucích Linuxu.

Zadání sudo operační systém Ubuntu vyžaduje, abyste zadali heslo roota a poté vám po úspěšném zadání udělí práva superuživatele po dobu provádění pouze jednoho příkazu. Před všemi následujícími příkazy, které vyžadují Kořenová práva na systémech podobných Debianu musíte znovu zadat "sudo". A v jiných distribucích Linuxu, kde se používá příkaz „su“, poskytuje kompletní Kořenový přístup, po zadání hesla, dokud nezadáte „odhlásit“ nebo nezavřete terminál.

Na systémech podobných Debianu (Ubuntu) existuje trik, který může poskytnout úplný přístup root, dokud nezavřete terminál. To je nezbytné, pokud budete spouštět mnoho příkazů jako root a nemusíte před každým příkazem zadávat „sudo“. Chcete-li to provést, zadejte příkaz:

Potřebujeme například najít všechny stávající uživatele v systému, prohlédnout si jejich adresáře a přiřadit práva k požadovanému adresáři od jednoho uživatele k druhému. K tomu, pokud bych používal Ubuntu, příkaz v terminálu by byl:

Sudo du -sch /home/*

Poté bude následovat heslo root:

16K /domov/ztracena+nalezeno 27G /domov/pavel 34G /home/pavelubuntu 50G /domov/pavelzen 110G celkem

Vím, že jsem uživatelem adresáře /home/pavelzen, ale také se musím stát vlastníkem adresáře /home/pavelubuntu. Abych to udělal, znovu musím před příkaz zadat „sudo“.

A pro ostatní systémy: nejprve bych velel

heslo a poté

Du-sch /home/*

Chown -R pavelzen: /home/pavelubuntu

Takhle dovnitř Linuxové systémy objeví se terminály a superuživatelé.