2014-08-30 14 views
6

Von the docs:Wie Sie `site.ENABLE_USER_SITE` für eine Umgebung deaktivieren?

site.ENABLE_USER_SITE

Flag den Status des Benutzers site-packages-Verzeichnis zeigt. True bedeutet, dass es aktiviert ist und zu sys.path hinzugefügt wurde. False bedeutet, dass es durch Benutzeranforderung deaktiviert wurde (mit -s oder PYTHONNOUSERSITE). Keine bedeutet, dass es aus Sicherheitsgründen (fehlende Übereinstimmung zwischen Benutzer- oder Gruppen-ID und effektiver ID) oder von einem Administrator deaktiviert wurde.

Ich bin besonders interessiert an der Phrase oder von einem Administrator. Auf Computern, auf denen ich Administrator bin (d. H. Mein eigener), wie deaktiviere ich diese Option global für eine bestimmte ausführbare Datei eines Interpreters?

Der Grund, warum ich dies tun wollen ist, dass neue Conda Umgebungen verlassen diese aktiviert: https://github.com/conda/conda/issues/448

Antwort

6

Der Wert dieser Variablen wird vollständig in Python code bestimmt:

def check_enableusersite(): 
    """Check if user site directory is safe for inclusion 

    The function tests for the command line flag (including environment var), 
    process uid/gid equal to effective uid/gid. 

    None: Disabled for security reasons 
    False: Disabled by user (command line option) 
    True: Safe and enabled 
    """ 
    if sys.flags.no_user_site: 
     return False 

    if hasattr(os, "getuid") and hasattr(os, "geteuid"): 
     # check process uid == effective uid 
     if os.geteuid() != os.getuid(): 
      return None 
    if hasattr(os, "getgid") and hasattr(os, "getegid"): 
     # check process gid == effective gid 
     if os.getegid() != os.getgid(): 
      return None 

    return True 

Der erste Test ist einfach für die -s Switch oder die Umgebungsvariable PYTHONNOUSERSITE wurde verwendet.

Was übrig bleibt, sind die Tests, die None zurückgeben, wenn die effektive Benutzer-ID oder Gruppen-ID von der Prozess-Benutzer-ID oder Gruppen-ID abweicht.

Ein Administrator kann set the effective user id or group id bits, an diesem Punkt wird der effektive Benutzer der ausführbaren Datei in den Besitzer oder die Gruppe der ausführbaren Datei anstelle des Benutzers geändert, der Python ausführt, zu welchem ​​Zeitpunkt die obige Funktion None zurückgibt.

Ansonsten könnte ein sitecustomize.py-Paket den Wert wieder auf None setzen und Benutzerverzeichnisse explizit aus dem Pfad entfernen. Ist dies der Fall, wird der Importschritt usercustomize.py übersprungen.

+0

Ja, ich habe das gesehen. Die Dokumente scheinen zu implizieren, dass es eine andere Möglichkeit gibt: "Keine bedeutet, dass sie aus Sicherheitsgründen deaktiviert wurde (fehlende Übereinstimmung zwischen Benutzer- oder Gruppen-ID und effektiver ID) * oder * von einem Administrator." Das bedeutet, dass es neben dem Ändern der Benutzer-/Gruppen-ID noch eine andere Möglichkeit gibt. – ontologist

+0

@ontologist: die obige Implementierung ist, was tatsächlich passieren wird. Da das Setzen der effektiven Benutzer-/Gruppenbits eine Administratoraktion ist, denke ich, dass die Dokumentation darauf (ineffektiv) anspielt. –

+0

Ja, das kann der Fall sein. Obwohl, keine dieser Lösungen ist sehr praktisch. Umgebungsvariablen sind nicht Interpreter-spezifisch, die Verwendung eines Befehlszeilen-Flags ist immer fragil, und die Änderung der Benutzer-/Gruppen-ID hat andere Auswirkungen. – ontologist

Verwandte Themen