2014-08-30 2 views
6

От the docs:Как отключить `site.ENABLE_USER_SITE` для среды?

site.ENABLE_USER_SITE

Флаг, показывающий статус каталога сайта-пакетов пользователя. True означает, что он включен и добавлен в sys.path. False означает, что он был отключен по запросу пользователя (с -s или PYTHONNOUSERSITE). Никто не означает, что он был отключен по соображениям безопасности (несоответствие между идентификатором пользователя или группы и эффективным идентификатором) или администратором.

Меня особенно интересует фраза или администратором. На машинах, на которых я являюсь администратором (например, мой собственный), как отключить этот параметр во всем мире, для конкретного исполняемого файла интерпретатора?

Причина, почему я хочу сделать это в том, что новые среды Конда оставить включенным: https://github.com/conda/conda/issues/448

ответ

6

Значение этой переменной определяется только в Python code:

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 

Первый тест просто для -s или используемая переменная окружения PYTHONNOUSERSITE.

Что остается, тесты, которые возвращают None, если эффективный идентификатор пользователя или groupid отличается от процесса userid или groupid.

Администратор может set the effective user id or group id bits, после чего действительный пользователь исполняемого файла будет изменен на владельца или группу исполняемого файла, а не на пользователя, выполняющего Python, после чего указанная выше функция вернет None.

Кроме этого, пакет sitecustomize.py может снова установить значение None и явно удалить каталоги пользователей с пути. Если это так, шаг импорта usercustomize.py пропускается.

+0

Да, я видел это. Документы, похоже, подразумевают, что есть другой способ: «Нет, это означает, что он был отключен по соображениям безопасности (несоответствие между идентификатором пользователя или группы и эффективным идентификатором) * или * администратором». Это означает, что есть другой способ, помимо изменения идентификатора пользователя/группы. – ontologist

+0

@ontologist: вышеупомянутая реализация - это то, что на самом деле произойдет. Поскольку установка эффективных битов пользователя/группы - это действие администратора, я думаю, что это то, что документация (неэффективно) ссылается на. –

+0

Да, это может быть так. Хотя, ни одно из этих решений не очень удобно. Переменные среды не являются специфичными для интерпретатора, всегда используется флаг командной строки, который является хрупким, а изменение идентификатора пользователя/группы имеет другие эффекты. – ontologist

Смежные вопросы