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é.
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
.