GNU/Linux >> Znalost Linux >  >> AlmaLinux

Spouštějte příkazy jako jiný uživatel přes Sudo v Linuxu

Představte si tento scénář. Spravujete server Linux, ke kterému přistupuje více uživatelů. Všichni uživatelé mají sudo práv. Chcete otestovat určité příkazy Linuxu s různými uživateli. jak bys to udělal? Přihlaste se jako jeden uživatel a otestujte příkazy a poté se odhlaste a znovu přihlaste jako jiný uživatel a otestujte příkazy? Ano, je to jeden způsob, jak to udělat. Existuje však jednoduchý způsob, jak spouštět příkazy jako jiný uživatel přes sudo v Linuxu. Čtěte dále a dozvíte se to.

Pro účely této příručky jsem vytvořil dva uživatelské účty, konkrétně "senthil" a "kumar" v mém testovacím stroji AlmaLinux 8. Budu používat „senthil“ jako aktuálního uživatele a „kumar“ jako cílového uživatele.

Chci, aby uživatel „senthil“ mohl spouštět jakýkoli příkaz jako uživatel „kumar“ na libovolném hostiteli, aniž by se ve skutečnosti přihlašoval jako „kumar“. Rozuměl? Dovolte mi ukázat vám příklad.

Spouštět příkazy jako jiný uživatel prostřednictvím sudo

Momentálně jsem přihlášen jako uživatel "senthil". Dovolte mi ukázat vám aktuálně přihlášeného uživatele pomocí whoami příkaz.

$ whoami
senthil

Nyní spustím jednoduchý "echo " pomocí sudo jako cílový uživatel "kumar" při přihlášení jako "senthil":

$ sudo -u kumar bash -c 'echo "My Username is $USER, and my user ID is $UID"'

Budete vyzváni k zadání hesla aktuálního uživatele (v tomto případě „senthil“). Po ověření se zobrazí echo příkaz bude spuštěn jako uživatel "kumar" a zobrazí uživatelské jméno a ID uživatele "kumar".

Ukázkový výstup:

[sudo] password for senthil: 
My Username is kumar, and my user ID is 1001

Ve skutečnosti jsme právě provedli „echo " jako uživatel "kumar", zatímco jsme se přihlásili jako "senthil". Proto vidíte uživatelské jméno a ID uživatele kumar, ale ne senthil.

Ověřte, zda je uid uživatele "kumar" správné pomocí id příkaz.

$ id kumar
uid=1001(kumar) gid=1001(kumar) groups=1001(kumar),10(wheel)

Ano, uid kumar je správný v obou výstupech.

Zde je -u příznak se používá ke spuštění daného příkazu jako jiný uživatel (v tomto případě kumar) a bash -c se používá k uvedení názvu příkazu. Příkaz byste měli zmínit v jednoduchých uvozovkách.

Pokud nepoužijete bash -c možnost echo příkaz vrátí uživatelské jméno a uid aktuálního uživatele namísto cílového uživatele.

$ sudo -u kumar echo "My Username is $USER, and my user ID is $UID"
My Username is senthil, and my user ID is 1000

Podobně můžete spouštět libovolné příkazy jako jiný uživatel.

Upozorňujeme, že v našem předchozím příkladu příkazu jsem nezadal sudo heslo pro cílového uživatele. Proč? Protože, echo příkaz nevyžaduje sudo Heslo.

Pokud spustíte příkaz, který vyžaduje sudo oprávnění jako jiný uživatel, musíte zadat heslo. Zde je další příklad.

$ sudo -u kumar bash -c 'sudo dnf --refresh update'

Ukázkový výstup:

[sudo] password for senthil: 
[sudo] password for kumar: 
AlmaLinux 8 - BaseOS                                                                                                                                                               344  B/s | 4.3 kB     00:12    
AlmaLinux 8 - AppStream                                                                                                                                                            388  B/s | 4.7 kB     00:12    
AlmaLinux 8 - Extras                                                                                                                                                               316  B/s | 3.9 kB     00:12    
Dependencies resolved.
Nothing to do.
Complete!

Všimli jste si, že jsem zadal sudo heslo pro oba uživatele? Ano. Protože spouštíme "sudo dnf update ", který vyžaduje zvýšená oprávnění. Proto je nutné zadat sudo heslo pro cílového uživatele. Pro běžné příkazy např. ls , uname atd., nemusíme zadávat heslo cílového uživatele.

Nejen příkazy Linuxu, tuto metodu můžete použít také pro spouštění skriptů. Řekněme, že chcete spustit zálohovací skript, který je uložen v $HOME adresář jiného uživatele. Skript můžete jednoduše spustit od aktuálního uživatele jako jiného uživatele pomocí tohoto příkazu:

$ sudo -u kumar bash -c '~/backup_script_name'

Spouštět příkazy bez hesla sudo

Někdy se můžete dostat do situace, kdy nebudete chtít zadávat sudo heslo pro každý příkaz. V takových případech můžete přeskočit výzvu k zadání hesla pro konkrétní příkazy přidáním NOPASSWD možnost v /etc/sudoers soubor.

Řekněme, že chcete určitým uživatelům povolit spouštění jakéhokoli dnf příkaz bez sudo hesla. Chcete-li tak učinit, nejprve najděte cestu k dnf pomocí příkazu which nebo whereis příkazy.

$ which dnf
/usr/bin/dnf
$ whereis dnf
dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz

Jak můžete vidět, cesta ke spustitelnému souboru dnf příkaz je /usr/bin/dnf .

Nyní upravte /etc/sudoers soubory pomocí příkazu:

$ sudo visudo

Pozor: Vezměte prosím na vědomí, že byste neměli ručně upravovat sudoers soubor pomocí libovolného textového editoru. Vždy používejte visudo příkaz k bezpečné úpravě sudoers soubor.

Přidejte následující řádek na konec souboru, aby uživatel s názvem "kumar" mohl spouštět dnf příkazy bez hesla sudo.

kumar ALL=NOPASSWD:/usr/bin/dnf

Uložte soubor a ukončete.

Od této chvíle může uživatel „kumar“ spouštět dnf příkazy bez sudo heslo.

[[email protected] ~]$ sudo -u kumar bash -c 'sudo dnf --refresh update'
[sudo] password for senthil: 
AlmaLinux 8 - BaseOS                                                                                                                                                               358  B/s | 4.3 kB     00:12    
AlmaLinux 8 - AppStream                                                                                                                                                            324  B/s | 4.7 kB     00:14    
AlmaLinux 8 - Extras                                                                                                                                                               302  B/s | 3.9 kB     00:13    
Dependencies resolved.
Nothing to do.
Complete!

Vidět? Nemusíme zadávat sudo heslo pro "kumar".

Chcete-li toto chování zrušit, jednoduše odstraňte výše uvedený řádek.

Odmítnutí odpovědnosti: Při aplikaci této metody byste měli být velmi opatrní. Tato metoda může být použita pro produktivní i destruktivní účely. Řekněme například, pokud uživatelům povolíte spouštět 'rm' příkaz bez sudo heslo, mohli by omylem nebo záměrně smazat důležité soubory. Nedělejte to, pokud to není opravdu nutné.

Závěr

V tomto krátkém tutoriálu jsme diskutovali o tom, jak umožnit uživatelům spouštět příkazy jako jiný uživatel pomocí sudo v Linuxu. Také jsme se naučili, jak zakázat výzvu k zadání hesla sudo pro určité uživatele při spouštění konkrétních příkazů úpravou sudoers soubor.

Jak jsem varoval, musíte být opatrní při testování této metody na produkčním systému. Můžete nevědomky dovolit uživateli spustit škodlivý příkaz (např. rm ), aniž byste museli zadávat sudo heslo. Při testování těchto tipů pro Linux byste měli být vždy opatrní.

Související čtení:

  • Provádění příkazů na vzdálených systémech Linux prostřednictvím SSH
  • Jak spouštět konkrétní příkazy bez hesla Sudo v systému Linux

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

  2. 20 základních příkazů Linuxu pro každého uživatele

  3. Zkoumání rozdílů mezi příkazy sudo a su v systému Linux

  1. Jak vytvořit uživatele Sudo v Rocky Linux 8

  2. Windows UAC vs. Linux sudo

  3. Jak zobrazit historii příkazů jiného uživatele v Linuxu?

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

  2. Jak mohu provést řadu příkazů v subshell bash jako jiný uživatel pomocí sudo?

  3. Jak omezit uživatelské příkazy v Linuxu