脚本的管理员权限

发布于 2024-07-20 20:14:59 字数 25 浏览 6 评论 0原文

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

how can i check admin-privileges for my script during running?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

愛放△進行李 2024-07-27 20:15:00

在 Unix 上,您可以使用 os.getuid 功能:

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

On Unix you can check whether you are root using the os.getuid function:

os.getuid() == 0 and "root" or "not root"
怀念你的温柔 2024-07-27 20:15:00

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

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 上管理员组的成员。 然而,在我看来,这对于大多数目的来说已经足够了。

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

If you're just trying to see if you have access to a certain file that requires administrative rights, a good way to check would be:

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

On the other hand, if you really need to know if a user is an administrative account, you can also use this code on Windows 2000 and higher:

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

Therefore, a better, cross-platform way to find out if an user is an administrator is:

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

print is_admin

Of course, this method will only detect if the user is root on Unix, or is a member of the Administrators group on Windows. However, this is sufficient for most purposes, in my opinion.

Also note that this will fail on Windows versions below 2000, as well as Windows ME, since those are DOS-based versions of Windows and don't have any notion of permissions.

一念一轮回 2024-07-27 20:14:59

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

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

经典问题,为什么需要找出答案? 如果您的脚本尝试做它需要做的事情并且“只是”捕获并正确处理失败怎么办?

The concept of "admin-privileges" in our day of fine grained privilege control is becoming hard to define. If you are running on unix with "traditional" access control model, getting the effective user id (available in os module) and checking that against root (0) could be what you are looking for. If you know accessing a file on the system requires the privileges you want your script to have, you can use the os.access() to check if you are privileged enough.

Unfortunately there is no easy nor portable method to give. You need to find out or define the security model used, what system provided APIs are available to query and set privileges and try to locate (or possibly implement yourself) the appropriate python modules that can be used to access the API.

The classic question, why do you need to find out? What if your script tries to do what it needs to do and "just" catches and properly handles failures?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文