如何在运行期间检查脚本的管理员权限?
答案 0 :(得分:7)
在我们的细粒度权限控制日中,“管理员权限”的概念变得越来越难以定义。如果您使用“传统”访问控制模型在unix上运行,那么获取有效的用户ID(在os模块中可用)并检查根目录(0)可能就是您要查找的内容。如果您知道访问系统上的文件需要您希望脚本拥有的权限,则可以使用os.access()来检查您是否有足够的特权。
遗憾的是,没有简单易用的方法可供选择。您需要找出或定义所使用的安全模型,提供的API可用于查询和设置权限,并尝试找到(或可能实现自己)可用于访问API的相应python模块。
经典问题,你为什么要找出来?如果您的脚本尝试执行它需要执行的操作并且“只是”捕获并正确处理故障,该怎么办?
答案 1 :(得分:5)
在Unix上,您可以使用os.getuid函数检查您是否是root用户:
os.getuid() == 0 and "root" or "not root"
答案 2 :(得分: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版本,并且没有任何权限概念。