web-dev-qa-db-fra.com

Que fait Sudo -H?

Après avoir essayé d'installer virtualenv avec pip

$ pip install virtualenv

J'ai une permission refusée erreur

IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/virtualenv.py'

J'ai donc utilisé Sudo pour installer virtualenv

$ Sudo pip install virtualenv

Mais alors un avertissement est apparu:

Le répertoire '/ Users/petertao/Library/Caches/pip/http' ou son répertoire parent n'appartient pas à l'utilisateur actuel et le cache a été désactivé. Veuillez vérifier les autorisations et le propriétaire de ce répertoire. Si vous exécutez pip avec Sudo, vous voudrez peut-être le drapeau -H de Sudo.

Le répertoire '/ Users/petertao/Library/Caches/pip' ou son répertoire parent n'appartient pas à l'utilisateur actuel et la mise en cache des roues a été désactivée. vérifiez les autorisations et le propriétaire de ce répertoire. Si vous exécutez pip avec Sudo, vous voudrez peut-être le drapeau -H de Sudo.

Que fait le drapeau -H de Sudo?

38
Peter Tao

Généralement

man Sudo (le texte exact peut varier, mais il sera similaire):

-H

L'option -H (HOME) demande à la stratégie de sécurité de définir la variable d'environnement HOME sur le répertoire de base de l'utilisateur cible (racine par défaut), comme indiqué par la base de données de mots de passe. Selon la stratégie, il peut s'agir du comportement par défaut.

Alors, pourquoi est-ce même une option? Normalement, l'utilisation de "Sudo" ne modifie pas la variable d'environnement $ HOME.

par exemple:

 echo $HOME $USER
/home/testuser testuser

 Sudo bash -c 'echo $HOME $USER'
/home/testuser root

 Sudo -H bash -c 'echo $HOME $USER'
/home/root root

Vous pouvez voir qu'un Sudo normal change l'utilisateur que je suis de "testuser" en "root", mais pas ce que $ HOME est défini, alors qu'un Sudo -H modifie également la variable de "mon" répertoire de base pour le répertoire de base de root.

Dans ton cas

pip vous avertit qu'il a été exécuté en tant qu'utilisateur root et qu'il voulait modifier les éléments de $ HOME, qui était défini sur '/ Users/petertao', qui n'appartient pas à root (probablement l'utilisateur "petertao"). l'avertissement indique que pip utilise $ HOME pour mettre en cache les fichiers, mais qu'il a désactivé sa propre mise en cache en raison de la différence de propriétaire du dossier.

Bien sûr, lors de l'exécution en tant que root, pip peut modifier '/ Users/petertao/Library/Caches/pip' car root est (presque) tout puissant. Cela peut devenir gênant par la suite, car un programme exécuté sans racine ne pourrait plus écraser ou modifier ces fichiers. Au lieu de cela, pip refuse d'écrire dans un répertoire appartenant à un autre utilisateur.

62
user3141593