0

Python モジュールを使用してディレクトリを作成しています。一部の種類のディレクトリでは、特定の制限付きアクセス許可を設定する必要があります。モジュールはスクリプトを通じて使用されます。スクリプトは、ユーザーまたはサーバー (root として) によって実行できます。

ディレクトリを作成し、その権限を変更して、十分な権限がないために OSError 例外をキャッチしようとする状況を回避したいと考えています。混乱が発生した後にそれを片付けようとする代わりに、最初から問題を防ぐ方が、アプリケーションにとってはるかに堅牢になります。実際に使用する前に、スクリプトを実行しているユーザーがグループ権限を持っているかどうかを判断する方法があることを願っています。

「通常の」ユーザーの場合、次のようなことができます。

OS のインポート
輸入グループ
mygroups = [os.getgroups() 内の x の grp.getgrgid(x).gr_name]

次に、必要なグループが mygroups に含まれていない場合は、正常に終了できます。

しかし、これは root ユーザーには機能しません。root ユーザーには権限がありますが、問題のグループのメンバーではない可能性があります。root 以外の例外があるかどうかはよくわからないので、単純に root ユーザー ID だけを対象とする例外を書くのは躊躇します。

Python 2.x で、現在のユーザーが特定のグループ権限を持っているかどうか (ディレクトリのアクセス権限と所有権を変更するため) を実際に使用しようとする (OSError をスローする) ことなく確認する堅牢な方法はありますか?

4

1 に答える 1

0

Python 2.x で、現在のユーザーが特定のグループ権限を持っているかどうか (ディレクトリのアクセス権限と所有権を変更するため) を実際に使用しようとする (OSError をスローする) ことなく確認する堅牢な方法はありますか?

多分; POSIX でプロセスのグループを実行時に外部から変更できるかどうかはわかりません。そうでない場合は、それを行う方法があるかもしれません。もしそうなら、競合状態があります。

いずれにせよ、これは Python でも POSIX でも推奨される方法ではありません。あなたが望むことを行うための堅牢な方法は次のとおりです。

def mkdir_for_gid(path, gid, mode):
    # make a dir that no-one may touch.
    os.mkdir(path, 0700)
    try:
        os.chown(path, os.getuid(), gid)
        os.chmod(path, mode)
        return path
    except:
        # Some operation failed. We don't care which one, we just clean up.
        # We do know that it wasn't mkdir, so the error from that is not masked
        # by any error from rmdir.
        os.rmdir(path)
        raise

exceptPython スタイル ガイド PEP-8 で禁止されている "bare" 句を使用していることに注意してください。再raise例外なので、ここでは問題ありません。

于 2012-06-21T20:07:41.147 に答える