GNU/Linux >> Tutoriels Linux >  >> Linux

Sudo contre racine ; des différences réelles?

Cela dépend fortement de la façon dont vous appelez votre programme avec sudo ou su .
Par exemple. sur le système sur lequel je suis en ce moment :

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

Où [1]=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Env=Les variables d'environnement sont réinitialisées pour 1 et 5, extraites de $USER en 2,3,4.

Ainsi, un script ou un programme qui est lancé avec une option différente peut voir différents $PATH , $HOME , son shell peut lire différents .bashrc ,.profile et Variables d'environnement. Il lit le fichier lié au $HOME . Chaque utilisateur peut modifier son environnement de manière différente (variables, $PATH , .bashrc, .profile, .bash_profile, alias...). En particulier un utilisateur peut avoir un ordre différent des répertoires dans son $PATH et, par conséquent, un script peut exécuter une commande, par ex. en /home/$USER/bin à la place, celui du chemin attendu de la racine.

Vous pouvez exécuter le programme sous sudo -i comme vous étiez connecté en tant que root avec su - , mais vous pouvez avoir un comportement différent si vous l'exécutez avec sudo MyCommand ou avec su -c MyCommand .

De man su :

Dans la partie description :
L'environnement actuel est transmis au nouveau shell . La valeur de $PATH est réinitialisée à /bin:/usr/bin pour les utilisateurs normaux, ou/sbin:/bin:/usr/sbin:/usr/bin pour le superutilisateur
...
Dans la partie options :
- , -l, --login
Fournir un environnement similaire à ce à quoi l'utilisateur s'attendrait s'il s'était connecté directement .

De l'homme sudo

-i , --connexion
Exécutez le shell spécifié par l'entrée de base de données de mots de passe de l'utilisateur cible en tant que shell de connexion. Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profile ou .login seront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour exécution via l'option -c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté. sudo tente de passer au répertoire personnel de cet utilisateur avant d'exécuter le shell. La commande est exécutée avec un environnement similaire à celui qu'un utilisateur recevrait lors de la connexion . La section Command Environment du manuel sudoers(5) documente la manière dont l'option -i affecte l'environnement dans lequel une commande est exécutée lorsque la stratégie sudoers est utilisée.


Si vous avez le sudo complet accès, vous pouvez devenir root en utilisant sudo su - , donc le point de sécurité est discutable.

En effet, il existe un moyen de discerner la différence entre un programme exécuté en tant que root et un programme exécuté sous sudo - en utilisant getuid contre geteuid - mais c'est une astuce artificielle. Pourquoi un système de correctifs ferait-il cela ?


Il y a quelques différences si vous obtenez un shell racine, comme l'a souligné @Hastur.

Si vous n'obtenez pas de shell racine, il y a plus de différences. Le membre du support peut avoir de l'expérience en essayant de faire des choses comme sudo patch -p0 < /root/patch.filepatch est exécuté en tant que root, mais < (tuyauterie à partir d'un fichier) ne l'est pas.


Linux
  1. Enregistrer le fichier en tant que root après l'avoir modifié en tant que non root

  2. Quelle est la différence entre root et sudo ?

  3. Dans quelle mesure NOPASSWD est-il sécurisé en mode sudo sans mot de passe ?

  4. Utiliser find en toute sécurité avec sudo

  5. Pourquoi le mot de passe 'sudo' est-il différent du mot de passe 'su root'

Comment changer le mot de passe Sudo ou Root dans Ubuntu

Comment passer à l'utilisateur root dans Ubuntu 22.04

Toujours lancer le terminal en tant qu'utilisateur root (sudo) dans Ubuntu

Où les incidents sudo sont-ils signalés ?

Une fois sudo su'd à root, y a-t-il une commande pour voir mon nom d'utilisateur ?

Changer le mot de passe root ne change pas le mot de passe sudo