2016-04-01 20 views
0

私のPythonプログラム(UbuntuとOS Xで動作)は、ファイルを/tmpディレクトリに置き、実行中のデーモンプロセスにそれらのファイルを読み込ませるよう指示します。Pythonの別のユーザの有効なアクセス権を確認する

デーモンプロセスは異なるユーザーのもとで実行され、私たちのコードではありません。

デーモンは、ファイルに対する読み取りと実行の権限がない場合には失敗しますが、親ディレクトリに対しても読み取り権限が必要です。

最初にアクセス権をチェックし、必要なアクセス許可がない場合は警告を出してください - 問題はos.access関数はPythonプロセスを実行しているユーザーのアクセス権のみを評価しています他のユーザーの有効な権限を取得する方法。

デーモンユーザーのアカウントのパスワードにアクセスすることもできないため、そのユーザーアカウントでサブプロセスを起動してos.accessを呼び出して結果を返すことはできませんが、管理者またはroot権限を持つユーザーです。あなたは

1.かどうかを確認したい

答えて

1

)デーモンのユーザーがファイルを所有し、権限

2.を実行+読み取った)デーモンのユーザーがファイルを所有し、グループを有することを特徴とするグループに属しています読み取り+実行のアクセス許可。

または、デーモンユーザーが+実行を許可するようにファイルのアクセス許可を設定するだけで、公理1と2を保証できます。これはおそらく最も簡単な方法です。

以下は、出発点となるサンプルコードです。私はそれを実行したり、それをテストしていません。

import pwd, grp, os 

DAEMON_USER = 'service-account' # unix user running the daemon 
FILE_PATH = '/tmp/somefile.sh' # these are the files your'e putting in tmp 

group_id_of_file = os.stat(FILE_PATH).st_gid # get id of group owner of the file 
file_owner = pwd.getpwuid(os.stat(FILE_PATH).st_uid) 
group_members = grp.getgrgid(group_id_of_file).gr_mem 

group_permissions = oct(os.stat(FILE_PATH).st_mode)[5:6] 
owner_permissions = oct(os.stat(FILE_PATH).st_mode)[4:5] 
if (file_owner == DAEMON_USER and owner_permissions >= 5) or (DAEMON_USER in group_members and group_permissions >= 5): 
    print "The daemon will be able to read and execute the file" 
else: 
    print "not good" 
関連する問題