Que fait sudo - h?

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

$ pip install virtualenv

J'ai reçu une erreur d'Autorisation refusée

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 un avertissement est apparu:

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

Le répertoire '/ Users / petertao / Library / Caches / pip ' ou son parent le répertoire 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 en exécutant pip avec sudo, vous voudrez peut-être le drapeau-h de sudo.

Que fait le drapeau-h de sudo?

22
demandé sur Peter Tao 2017-04-26 03:26:32

1 réponses

Généralement

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

- H

L'option-H (HOME) demande que la stratégie de sécurité définisse la variable D'environnement HOME sur le répertoire home de l'utilisateur cible (root par défaut) comme spécifié 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 change pas l'environnement $ HOME variable.

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 "à" root", mais pas ce que $HOME est défini, tandis qu'un sudo-H change également la variable de" mon " répertoire personnel au répertoire personnel de root.

Dans votre cas

Pip vous avertit qu'il a été exécuté en tant qu'utilisateur root et voulait modifier les choses dans $HOME, qui a été défini sur '/ Users / petertao' , qui n'appartient pas à root (très probablement l'utilisateur" petertao"). le avertissement indique que pip utilise $ HOME pour mettre en cache les fichiers, mais a désactivé sa propre mise en cache en raison de l'écart de propriété 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 plus tard, car un programme en cours d'exécution sans root ne pouvait plus écraser ou modifier ces fichiers. Au lieu de cela pip refuse d'écrire dans un répertoire appartenant à un autre utilisateur.

37
répondu user3141593 2018-05-02 14:03:17