$ su -
Password:
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# exit
logout
$ su
Password:
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Je ne sais pas pourquoi/bin et/sbin ne sont pas ajoutés à $PATH
, si je fais la plaine su. Cela était le cas. Comment puis-je réparer cela? J'ai remarqué que:
-rw-r--r-- 1 root root 0 Jan 8 2018 /etc/environment
Mais sinon mon système semble normal.
EDIT: J'ai oublié l'obligatoire uname -a
Linux rpi3 4.17.0-1-arm64 #1 SMP Debian 4.17.8-1 (2018-07-20) aarch64 GNU/Linux
EDIT2:
$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l
tous les paquets proviennent du repo "Test", car "stable" ne fonctionnent pas très bien sur Aarch64.
Très récemment (avec la version 2.32-0.2 de util-linux
À partir du 27 juil 2018) Debian est passé à une implémentation différente su
, voir Bug 833256 . Le "nouveau" su
est de util-linux
Tandis que "l'ancien" était contenu dans le package login
et est originaire de src:shadow
Citant de util-linux/NEWS.Debian.gz
:
Les deux implémentations sont très similaires, mais ont des différences mineures (et il pourrait y avoir plus que cela n'était pas encore remarqué), par ex.
- nouveau 'Su' (sans arguments, c'est-à-dire lors de la préservation de l'environnement) préserve également le chemin et l'IFS, tandis que OLD SU réinitialiserait toujours le chemin et l'IFS même dans le mode "Conserver l'environnement".
- su '' (chaîne d'utilisateur vide) utilisée pour donner une racine, mais renvoie maintenant une erreur.
- auparavant, SU a seulement eu une configuration PAM, mais maintenant 'Su -' est configuré séparément dans /etc/pam.d/su-l
La première différence est probablement l'utilisateur le plus visible. Doing 'Su' est une très mauvaise idée pour de nombreuses raisons, il est donc fortement recommandé d'utiliser "Su -" pour toujours obtenir un environnement nouvellement configuré comme une connexion normale. Si vous souhaitez restaurer le comportement plus similaire au précédent, vous pouvez ajouter 'TOUJOURS_SET_PATH OUI' dans /etC/Login.defs.
La mise en oeuvre précédemment utilisée su
s'est comportée différemment concernant PATH
. Ceci est également discuté dans ce rapport de bogue, voir 833256 # 8 . Le nouveau su
conserve PATH
if non Invoqué avec su -
.
En bref: l'ancien _ debian su
s'est comporté comme su -
, Au moins concernant PATH
. Avec la nouvelle implémentation, vous devriez presque toujours utiliser su -
, Similaire à d'autres distributions.
Le Debian su
Manpage raconte:
L'environnement actuel est transmis à la nouvelle coquille. La valeur de
$PATH
est réinitialisé à/bin:/usr/bin
pour les utilisateurs normaux, ou/sbin:/bin:/usr/sbin:/usr/bin
pour le superutilisateur. Cela peut être changé avec leENV_PATH
etENV_SUPATH
Définitions dans/etc/login.defs
.
Citant de /etc/login.defs
:
# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH. # If unspecified, some arbitrary (and possibly incorrect) value will # be assumed. All other items are optional - if not specified then
Sur un système de Debian normal, les variables sont définies dans/etc/login.defs
:
#
# *REQUIRED* The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the Shell startup files)
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Tests en commentant ENV_SUPATH
reproduit partiellement votre problème: su
_ n'aura pas /sbin
(ni /usr/local/bin
) tandis que su -
exécutera le script de connexion /etc/profile
qui va redéfinir PATH
comme prévu pour l'utilisateur racine.
Donc, vous devriez vérifier toute modification de /etc/login.defs
et corrigez-le, ou voir si une autre partie modifie la version PATH
plus tard (comme un script de démarrage shell tel que certains scripts BASHRC non-connexion)