脚本的管理员权限

时间:2009-05-17 12:09:48

标签: python unix root sudo

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

3 个答案:

答案 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版本,并且没有任何权限概念。