1. ホーム
  2. python

PythonでLinuxのファイルパーミッションをチェックする

2023-11-17 07:43:10

質問

ユーザーのディレクトリにあるファイルのパーミッションをチェックし、問題があれば警告を出すスクリプトを書いているのですが、ログインしているユーザーだけでなく、グループやその他のユーザーのパーミッションもチェックしたいのです。どうすればいいのでしょうか?どうやら os.access() はスクリプトを実行しているユーザーのパーミッションをチェックするだけです。

どのように解決するのですか?

あなたが正しいのは os.access のように、基礎となる アクセス syscall のように、特定のユーザー (suid 状況を助けるために、実効 ID ではなく実 ID) をチェックします。

os.stat は、ユーザー、グループ、その他のパーミッションを含む、ファイルに関するより一般的な情報を得るための正しい方法です。 その st_mode 属性は、そのオブジェクトの os.stat が返すオブジェクトはファイルのパーミッションビットを持ちます。

これらのビットを解釈しやすくするために stat モジュールを使うことができます。 具体的には、定義されたビットマスクが必要でしょう。 ここで を、そして & 演算子 (ビットアンド) を使って、その st_mode 属性の関連ビットをマスクするために使用します。たとえば、特定のファイルがグループ読み取り可能かどうかを True/False でチェックするだけなら、1 つのアプローチで可能です。

import os
import stat

def isgroupreadable(filepath):
  st = os.stat(filepath)
  return bool(st.st_mode & stat.S_IRGRP)

気をつけたいのは os.stat の呼び出しは多少コストがかかるので、興味のあるビットごとに呼び出しを繰り返すのではなく、一度の呼び出しで気になるすべての情報を抽出するようにしてください;-) 。