GNU/Linux >> Znalost Linux >  >> Linux

Existuje někdy dobrý důvod, proč spustit Sudo Su?

Chcete-li spustit root shell na počítačích, kde je root účet zakázán, můžete spustit jeden z:

  • sudo -i :spusťte interaktivní přihlašovací shell (čte se /root/.bashrc a /root/.profile )
  • sudo -s :spusťte interaktivní shell bez přihlášení (čte se /root/.bashrc )

Ve světě Ubuntu velmi často vidím sudo su navržený jako způsob, jak získat kořenový shell. Proč spouštět dva samostatné příkazy, když stačí jeden? Pokud mohu říci, sudo -i je ekvivalentní k sudo su - a sudo -s je stejné jako sudo su .

Zdá se, že jediné rozdíly jsou (porovnání sudo -i vlevo a sudo su - vpravo):

A porovnání sudo -s (vlevo) a sudo su (vpravo):

Hlavní rozdíly (ignorujte SUDO_foo proměnné a LS_COLORS ) se zdají být XDG_foo systémové proměnné v sudo su verze.

Existují nějaké případy, kdy tento rozdíl opravňuje k použití poněkud nevkusného sudo su ? Mohu lidem bezpečně říct (jako často), že nikdy nemá smysl spouštět sudo su nebo mi něco uniká?

Přijatá odpověď:

Jak jste uvedl ve své otázce, hlavním rozdílem je prostředí.

sudo su - vs. sudo -i

V případě sudo su - je to přihlašovací shell, takže /etc/profile , .profile a .bashrc jsou spuštěny a ocitnete se v domovském adresáři root s prostředím root.

sudo -i je téměř stejný jako sudo su - -i (simulovat počáteční přihlášení) spustí shell určený záznamem databáze hesel cílového uživatele jako přihlašovací shell. To znamená, že zdrojové soubory specifické pro přihlášení, jako je .profile , .bashrc nebo .login bude přečten a spuštěn shellem.

sudo su vs. sudo -s

sudo su volá sudo pomocí příkazu su . Bash se nazývá interaktivní nepřihlašovací shell. Takže bash spustí pouze .bashrc . Vidíte, že po přepnutí do rootu jste stále ve stejném adresáři:

[email protected]:~$ sudo su
[email protected]:/home/user#

sudo -s čte $SHELL proměnnou a spustí obsah. Pokud $SHELL obsahuje /bin/bash vyvolá sudo /bin/bash , což znamená, že /bin/bash je spuštěn jako nepřihlašovací shell, takže nejsou spuštěny všechny tečkové soubory, ale bash sám čte .bashrc volajícího uživatele. Vaše prostředí zůstává stejné. Váš domov nebude domovem roota. Jste tedy root, ale v prostředí volajícího uživatele.

Závěr

-i příznak byl přidán do sudo v roce 2004 poskytnout podobnou funkci jako sudo su - , takže sudo su - byla šablona pro sudo -i a chtěl tak fungovat. Myslím, že nezáleží na tom, který používáte, pokud prostředí není důležité.

Související:Linux – netfilter/iptables:proč nepoužít nezpracovanou tabulku?

Dodatek

Základní bod, který zde musí být zmíněn, je sudo byl navržen tak, aby spouštěl pouze jeden příkaz s vyššími privilegii a pak tato privilegia vypustit na původní. Nikdy to nemělo být skutečně přepnout uživatele a ponechte otevřený kořenový shell. Postupem času sudo byl rozšířen o takové mechanismy, protože lidé byli naštvaní, proč používat sudo před každým příkazem.

Tedy význam sudo byl zneužíván. sudo měl za cíl povzbudit uživatele, aby minimalizoval používání práv root.

To, co nyní máme, je sudo se stává stále populárnější. Je integrován v téměř každé známé linuxové distribuci. Původní nástroj pro přepnutí na jiný uživatelský účet je su . Pro starou školu *nix veterána něco jako sudo se může zdát zbytečné. Přidává složitost a chová se pravděpodobněji k mechanismům, které známe z rodiny operačních systémů Microsoft, a je tedy v rozporu s filozofií jednoduchosti systémů *nix.

Nejsem opravdu veterán, ale také podle mého názoru sudo byl vždy trnem v oku, od chvíle, kdy byl představen a vždy jsem pracoval na použití sudo , kdyby to bylo možné. Velmi se zdráhám používat sudo . Na všech mých systémech je povolen účet root. Ale věci se mění, možná přijde čas, kdy su bude zastaralé a sudo nahrazuje su úplně.

Proto si myslím, že bude nejlepší použít sudo vnitřní mechanismy (-s , -i ) namísto spoléhání se na starý nástroj, jako je su .


Linux
  1. Jak mohu nastavit a spustit PhantomJS na Ubuntu?

  2. Existuje zkratka pro spuštění navrhovaného příkazu v terminálu?

  3. Spusťte příkaz cd jako superuživatel v Linuxu

  1. Spusťte kontejnery na Linuxu bez sudo v Podman

  2. Použití sudo k delegování oprávnění v Linuxu

  3. Jak spustit Wireshark na Ubuntu 17.10?

  1. Jak zpětně zajistit, aby skript běžel jako root?

  2. Jak spustit terminál jako root?

  3. Ubuntu - Spusťte příkaz při spuštění pomocí sudo