2

如何在运行期间检查我的脚本的管理员权限?

4

3 回答 3

7

在我们这个细粒度权限控制的时代,“管理员权限”的概念变得难以定义。如果您在具有“传统”访问控制模型的 unix 上运行,那么获取有效的用户 ID(在 os 模块中可用)并针对 root (0) 进行检查可能是您正在寻找的。如果您知道访问系统上的文件需要您希望脚本拥有的权限,您可以使用 os.access() 来检查您是否有足够的权限。

不幸的是,没有简单或便携的方法可以提供。您需要找出或定义使用的安全模型、系统提供的 API 可用于查询和设置权限,并尝试定位(或可能自己实现)可用于访问 API 的适当 Python 模块。

经典的问题,为什么你需要找出来?如果您的脚本试图做它需要做的事情并且“只是”捕获并正确处理故障怎么办?

于 2009-05-17T12:34:19.063 回答
5

在 Unix 上,您可以使用os.getuid函数检查您是否是 root :

os.getuid() == 0 and "root" or "not root"
于 2009-05-17T12:14:17.363 回答
3

如果您只是想查看是否有权访问需要管理权限的某个文件,那么检查的好方法是:

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 上的root,还是 Windows 上的 Administrators 组的成员。但是,在我看来,这对于大多数目的来说已经足够了。

另请注意,这将在低于 2000 的 Windows 版本以及 Windows ME 上失败,因为它们是基于 DOS 的 Windows 版本并且没有任何权限概念。

于 2009-05-17T23:28:13.587 回答