簡體   English   中英

腳本的管理員權限

[英]Admin privileges for script

如何在運行期間檢查腳本的管理員權限?

在我們的細粒度權限控制日中,“管理員權限”的概念變得越來越難以定義。 如果您使用“傳統”訪問控制模型在unix上運行,那么獲取有效的用戶ID(在os模塊中可用)並檢查根目錄(0)可能就是您要查找的內容。 如果您知道訪問系統上的文件需要您希望腳本具有的權限,則可以使用os.access()來檢查您是否有足夠的特權。

遺憾的是,沒有簡單易行的方法可供選擇。 您需要找出或定義所使用的安全模型,提供的API可用於查詢和設置權限,並嘗試找到(或可能實現自己)可用於訪問API的相應python模塊。

經典問題,你為什么要找出來? 如果您的腳本嘗試執行它需要執行的操作並“正好”捕獲並正確處理故障,該怎么辦?

在Unix上,您可以使用os.getuid函數檢查您是否是root用戶:

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

如果您只是想查看是否有權訪問某個需要管理權限的文件,那么檢查的好方法是:

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

on Unix, or is a member of the Administrators group on Windows. 當然,此方法僅檢測用戶是否是Unix上的用戶,或者是Windows上Administrators組的成員。 但是,在我看來,這對於大多數目的來說已經足夠了。

另請注意,這將在2000以下的Windows版本以及Windows ME上失敗,因為這些是基於DOS的Windows版本,並且沒有任何權限概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM