2009-05-17 35 views

答えて

5

あなたがos.getuid機能を使用して、ルートであるかどうかをチェックすることができます。

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

きめ細かい権限コントロールの私達の日に「管理者 - 特権」の概念を定義するのは難しいとなってきています。 UNIX上で "従来の"アクセス制御モデルを使用している場合、有効なユーザーID(osモジュールで利用可能)を取得し、root(0)と照合することで、探しているものになる可能性があります。システム上のファイルにアクセスするためにスクリプトに必要な権限が必要な場合は、os.access()を使用して十分な特権があるかどうかを調べることができます。

残念ながら、簡単で移植性の高い方法はありません。使用するセキュリティモデル、APIにアクセスして特権を照会して設定するために提供されたシステム、APIにアクセスするために使用できる適切なPythonモジュールを探す(またはおそらく自分自身を実装する)システムを見つけ出すか、定義する必要があります。

古典的な質問は、なぜあなたが知る必要がありますか?あなたのスクリプトが何をする必要があるのか​​を試み、「ちょうど」、失敗を適切に処理して処理したらどうでしょうか?あなたはちょうどあなたが管理者権限を必要とする特定のファイルへのアクセス権を持っているかどうかを確認しようとしている場合

+0

+1。すべての有効な考慮事項。実際には、失敗に取り組むだけで良い場合もあります。 – Stephan202

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 

もちろん、この方法では、ユーザーが root(UNIXの場合)、またはWindowsのAdministratorsグループのメンバであるかどうかだけを検出します。しかし、私の意見では、これはほとんどの目的には十分です。

DOSベースのバージョンのWindowsであり、アクセス許可の概念がないため、2000未満のWindowsおよびWindows MEではこれが失敗することに注意してください。

関連する問題