Права администратора для скрипта - PullRequest
2 голосов
/ 17 мая 2009

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

Ответы [ 3 ]

7 голосов
/ 17 мая 2009

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

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

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

5 голосов
/ 17 мая 2009

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

os.getuid() == 0 and "root" or "not root"
3 голосов
/ 18 мая 2009

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

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

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

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

...