Вопрос

как я могу проверить права администратора для моего скрипта во время запуска?

Это было полезно?

Решение

В Unix вы можете проверить, являетесь ли вы root, используя операционная система.getuid функция:

os.getuid() == 0 and "root" or "not root"

Другие советы

Понятие "привилегии администратора" в наши дни мелкозернистого контроля привилегий становится трудно поддающимся определению.Если вы работаете в unix с "традиционной" моделью управления доступом, получение эффективного идентификатора пользователя (доступного в модуле os) и проверка его на соответствие root (0) может быть тем, что вы ищете.Если вы знаете, что для доступа к файлу в системе требуются привилегии, которые вы хотите предоставить своему сценарию, вы можете использовать os.access(), чтобы проверить, достаточно ли у вас привилегий.

К сожалению, не существует простого или переносимого метода для предоставления.Вам нужно выяснить или определить используемую модель безопасности, какие системные API доступны для запроса и установки привилегий и попытаться найти (или, возможно, реализовать самостоятельно) соответствующие модули python, которые можно использовать для доступа к API.

Классический вопрос: зачем вам это нужно выяснить?Что, если ваш скрипт пытается делать то, что ему нужно, и "просто" улавливает и должным образом обрабатывает сбои?

Если вы просто пытаетесь узнать, есть ли у вас доступ к определенному файлу, для которого требуются права администратора, хорошим способом проверки было бы:

import os
print os.access("/path/to/file", os.W_OK) 
#replace W_OK with R_OK to test for read permissions

С другой стороны, если вам действительно нужно знать, является ли пользователь учетной записью администратора, вы также можете использовать этот код в Windows 2000 и выше:

import ctypes
print ctypes.windll.shell32.IsUserAnAdmin()

Следовательно, лучшим кроссплатформенным способом узнать, является ли пользователь администратором, является:

import ctypes, os
try:
 is_admin = os.getuid() == 0
except:
 is_admin = ctypes.windll.shell32.IsUserAnAdmin()

print is_admin

Конечно, этот метод определит, только если пользователь находится корень в Unix или является членом группы администраторов в Windows.Однако, на мой взгляд, этого достаточно для большинства целей.

Также обратите внимание, что это приведет к сбою в версиях Windows ниже 2000, а также в Windows ME, поскольку это версии Windows на базе DOS и не имеют никакого понятия о разрешениях.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top