私の Python スクリプトでは、root 権限が必要ないくつかの操作を実行します。また、ルートのみが所有するのではなく、スクリプトを実行しているユーザーが所有するファイルを作成して書き込みます。
通常、スクリプトを実行するには、sudo
. 上記を行う方法はありますか?
私の Python スクリプトでは、root 権限が必要ないくつかの操作を実行します。また、ルートのみが所有するのではなく、スクリプトを実行しているユーザーが所有するファイルを作成して書き込みます。
通常、スクリプトを実行するには、sudo
. 上記を行う方法はありますか?
を使用して 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')
これによりfile1
、file3
ルートとして作成されfile2
ますが、uid 501 を持つユーザーとして作成されます。
スクリプトを呼び出しているユーザーを特定する場合は、次のsudo
2 つの環境変数を設定します。
SUDO_USER
SUDO_UID
それぞれ、 を呼び出したユーザーのユーザー名と uid sudo
。int(os.environ['SUDO_UID'])
したがって、 で使用できますos.seteuid()
。
http://linux.die.net/man/8/sudoの引用:
実際の有効な uid と gid は、ターゲット ユーザーのものと一致するように設定されます
したがって、使用するユーザーを知るための唯一のオプションは、構成ファイルまたはコマンドライン オプションのいずれかからターゲット ユーザーを読み取るか、何らかの方法でヒューリスティックに推測することです。
良い考えは、いわゆる権限の放棄です: root 特権から始めて、それを必要とすることを実行します。次に、権限の低いユーザーになります。
そのためには os モジュールを使用します:
http://docs.python.org/2/library/os.html#os.setuid