前提・実現したいこと
rootユーザでしか実行できないライブラリを使うためにsudoでpythonのプログラムを実行する際に、
プログラム内のある操作だけを一般ユーザーとして実行することは可能でしょうか。
補足情報(FW/ツールのバージョンなど)
python3
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
Unix/Linuxなら、実効ユーザー(euid)を一時的に変えることは可能です。
katsukoさんのコードを少し変更・追加して、
Python
1import os 2 3file500="myfile-500" 4file0 ="myfile-0" 5 6print('0: uid %d.' % os.geteuid()) 7if os.path.exists(file500): 8 os.remove(file500) 9if os.path.exists(file0): 10 os.remove(file0) 11 12os.seteuid(500) 13print('1: uid %d.' % os.geteuid()) 14with open(file500,"w") as f: 15 f.write("OK\n") 16 17os.seteuid(0) 18print('2: uid %d.' % os.geteuid()) 19with open(file0,"w") as f: 20 f.write("OK"\n)
myfile-500
のオーナーは500になります。myfile-0
のオーナーは0。
グループ(egid)も変えるなら、os.setegid()
で。
もちろん、上記はrootで実行します。
投稿2020/02/27 18:58
総合スコア86316
0
os.setuid
(Pythonリファレンスマニュアル)で、現在のプロセスのユーザidを設定できます。
なお、(わかっているかもしれませんが)ユーザを変えられるのはスーパーユーザのみです。
sudoで起動しているのでos.setuid
で他のユーザに切り替わる事ができますが、切り替わった後にrootに戻る事はできませんので、もしその必要があればプロセスをforkして処理しなければならないかもしれません。(試してないので出来るかどうかはわかりません)
チャチャッと確認できるのでやってみましたが、大丈夫そうですね。
python
1# coding: utf-8 2# hoge.py 3import os, sys 4 5print('0: uid %d.' % os.getuid()) 6pid = os.fork() 7if pid == 0: 8 os.setuid(1000) 9 print('1: uid %d.' % os.getuid()) 10 sys.exit(0) 11os.wait() 12print('2: uid %d.' % os.getuid()) 13
$ sudo python3 hoge.py 0: uid 0. 1: uid 1000. 2: uid 0. $
投稿2020/02/27 12:44
編集2020/02/27 13:05総合スコア3591
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/27 22:50
2020/03/02 00:49