Sous Ubuntu 12.04, lorsque sudo -s
la variable $ HOME n’est pas modifiée, si mon utilisateur habituel l’est regularuser
, la situation est la suivante:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
J'ai abandonné Ubuntu il y a longtemps, donc je ne peux pas en être sûr, mais je pense que c'est le comportement par défaut. Donc, mes questions sont:
Q1. Comment est-ce fait? Où est la config?
Q2. Comment puis-je le désactiver?
Edit: Merci pour les réponses, ce qui clarifie un peu les choses, mais je suppose que je dois ajouter quelques questions, pour obtenir la réponse que je cherche.
Q3. Dans Debian sudo -s
, remplace la variable $ HOME par /root
. D'après ce que je tire des réponses et man sudo
du shell, celui qui a été utilisé sudo -s
est celui donné /etc/passwd
, non?
Q4. Cependant, sur Ubuntu et Debian, le shell indiqué /etc/passwd
pour root est /bin/bash
. Dans les deux systèmes également, je ne peux pas trouver où la différence .profile
ou les .bashrc
fichiers est, en ce qui concerne $ HOME, de sorte que le comportement est sudo -s
différent. Toute aide sur ceci?
sudo
Debian et Ubuntu se comportent différemment.sudo
, je pense qu’il ya effectivement une différence par défaut. Cependant, je ne parie pas là-dessus, car je suis sur une boîte qui a été configurée par quelqu'un d'autre et qui fonctionne depuis un certain temps. En tout cas, pour ceux que ça intéresse, j'ai trouvé security.stackexchange.com/questions/18369/… et bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 .Réponses:
Sudo dispose de nombreuses options de configuration à la compilation. Vous pouvez lister les paramètres de votre version avec
sudo -V
. Une des différences entre la configuration dans Debian Wheezy et dans Ubuntu 12.04 est que laHOME
variable d’environnement est préservée dans Ubuntu mais pas dans Debian; les deux distributions effacent toutes les variables d'environnement, à l'exception de quelques-unes qui sont explicitement désignées comme sûres à préserver. Ainsi, sur Ubuntu, il estsudo -s
préservéHOME
, tandis que DebianHOME
est effacé,sudo
puis défini dans le répertoire de base de l'utilisateur cible.Vous pouvez remplacer ce comportement dans le
sudoers
fichier. Exécutervisudo
pour éditer lesudoers
fichier. Il existe plusieurs options pertinentes:env_keep
détermine quelles variables d'environnement sont préservées. UtilisezDefaults env_keep += "HOME"
pour conserverHOME
ouDefaults env_keep -= "HOME"
effacer la variable d'environnement de l'appelant (et la remplacer par le répertoire de base de l'utilisateur cible).env_reset
détermine si les variables d'environnement sont réinitialisées. La réinitialisation des variables d'environnement est souvent nécessaire pour les règles autorisant l'exécution d'une commande spécifique, mais ne présente pas d'avantage en termes de sécurité directe pour les règles autorisant l'exécution de commandes arbitraires.always_set_home
, si défini, provoqueHOME
le remplacement même s'il a été préservé du fait deenv_reset
son désactivation ou de sonHOME
insertion dans laenv_keep
liste. Cette option n'a aucun effet si elleHOME
n'est pas conservée.set_home
est commealways_set_home
, mais s’applique seulement àsudo -s
, pas lorsqu’on appellesudo
avec une commande explicite.Ces options peuvent être définies pour un utilisateur source donné, un utilisateur cible donné ou une commande donnée. voir le
sudoers
manuel pour plus de détails.Vous pouvez toujours choisir de remplacer
HOME
un appel donnésudo
en passant l'option-H
.Le shell ne remplacera jamais la valeur de
HOME
. (Cela définiraitHOME
s'il était non défini , maissudo
définissait toujours d'HOME
une manière ou d'une autre.)Si vous exécutez
sudo -i
,sudo
simule une connexion initiale. Cela inclut la définitionHOME
du répertoire de base de l'utilisateur cible et l'appel d'un shell de connexion .la source
Utilisez
sudo -H -i
au lieu desudo -s
pour obtenir un shell racine de connexion interactif:De
man sudo
:la source
-i
implique-H
.Cela a peu à voir avec le comportement
sudo
et beaucoup avec la différence entre un "shell de connexion" et un "shell de non-connexion". La solution rapide estcomme on peut le voir avec:
Comme indiqué dans le manuel sudo:
la source
HOME
ou non a tout à voir avec la configuration de sudo./etc/sudoers
ce qui concerne $ HOME, il n’ya rien de différent entre Debian et Ubuntu.always_set_home
etset_home
danssudoers
.Un moyen très répandu d’obtenir le shell root utilise également:
la source
sudo -i -H
, mais cela a échoué avec l'installation d'un paquet npm global à partir de git. Avecsudo su -
ça marche! Merci.Pour vous débarrasser des comportements différents d’
sudo -s
Ubuntu et de Debian, vous pouvez utiliser unsudo
wrapper (réponse à la question 4):la source