GNU/Linux >> Znalost Linux >  >> Linux

Pochopení rozdílu mezi příkazy sudo a su v systému Linux

V jednom z našich dřívějších článků jsme podrobně diskutovali o příkazu „sudo“. Ke konci tohoto tutoriálu byla v malé poznámce zmínka o dalším podobném příkazu 'su'. No, v tomto článku budeme podrobně diskutovat o příkazu 'su' a také o tom, jak se liší od příkazu 'sudo'.

Než to však uděláme, vezměte prosím na vědomí, že všechny pokyny a příklady uvedené v tomto tutoriálu byly testovány na Ubuntu 18.04 LTS a Debianu 10.

Příkaz su v systému Linux

Hlavním úkolem příkazu su je umožnit vám přepnout na jiného uživatele během relace přihlášení. Jinými slovy, nástroj vám umožňuje převzít identitu jiného uživatele, aniž byste se museli odhlásit a poté přihlásit (jako tento uživatel).

Příkaz su se většinou používá k přepnutí na účet superuser/root (protože při práci na příkazovém řádku jsou často vyžadována oprávnění root), ale – jak již bylo zmíněno – můžete jej použít k přepnutí na jakéhokoli jiného uživatele bez oprávnění root jako dobře.

Zde je návod, jak můžete tento příkaz použít k přepnutí na uživatele root:

Heslo, které tento příkaz vyžaduje, je také uživatele root. Obecně tedy příkaz su vyžaduje zadání hesla cílového uživatele. Po zadání správného hesla nástroj zahájí dílčí relaci uvnitř stávající relace na terminálu.

su -

Existuje další způsob, jak přepnout na uživatele root:spusťte příkaz 'su -':

Nyní, jaký je rozdíl mezi 'su' a 'su -'? První zachovává prostředí starého/původního uživatele i po přechodu na root, zatímco druhý vytváří nové prostředí (jak diktuje ~/.bashrc uživatele root), podobně jako v případě explicitně se přihlásíte jako uživatel root z přihlašovací obrazovky.

DŮLEŽITÉ pro uživatele Debianu 10. Proměnná PATH uživatele root se na Debianu 10 liší při použití 'su' vs 'su -', adresáře jako /sbin chybí, když je použit pouze 'su', což znamená, že se mohou objevit chyby příkazu nenalezeny ani při základní správě systému příkazy. Takže vždy používejte 'su -' na Debianu 10, abyste se stali uživatelem root.

Manuálová stránka 'su' to také jasně uvádí:

The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

Takže budete souhlasit, že přihlášení pomocí 'su -' dává větší smysl. Ale protože příkaz 'su' také existuje, někdo by se mohl divit, kdy je to užitečné. Následující úryvek – převzatý z webu wiki ArchLinux – poskytuje dobrou představu o výhodách a úskalích příkazu 'su':

  • Někdy může být pro správce systému výhodné použít spíše shellový účet běžného uživatele než svůj vlastní. Konkrétně někdy nejúčinnějším způsobem, jak vyřešit problém uživatele, je přihlásit se k účtu daného uživatele za účelem reprodukování nebo odladění problému.
  • V mnoha situacích však není žádoucí, nebo to může být dokonce nebezpečné, aby uživatel root pracoval z běžného uživatelského účtu shellu a s proměnnými prostředí tohoto účtu, nikoli ze svého vlastního. Při neúmyslném použití účtu shellu běžného uživatele by mohl root nainstalovat program nebo provést jiné změny v systému, které by neměly stejný výsledek, jako kdyby byly provedeny při používání účtu root. Mohl by být například nainstalován program, který by běžnému uživateli mohl poskytnout možnost náhodně poškodit systém nebo získat neoprávněný přístup k určitým datům.

Poznámka:V případě, že chcete předat více argumentů za - v 'su -', měli byste použít volbu -l příkazového řádku, kterou příkaz nabízí (místo -). Zde je definice - a volba -l příkazového řádku:

-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.

When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.

su -c

Existuje další možnost příkazu 'su', která stojí za zmínku:-c. Umožňuje vám zadat příkaz, který chcete spustit po přepnutí na cílového uživatele.

Manuálová stránka 'su' to vysvětluje takto:

-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

Zvažte následující vzorovou šablonu:

su [target-user] -c [command-to-run]

Takže v tomto případě bude příkaz 'command-to-run' proveden jako:

[shell] -c [command-to-run]

Kde by „shell“ bylo nahrazeno shellem „target-user“ definovaným v /etc/passwd soubor.

Sudo vs. Su

Nyní, když jsme probrali také základy příkazu 'su', je čas diskutovat o rozdílech mezi příkazy 'sudo' a 'su'.

Heslo

Primární rozdíl mezi těmito dvěma je heslo, které vyžadují:zatímco 'sudo' vyžaduje heslo aktuálního uživatele, 'su' vyžaduje, abyste zadali heslo uživatele root.

Zcela jasně je „sudo“ lepší alternativou mezi těmito dvěma, pokud jde o bezpečnost. Zvažte například případ, kdy počítač používá více uživatelů, kteří také vyžadují přístup root. Použití 'su' v takovém scénáři znamená sdílení hesla uživatele root se všemi, což obecně není dobrý postup.

Navíc, v případě, že chcete zrušit superuživatel/root přístup konkrétního uživatele, jediný způsob je změnit heslo root a následně znovu distribuovat nové heslo root všem ostatním uživatelům.

Na druhou stranu se Sudo zvládnete oba tyto scénáře bez námahy. Vzhledem k tomu, že „sudo“ vyžaduje, aby uživatelé zadali své vlastní heslo, nemusíte heslo uživatele root sdílet především všichni uživatelé. A chcete-li konkrétnímu uživateli zabránit v přístupu k oprávněním root, vše, co musíte udělat, je vyladit odpovídající záznam v souboru 'sudoers'.

Výchozí chování

Další rozdíl mezi těmito dvěma příkazy je v jejich výchozím chování. Zatímco 'sudo' umožňuje spouštět pouze jeden příkaz se zvýšenými oprávněními, příkaz 'su' spouští nový shell, který vám umožňuje spouštět tolik příkazů, kolik chcete s oprávněními root, dokud explicitně neukončíte prodej.

Výchozí chování příkazu 'su' je tedy potenciálně nebezpečné vzhledem k možnosti, že uživatel může zapomenout na skutečnost, že pracuje jako root, a mohl by neúmyslně provést některé neopravitelné změny (například nesprávně spustit příkaz 'rm -rf' adresář). Podrobnou diskuzi o tom, proč se nedoporučuje vždy pracovat jako root, přejděte sem.

Protokolování

Přestože příkazy spouštěné přes 'sudo' jsou prováděny jako cílový uživatel (což je ve výchozím nastavení 'root'), jsou označeny uživatelským jménem sudoera. Ale v případě 'su' není možné přímo vysledovat, co uživatel udělal poté, co se připojil k účtu root.

Flexibilita

Příkaz „sudo“ je mnohem flexibilnější v tom, že můžete dokonce omezit příkazy, ke kterým chcete, aby sudoři měli přístup. Jinými slovy, uživatelé s přístupem k 'sudo' mohou získat přístup pouze k příkazům, které jsou vyžadovány pro jejich práci. S 'su' to však není možné – buď máte právo dělat všechno, nebo nic.

Sudo su

Pravděpodobně kvůli potenciálním rizikům spojeným s používáním „su“ nebo přímým protokolováním jako root některé distribuce Linuxu – jako Ubuntu – ve výchozím nastavení zakazují uživatelský účet root. Uživatelům se doporučuje, aby používali 'sudo', kdykoli potřebují oprávnění root.

Stále však můžete úspěšně provést 'su', tj. bez zadání hesla uživatele root. Vše, co musíte udělat, je spustit následující příkaz:

sudo su

Protože příkaz spouštíte pomocí 'sudo', budete muset zadat pouze své heslo. Takže jakmile to uděláte, příkaz 'su' bude spuštěn jako root, což znamená, že nebude vyžadovat žádná hesla.

PS :V případě, že chcete na svém systému povolit účet root (ačkoli to důrazně nedoporučujeme, protože vždy můžete použít 'sudo' nebo 'sudo su'), budete muset heslo roota nastavit ručně, což můžete provést pomocí následující příkaz:

sudo passwd root

Závěr

Jak tento, tak i náš předchozí návod (který se zaměřuje na 'sudo') by vám měl poskytnout dobrou představu o dostupných nástrojích, které vám umožní provádět úkoly, které vyžadují eskalovaná (nebo úplně jinou sadu) oprávnění. V případě, že se chcete o 'su' nebo 'sudo' o něco podělit, nebo se chcete podělit o své vlastní zkušenosti, můžete to udělat v komentářích níže.


Linux
  1. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  2. Rozdíl mezi uživatelským a servisním účtem?

  3. Linux – rozdíl mezi uživatelským prostorem a prostorem jádra?

  1. Jaký je rozdíl mezi normálním uživatelem a systémovým uživatelem?

  2. Jaký je rozdíl mezi příkazem locate a find v Linuxu

  3. Příklady příkazů sudo v Linuxu

  1. Naučte se rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  2. Rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  3. Jaký je rozdíl mezi Sudo Su – a Sudo Su –?