Su parle anglais alors que su - reste français! et autres différences

mm@Xfce:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

mm@Xfce:~$ su 
Mot de passe : 
root@Xfce:/home/mm# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
  • par contre si j’utilise su - la valeur $PATH est différente et correspond à un vrai root ( je suppose du moins )
mm@Xfce:~$ su -
Mot de passe : 
root@Xfce:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

j’espère ne pas dire trop de bêtises .

C’est bon, c’est ça zao, tu ne dis pas de bêtises. :wink:

1 J'aime

Sur Debian 9 un simple

su

mettait /sbin dans cette variable, mais plus sous Debian 10 où il faut faire :

su -

ou

su -l

1 J'aime

Bonjour

Attention : les manuels proposés sur certains sites web n’ont pas toujours été mis à jour.

Ci-dessous, une traduction en français du manuel de la commande su
dans la version utilisée sur un système debian 11 :

SU(1)                              Commandes de l'utilisateur                             SU(1)

NOM
       su - exécuter une commande avec un UID et un GID de substitution

SYNOPSIS
       su [options] [-] [utilisateur [argument...]]

DESCRIPTION
       su permet l'exécution de commandes avec un identifiant utilisateur (UID) et un identifiant de groupe (GID) de substitution.

       S'il est appelé sans spécifier d'utilisateur, su exécute par défaut un interpréteur de commande interactif en tant que superutilisateur (root).
       Lorsqu'un utilisateur est indiqué, des arguments supplémentaires peuvent-être fournis, auquel cas ils sont passés à l'interpréteur.

       Pour assurer la rétrocompatibilité, su ne change pas, par défaut, le répertoire actuel et ne définit que les variables d'environnement HOME et SHELL (ainsi que USER et LOGNAME si l'utilisateur cible n'est pas le superutilisateur).
       Il est recommandé de toujours utiliser l'option --login (au lieu de son raccourci -) pour éviter les effets secondaires causés par un mélange d'environnements.

       Cette version de su utilise PAM pour l'authentification, le compte et la gestion de session.
       Quelques options de configuration trouvées dans d'autres implémentations de su, telles que la prise en charge d'un groupe wheel, doivent être configurées à l'aide de PAM.

       su est surtout fait pour les utilisateurs non privilégiés, la solution recommandée pour les utilisateurs privilégiés (par exemple, les scripts exécutés par le superutilisateur) est d'utiliser la commande sans set-user-ID runuser(1) qui ne nécessite pas d'authentification et qui fournit une configuration PAM distincte.
       Si la session PAM n'est pas du tout indispensable, alors la solution recommandée consiste à utiliser la commande setpriv(1)

       Remarquez que su utilise dans tous les cas PAM (pam_getenvlist(3)) pour effectuer la modification finale d'environnement.
       Les options de ligne de commandes comme --login et --preserve-environment affectent l'environnement avant qu'il ne soit modifié par PAM.

       Depuis la version 2.38, su réinitialise les limites de ressource des RLIMIT_NICE, RLIMIT_RTPRIO, RLIMIT_FSIZE, RLIMIT_AS et RLIMIT_NOFILE.

OPTIONS
       -c, --command=commande
           Passer une commande à l’interpréteur de commandes avec l'option -c.

       -f, --fast
           Passer -f à l’interpréteur de commandes, ce qui pourrait être utile ou non suivant l’interpréteur de commandes.

       -g, --group=groupe
           Indiquer le groupe primaire. Cette option n'est disponible que pour le superutilisateur.

       -G, --supp-group=groupe
           Indiquer un groupe supplémentaire.
           Cette option est réservée au superutilisateur.
           Le premier groupe supplémentaire spécifié est également utilisé comme groupe primaire si l'option --group n'est pas spécifiée.

       -, -l, --login
           Démarrer l’interpréteur de commandes comme un interpréteur de connexion avec un environnement similaire à une connexion réelle :

           •   efface toutes les variables d'environnement, à l'exception de TERM et des variables indiquées dans --whitelist-environment ;

           •   initialise les variables d'environnement HOME, SHELL, USER, LOGNAME et PATH ;

           •   se place dans le répertoire personnel de l'utilisateur cible ;

           •   définit argv[0] pour l’interpréteur de commandes à « - » pour faire de l’interpréteur de commandes un interpréteur de connexion.

       -m, -p, --preserve-environment
           Préserver la totalité de l'environnement, c'est à dire ne pas définir HOME, SHELL, USER ou LOGNAME. Cette option est ignorée si l'option --login est indiquée.

       -P, --pty
           Créer un pseudo-terminal pour la session.
           Le terminal indépendant assure une meilleure sécurité, car l'utilisateur ne partage pas le terminal avec la session d'origine.
           Cela permet d'éviter une injection d’ioctl TIOCSTI de terminal et d'autres attaques de sécurité à l'encontre des descripteurs de fichier du terminal.
           Il est également possible de mettre la session entière en arrière-plan (par exemple, su --pty - nom_utilisateur -c application &).
           Si le pseudo-terminal est activé, alors su fonctionne comme un serveur mandataire entre les sessions (avec une copie de l'entrée et de la sortie standards).

           La plupart du temps, cette fonctionnalité est conçue pour des sessions interactives.
           Si l'entrée standard n'est pas un terminal, mais une redirection (« pipe ») (par exemple, echo "date" | su --pty), alors le drapeau ECHO du pseudo-terminal est désactivé pour éviter une sortie désordonnée.

       -s, --shell=shell
           Exécuter l’interpréteur de commandes shell indiqué au lieu de celui par défaut.
           L’interpréteur de commandes à exécuter est sélectionné d’après les règles suivantes dans cet ordre :

           •   l'interpréteur de commandes indiqué avec --shell ;

           •   l'interpréteur de commandes indiqué dans la variable d'environnement SHELL, si l'option --preserve-environment est utilisée ;

           •   l'interpréteur de commandes listé dans l'entrée passwd de l'utilisateur cible.

           •   /bin/sh

       Si l'utilisateur cible a un interpréteur de commandes restreint (c’est-à-dire non listé dans /etc/shells), l'option --shell et la variable d'environnement SHELL est ignorée sauf si l'utilisateur appelant estle superutilisateur.

       --session-command=commande
           Comme -c, mais sans créer de nouvelle session (déconseillé).

       -w, --whitelist-environment=liste
           Ne pas réinitialiser les variables d'environnement spécifiées dans la liste séparées par des virgules lors du nettoyage de l'environnement pour --login (une connexion).
           La liste blanche est ignorée pour les variables d'environnement HOME, SHELL, USER, LOGNAME et PATH.

       -h, --help
           Afficher l’aide-mémoire puis quitter.

       -V, --version
           Afficher la version puis quitter.

SIGNAUX
       Dès la réception de SIGINT, SIGQUIT ou de SIGTERM, su termine son processus enfant et puis se termine lui-même avec le signal reçu.
       Le processus enfant est terminé par SIGTERM, après un essai infructueux et deux secondes de délai, le processus enfant est tué par SIGKILL.

FICHIERS DE CONFIGURATION
       su lit les fichiers de configuration /etc/default/su et /etc/login.defs.
       Les éléments de configuration suivants sont significatifs pour su :

       FAIL_DELAY (nombre)
           Délai en secondes en cas d'échec d'authentification.
           Le nombre doit être un entier non-négatif.

       ENV_PATH (chaîne)
           Définit la variable d'environnement PATH pour un utilisateur ordinaire.
           La valeur par défaut est /usr/local/bin:/bin:/usr/bin.

       ENV_ROOTPATH (chaîne), ENV_SUPATH (chaîne)
           Définit la variable d'environnement PATH pour le superutilisateur.
           ENV_SUPATH est prioritaire.
           La valeur par défaut est /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin.

       ALWAYS_SET_PATH (booléen)
           Si définie à yes et que ni --login, ni --preserve-environment n’étaient indiquées, su initialise PATH.

           La variable d'environnement PATH peut être différente sur des systèmes où /bin et /sbin sont fusionnés dans /usr ;
            cette variable est aussi affectée par l'option --login de la ligne de commandes et le paramétrage du système PAM (c'est-à-dire, pam_env(8)).

CODE DE RETOUR
       su renvoie normalement le code de retour de la commande exécutée.
       Si lacommande a été tuée par un signal, su renvoie le numéro du signal plus 128.

       Le code de retour généré par su lui-même est un des suivants :

       1
           Erreur générique avant l'exécution de la commande demandée

       126
           La commande demandée n'a pas pu être exécutée

       127
           La commande demandée n'a pas été trouvée

FICHIERS
       /etc/pam.d/su
           fichier de configuration de PAM par défaut

       /etc/pam.d/su-l
           fichier de configuration de PAM si --login est spécifié

       /etc/default/su
           fichier de configuration logindef spécifique à la commande

       /etc/login.defs
           fichier de configuration logindef général

NOTES
       Pour des raisons de sécurité, su enregistre toujours les tentatives de connexion échouées dans le fichier btmp, mais n'écrit pas du tout dans le fichier lastlog.
       Cette solution peut être utilisée pour contrôler le comportement de su avec la configuration de PAM.
       Si vous voulez utiliser le module pam_lastlog(8) pour afficher des messages d'avertissement sur les échecs de connexions, alors pam_lastlog(8) doit être configuré pour mettre aussi à jour le fichier lastlog.
         Par exemple avec :
           session required pam_lastlog.so nowtmp

HISTORIQUE
       Cette version de la commande su est dérivée de su de coreutils, qui était basée sur une implémentation de David MacKenzie.
       La version util-linux a été remaniée par Karel Zak.

VOIR AUSSI
       setpriv(1), login.defs(5), shells(5), pam(8), runuser(1)

SIGNALER DES BOGUES
       Pour envoyer un rapport de bogue, utilisez le système de gestion des problèmes à l'adresse https://github.com/util-linux/util-linux/issues.

DISPONIBILITÉ
       La commande su fait partie du paquet util-linux qui peut être téléchargé depuis Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.

TRADUCTION
       La traduction française de cette page de manuel a été créée par Christophe Blaess <ccb@club-internet.fr> et bubu <bubub@no-log.org>

       Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ concernant les conditions de copie et de distribution.
       Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à ⟨debian-l10n-french@lists.debian.org⟩.

Pour pouvoir comprendre l’utilité de l’option login de la commande su
il sera peut-être nécessaire d’aller lire les pages du manuel de la commande login
en lançant la ligne de commande suivante :

man login

Pour le tilde (~) utilisé avec l’interpréteur de commandes bash
voir la page concernée dans le manuel
en lançant la ligne de commande suivante :

man --pager='less -p "Développement du tilde"' bash
1 J'aime

cette fois-ci j’ai pigé le truc , qui n’est vraiment pas compliqué mais bon , le temps que ça arrive près des neurones concernés … un bon trimestre++ quand même ! . Du coup je viens de tester l’auto-complétion avec su et su - histoire d’nfoncer le clou .

merci pour ces info que je vais relire car cf ci-dessous .

ps : une fois encore j’ai parlé trop vite . Toujours curieux , voici une séquence que je n’avais pas prévue :

mm@Xfce:~/Documents$ cd casio_photo/
mm@Xfce:~/Documents/casio_photo$ cd
mm@Xfce:~$ echo ~
/home/mm
mm@Xfce:~$ su 
Mot de passe : 
root@Xfce:/home/mm# cd Documents/casio_photo/
root@Xfce:/home/mm/Documents/casio_photo# cd
root@Xfce:~# echo ~
/root
root@Xfce:~# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Je m’explique :

  • le 1er cd à partir de /home/mm me ramène bien à mon répertoire personnel
  • le 2ème cd , effectué à partir d’une console ouverte par su, ne me ramène pas à mon répertoire personnel mais me conduit à /root tout en restant avec un $PATH de l’utilisateur mm . D’ailleurs l’auto-complétion relative à Documents/casio_photo ne fonctionne plus après ce changement de répertoire , ce qui me semble normal .

Par contre :

mm@Xfce:~$ su
Mot de passe : 
root@Xfce:/home/mm# cd Documents/casio_photo/
root@Xfce:/home/mm/Documents/casio_photo# cd ..
root@Xfce:/home/mm/Documents# cd ..
root@Xfce:/home/mm# 

j’arrête là car je ne pense pas que tout ça ça présente un grand intérêt .

1 J'aime

Oui, quand tu es sous le compte root le compte utilisateur courant est root
alors la commande echo ~ retourne le chemin absolu du répertoire personnel du compte root qui est : /root

Et si, comme ci-dessous, le compte utilisateur courant est mic,
alors la commande echo ~ retournera le chemin absolu du répertoire personnel du compte utilisateur mic qui est /home/mic

mic@deb1156:~$ echo ~
/home/mic
mic@deb1156:~$ 

Et ce, quel que soit le répertoire courant :
Ci-dessous, pour cet exemple,
j’utilise la commande cd pour changer le répertoire courant par le répertoire /usr/bin
et ensuite je lance la commande echo ~

mic@deb1156:~$ cd /usr/bin
mic@deb1156:/usr/bin$ echo ~
/home/mic
mic@deb1156:/usr/bin$ 

ok ! avec su la valeur de ~ me ramène au répertoire courant et non pas au répertoire personnel que je vois d’affiché sous la forme /home/mm. Comme quoi j’ai encore du boulot pour que ce soit clair .

merci pour l’explication .

Non : Après que la commande su a été exécutée :

mm@Xfce:~$ su 
Mot de passe : 
root@Xfce:/home/mm#

on voit dans le prompt que le compte utilisateur courant (qui était mm )est maintenant : root
(et on voit aussi dans le prompt que le répertoire courant n’a pas changé).

Mais après que la commande su a été exécutée,
le compte utilisateur courant a changé : c’est maintenant root (alors qu’avant c’était mm )
alors, comme le répertoire personnel du compte utilisateur root est /root
le tilde sera maintenant remplacé dans les lignes de commandes par /root


Un truc :
Si tu as un doute, quand tu as tapé un tilde dans une ligne de commande(s)
juste après avoir tapé ta ligne de commande(s) ( et avant de taper sur Entrée)
déplace le curseur sur le caractère tilde,
et appuie sur la touche Échap et de suite après, appuie sur la touche &


D’autre part :

La valeur assignée à la variable d’environnement nommée USER
est le nom du compte utilisateur courant.
Pour faire s’afficher la valeur de cette variable :

echo $USER

La valeur assignée à la variable d’environnement nommée HOME
est le chemin absolu du répertoire personnel du compte utilisateur courant.
Pour faire s’afficher la valeur de cette variable :

echo $HOME

La valeur assignée à la variable d’environnement nommée PWD
est le chemin absolu du répertoire courant.
Pour faire s’afficher la valeur de cette variable :

echo $PWD
1 J'aime

j’aurais dû lire ceci avec un peu plus d’attention et je n’aurais pas affecté au tilde la valeur qu’il remplaçait « géographiquement » en quelque sorte . Et donc la commande cd utilisée seule fait bien le même travail dans les deux cas ci-dessus : elle conduit au répertoire personnel de l’utilisateur courant .

OUI, c’est tout à fait ça :

Si la commande cd est lancée seule, alors la commande cd va changer de répertoire courant
pour aller dans le répertoire personnel du compte utilisateur courant

salut
tant qu’on y est :
quelle est la différence entre sudo -s et su - ? ( Evidemment quand l’utilisateur est du groupe sudo )
je n’en voit qu’une :
après sudo -s on reste dans le dossier où on est ; avec su - on va dans /root

Bonjour

Avec la commande su
l’option - (tiret moins) est une des options courtes équivalentes à l’option longue --login
Voir :

man --pager='less -p "--login$"' su

Avec la commande sudo
l’option longue --login fait la même chose qu’avec la commande su
mais l’option courte équivalente est l’option -i
Voir :

man --pager='less -p "--login$"' sudo

Ce n’est pas seulement et simplement une histoire de valeur de PATH et de répertoire courant,
c’est surtout que l’option --login de ces deux commandes permet d’obtenir un login shell
(sous le compte utilisateur root si aucun autre nom de compte utilisateur n’a été spécifié).


Avec la commande sudo
l’option -s est l’option courte équivalente à l’option longue --shell
Cette option permet de spécifier le shell qui sera utilisé.
Voir :

man --pager='less -p "--shell$"' sudo
1 J'aime

« sudo -s » lance un shell mais ne permet pas directement de spécifier lequel. La différence avec « sudo -i » est que le shell n’est pas lancé en tant que shell de connexion (login shell).

Fort intéressant. Ceci étant il se trouve que sudo est pratiquement utilisé dans 9 cas sur 10 sous la forme sudo commande a exécuter …
Personnellement je n’utilise jamais su, presque toujours sudo mais il m’arrive aussi d’utiliser ssh si je n’ai pas envie de taper de mot de passe.

fp2@debpacha:~/.local/share/applications$ ssh root@localhost pwd
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:UN6vSlmphWYOvtU3Gr+JDiPro6FNTofHzG4Z7dB45rM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
/root
fp2@debpacha:~/.local/share/applications$ ssh root@localhost id
uid=0(root) gid=0(root) groupes=0(root)
fp2@debpacha:~/.local/share/applications$
fp2@debpacha:~/.local/share/applications$ ssh root@localhost
Linux debpacha 5.10.0-20-amd64 #1 SMP Debian 5.10.158-2 (2022-12-13) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Apr  1 20:53:43 2021 from ::1
root@debpacha:~#
déconnexion
Connection to localhost closed.
fp2@debpacha:~/.local/share/applications$

S’il n’y a pas de commande à exécuter, on arrive sur un shell de connexion très explicite avec le rappel de la date de la dernière connexion :slight_smile:

Bonne année 2023 à tous.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Il est souvent trop tôt pour savoir s’il n’est pas trop tard. »
Pierre Dac

« Rien ne sert de penser, faut réfléchir avant. »
Pierre Dac

Par défaut, et pour des raisons de sécurité, dans le fichier de configuration du serveur openssh :
/etc/ssh/sshd_config
la valeur prohibit-password est assignée à la directive PermitRootLogin

Par défaut, il n’est donc pas possible d’utiliser le serveur ssh pour se connecter sous le compte root

Voir :

man --pager='less -p "PermitRootLogin$"' sshd_config

Pour ouvrir un login-shell sous le compte root :

  • Si au cours de l’installation de ton système debian tu n’as pas créé un mot de passe pour le compte root alors, le premier compte utilisateur non privilégié qui aura été créé ensuite fera partie de la liste des comptes utilisateurs du groupe sudo ce qui permet à ce compte utilisateur d’accéder aux privilèges du compte root en utilisant la commande sudo
    Donc, depuis ce compte utilisateur, tu pourras utiliser la ligne de commande suivante :
sudo --login
  • Mais si au cours de l’installation de ton système debian tu as donné un mot de passe au compte root
    utilises la ligne de commande suivante :
su --login
1 J'aime

sudo peut être configuré pour ne pas demande de mot de passe.

« PermitRootLogin prohibit-password » interdit seulement l’authentification par mot de passe, pas par clé. Or l’objectif de @littlejohn75 est justement de ne pas devoir taper de mot de passe.