Subtilité entre su et su -

Bonjour suite à l’installation d’NFtables je viens de découvrir qu’il y avait une différence entre :

su et su -

qui donnent respectivement

root@debian:/home/user#
et
root@debian:~#

@ grandtoubab a bien tenté de m’expliquer dans un cas tu as le bash du user, dans l’autre le bash de root et donc accès aux binaires

mais cela reste très vague (et encore si c’était vague cela serait déjà bien lol)

J’en déduit que debian va chercher les commandes dans le bash racine ou le bash utilisateur (même si je ne sais pas ce que c’est cette bestiole)…

Mais pourquoi pour les commandes systemctl, fail2ban… tout ce que j’ai pu bricoler cela ne posait pas de problème

Chaque fois que je me suis connecté en ROOT (su) j’ai donc utilisé le bash utilisateur et tout a bien fonctionné…

Alors que pour NFtables en ROOT (su) il ne trouve pas les commandes dans le bash utilisateur… j’ai du découvrir ROOT (su-) comme quoi cela sert a quelque chose :wink:

Mais pourquoi NFtables spécifiquement doit aller chercher les commandes dans le bash root racine alors que les autres appli fonctionne avec le bash utilisateur

par exemple pour faire une systemctl poweroff ben je fais juste su (et pas su-)

su - charge les variables d’environnement de root, ce qu’a dû t’expliquer grandtoubab.
Et donc, il charge le $PATH de root, dans lequel il y a /sbin, et /usr/sbin et /usr/local/sbin, que n’a pas le $PATH de l’utilisateur normal.
Tu peux voir la différence en faisant:

su 
echo $PATH

et

 su - 
 echo $PATH

Certaines commandes comme systemctl se trouvent dans des répertoires accessibles par n’importe quel utilisateur (en simple utilisateur, tu peux faire un systemctl status sshd par exemple, par contre pour faire un systemctl restart sshd, il faut être root. A ce moment là, quand tu fais un restart, le programme vérifie si tu es root ou pas; alors que si tu fais un status, il ne fait pas la vérification)
Par contre d’autres commandes, comme nftables par exemple, sont dans des répertoires /sbin, et donc accessibles uniquement lorsque le $PATH de root est chargé.

Pour savoir où se trouve le binaire d’une commande en particulier, utilise which <commande>

1 J'aime