3

/tmp でファイルを開くときに root 権限が失われるという問題が発生しています。問題の行は次のとおりです。

open(filepath, 'wb')

プログラムがsudoコマンドで実行されていない場合、すべてが正常に機能し、os.statの場合の権限は次のとおりです

posix.stat_result(st_mode=17407, st_ino=261652, st_dev=64512L, st_nlink=206, st_uid=1000, st_gid=1000, st_size=12288, st_atime=1352314677, st_mtime=1352316340, st_ctime=1352316340)

プログラムを sudo コマンドで実行すると問題が発生します。次の権限を削除しようとしました

os.setegid(int(os.getenv("SUDO_GID")))
os.seteuid(int(os.getenv("SUDO_UID")))

そしてそれらを再び有効にします

os.seteuid(0)
os.setegid(0)

エラーメッセージは

IOError: [Errno 13] Permission denied:

os.stat 利回り

posix.stat_result(st_mode=17407, st_ino=261652, st_dev=64512L, st_nlink=204, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1352314677, st_mtime=1352316329, st_ctime=1352316329)

理想的には、ユーザーが sudo を呼び出さなかったかのように、root 権限を削除して有効にすることで、特定の機能を実行したいと考えています。

4

1 に答える 1

2

何らかの方法で生成したプロセスでは、おそらくルートから変更する必要があります。なぜなら、ルートを削除すると、元に戻すことができないからです。これには os.fork() を使用してみてください。

import os


def drop_permissions():
    os.setegid(int(os.getenv("SUDO_GID")))
    os.seteuid(int(os.getenv("SUDO_UID")))


def call_without_permissions(func, *args, **kw):
    in_parent = os.fork()
    if not in_parent:
        drop_permissions()
        func(*args, **kw)
        os._exit(0)
    else:
        os.waitpid(0)
于 2012-11-07T19:48:52.270 に答える