GNU/Linux >> Znalost Linux >  >> Linux

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

Jak jste poznamenali, cd je vestavěný příkaz shellu a má k tomu důvod za to:"aktuální adresář" je parametr pro každý proces, který může změnit pouze proces sám .

Pracovní adresář vašeho shellu nemůže změnit žádný podřízený proces – takže i když se vám podaří spustit cd v privilegovaném subshell změní pouze pracovní adresář tohoto dočasného subshell a nezáleží na tom, jakou metodu zvýšení oprávnění použijete.

Tedy pro sudo cd Aby sudo fungovalo, muselo by být vestavěný shell a potřebovalo by nějaký způsob, jak zvýšit oprávnění již běžícímu procesu. V současné době žádný takový mechanismus v Linuxu (ani ve většině ostatních operačních systémů) neexistuje.

Jedním ze způsobů, jak dosáhnout toho, co chcete, je spustit interaktivní shell s právy root (funguje jakákoli metoda) a stačí použít běžný cd v něm:

[[email protected] /]$ sudo bash
[[email protected] /]# cd /root/secret

Pokud to chcete udělat v jednom příkazu, muselo by to vypadat takto – nejprve změňte pracovní adresář a poté spusťte interaktivní shell:

sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"

Poznámka:Vnější příkaz nemusí být shell, musí to být jen něco který změní svůj pracovní adresář a provede nový příkaz. Nejnovější systémy Linux mají jednoho nebo dva pomocníky, které lze použít:

sudo nsenter --wd="/root/secret" bash       # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash        # coreutils v8.28 (debian buster)

Výhodou této metody je, že nevyžaduje vnořené citace; můžete spustit víceslovný příkaz, aniž byste měli problémy s mezerami nebo speciálními znaky.

A konečně, některé programy mají vestavěnou možnost změnit svůj pracovní adresář:

sudo make -C /etc
sudo git -C /root/secret log

Druhá odpověď není špatná.

Možná lepší odpověď je:

Nástroj sudo je určen k provádění akcí jako superuživatel a vy popisujete něco, co je spíše změnou stavu, která by předcházela akcím jako 'ls' nebo 'vi' nebo jiným, aby byly jednodušší.

Navrhuji např. pokud jste chtěli upravit soubor v /root/private/:

sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>

To je rozhodně více psaní a trochu těžší než jen změna adresářů. Je to však daleko schopnější auditu a mnohem více v souladu s principy sudo než spouštění nějaké varianty „sudo bash“.

Pokud pracujete v bezpečném prostředí, váš tým IA vám poděkuje. Pokud se přistihnete, že si říkáte:„Jakou změnu jsem včera udělal?“, pak vy vám poděkuje, protože se nebudete muset divit, jaký soubor nebo soubory jste upravili.

To vše znamená, že povolení a provádění nějaké formy „sudo bash“ je rozhodně jednodušší. Pokud jste hledali jednodušší, proč na prvním místě používáte 'sudo' namísto pouhého přihlášení jako root?


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

  2. Linuxový příkaz mv

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

  1. Linux du command

  2. Linuxový ip příkaz

  3. Linux cd příkaz

  1. Jak spustit příkaz / skript Linux Shell na pozadí

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

  3. linux:jak spustit příkaz v daném adresáři