web-dev-qa-db-fra.com

Debian Su - et Su $ Cath Différences?

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

8
user1095108

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.

17
scai

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 le ENV_PATH et ENV_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)

1
A.B