GNU/Linux >> Znalost Linux >  >> Linux

Sudo vs root; nějaké skutečné rozdíly?

Velmi záleží na tom, jak svůj program nazýváte sudo nebo su .
Např. na systému, na kterém se v tuto chvíli nacházím:

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

Kde [1]=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Env=Proměnné prostředí jsou resetovány pro 1 a 5, převzaty z $USER v 2,3,4.

Takže skript nebo program, který je spuštěn s jinou možností, může vidět různé $PATH , $HOME , jeho shell může číst různé .bashrc ,.profile a Proměnné prostředí. Přečte soubor související s $HOME . Každý uživatel může upravit své prostředí jiným způsobem (proměnné, $PATH , .bashrc, .profile, .bash_profile, alias...). Uživatel může mít zejména jiné pořadí adresářů ve svém $PATH a v důsledku toho může skript provést příkaz, např. v /home/$USER/bin místo toho pak ten v cestě očekávaný od roota.

Program můžete spustit pod sudo -i jak jste byli přihlášeni jako root s su - ,ale můžete mít jiné chování, pokud jej spustíte s sudo MyCommand nebo pomocí su -c MyCommand .

Od man su :

V části popisu:
Aktuální prostředí je předáno novému prostředí . Hodnota $PATH je resetována do /bin:/usr/bin pro normální uživatele nebo/sbin:/bin:/usr/sbin:/usr/bin pro superuživatele
...
V části možností:
- , -l, --přihlášení
Poskytněte prostředí podobné co by uživatel očekával, kdyby se uživatel přihlásil přímo .

Od muže sudo

-i , --přihlásit se
Spusťte shell určený záznamem databáze hesel cílového uživatele jako přihlašovací shell. To znamená, že soubory prostředků specifické pro přihlášení, jako jsou .profile nebo .login, budou čteny shellem. Pokud je zadán příkaz, je předán do shellu k provedení přes volbu -c prostředí. Pokud není zadán žádný příkaz, spustí se interaktivní shell. sudo se před spuštěním shellu pokusí změnit domovský adresář daného uživatele. Příkaz se spouští v prostředí podobném tomu, které by uživatel obdržel při přihlášení . Část Příkazové prostředí v manuálu sudoers(5) dokumentuje, jak volba -i ovlivňuje prostředí, ve kterém je příkaz spuštěn, když se používá politika sudoers.


Pokud máte plný sudo přístup, můžete se stát root pomocí sudo su - , takže bezpečnostní bod je diskutabilní.

Ve skutečnosti existuje způsob, jak rozpoznat rozdíl mezi programem spuštěným jako root a program běžel pod sudo - pomocí getuid vs geteuid - ale to je vykonstruovaný trik. Proč by to systém oprav dělal?


Existuje několik rozdílů, pokud získáváte root shell, jak poukázal @Hastur.

Pokud nezískáváte kořenový shell, pak existuje více rozdílů. Člen podpory může mít zkušenosti s pokusy o věci jako sudo patch -p0 < /root/patch.file kde patch je spuštěn jako root, ale < (napojení ze souboru) není.


Linux
  1. Stát se rootem zevnitř Vimu?

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

  3. Změnit root heslo pomocí Sudo, bez Su?

  1. Jaký je rozdíl mezi root a sudo?

  2. Jakmile sudo su'd to root, existuje příkaz k zobrazení mého uživatelského jména?

  3. Změna hesla uživatele root nezmění heslo sudo

  1. Jak fungují vnitřnosti sudo?

  2. Rozdíl mezi uživatelem Sudo a uživatelem root?

  3. Je sudo su - považováno za špatný postup?