10

私の Python スクリプトでは、root 権限が必要ないくつかの操作を実行します。また、ルートのみが所有するのではなく、スクリプトを実行しているユーザーが所有するファイルを作成して書き込みます。

通常、スクリプトを実行するには、sudo. 上記を行う方法はありますか?

4

3 に答える 3

12

を使用して uid を切り替えることができますos.seteuid()os.setuid()これは、必要なときに root 権限を取得できるという点で異なります。

たとえば、root として次を実行します。

import os

open('file1', 'wc')

# switch to userid 501
os.seteuid(501)
open('file2', 'wc')

# switch back to root
os.seteuid(0)
open('file3', 'wc')

これによりfile1file3ルートとして作成されfile2ますが、uid 501 を持つユーザーとして作成されます。

スクリプトを呼び出しているユーザーを特定する場合は、次のsudo2 つの環境変数を設定します。

SUDO_USER
SUDO_UID

それぞれ、 を呼び出したユーザーのユーザー名と uid sudoint(os.environ['SUDO_UID'])したがって、 で使用できますos.seteuid()

于 2013-03-29T16:16:06.897 に答える
1

http://linux.die.net/man/8/sudoの引用:
実際の有効な uid と gid は、ターゲット ユーザーのものと一致するように設定されます

したがって、使用するユーザーを知るための唯一のオプションは、構成ファイルまたはコマンドライン オプションのいずれかからターゲット ユーザーを読み取るか、何らかの方法でヒューリスティックに推測することです。

良い考えは、いわゆる権限の放棄です: root 特権から始めて、それを必要とすることを実行します。次に、権限の低いユーザーになります。
そのためには os モジュールを使用します: http://docs.python.org/2/library/os.html#os.setuid

于 2013-03-29T16:04:00.733 に答える