it-swarm.com.de

Was macht Sudo -H?

Nach dem Versuch, virtualenv mit pip zu installieren

$ pip install virtualenv

Ich habe einen Fehler mit verweigerter Erlaubnis erhalten

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

Also habe ich Sudo verwendet, um virtualenv zu installieren

$ Sudo pip install virtualenv

Aber dann zeigte sich eine Warnung:

Das Verzeichnis '/ Users/petertao/Library/Caches/pip/http' oder das übergeordnete Verzeichnis gehört nicht dem aktuellen Benutzer und der Cache wurde deaktiviert. Bitte überprüfen Sie die Berechtigungen und den Eigentümer dieses Verzeichnisses. Wenn Sie pip mit Sudo ausführen, möchten Sie möglicherweise das -H-Flag von Sudo.

Das Verzeichnis '/ Users/petertao/Library/Caches/pip' oder das übergeordnete Verzeichnis gehört nicht dem aktuellen Benutzer und die Zwischenspeicherung von Rädern wurde deaktiviert. Überprüfen Sie die Berechtigungen und den Eigentümer dieses Verzeichnisses. Wenn Sie pip mit Sudo ausführen, möchten Sie möglicherweise das -H-Flag von Sudo.

Was macht Sudos -H-Flag?

38
Peter Tao

Allgemein

man Sudo (der genaue Text kann variieren, wird aber ähnlich sein):

-H

Die Option -H (HOME) fordert die Sicherheitsrichtlinie auf, die Umgebungsvariable HOME auf das in der Kennwortdatenbank angegebene Basisverzeichnis des Zielbenutzers (standardmäßig root) festzulegen. Je nach Richtlinie kann dies das Standardverhalten sein.

Warum ist dies überhaupt eine Option? Normalerweise ändert die Verwendung von "Sudo" die Umgebungsvariable $ HOME nicht.

beispielsweise:

 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

Sie können sehen, dass ein normaler Sudo ändert, welcher Benutzer von "testuser" zu "root" ist, aber nicht, auf was $ HOME eingestellt ist, während ein Sudo -H auch die Variable von "my" zu "root" ändert.

In Ihrem Fall

pip warnt Sie, dass es als Benutzer root ausgeführt wurde und Dinge in $ HOME ändern wollte, das auf '/ Users/petertao' gesetzt war, das nicht root gehört (höchstwahrscheinlich dem Benutzer "petertao"). Die Warnung zeigt an, dass pip $ HOME zum Zwischenspeichern von Dateien verwendet, das Zwischenspeichern jedoch aufgrund der Unstimmigkeit der Ordnerbesitzrechte deaktiviert hat.

Natürlich kann während der Ausführung als root pip '/ Users/petertao/Library/Caches/pip' geändert werden, da root (fast) allmächtig ist. Dies kann später problematisch werden, da ein Programm, das ohne root ausgeführt wird, diese Dateien nicht mehr überschreiben oder ändern kann. Stattdessen weigert sich pip, in ein Verzeichnis zu schreiben, das einem anderen Benutzer gehört.

62
user3141593