簡體   English   中英

在啟動 python 程序的 root 用戶中以非 root 用戶身份調用 os.system

[英]invoke os.system as a non-root user in a root-user launched python program

我想使用 sudo 運行 python 程序(例如sudo python test.py ),但是在 python 程序中,當我使用os.system(<some command>)以非root用戶身份運行它們時, .

這是可行的嗎?

謝謝!

例子:

import os
import pwd

username = "nobody"

pwent = pwd.getpwnam(username)
uid = pwent.pw_uid
gid = pwent.pw_gid

pid = os.fork()
if pid == 0:
    # child

    # relinquish any privileged groups before we call setuid
    # (not bothering to load the target user's supplementary groups here)
    os.setgid(gid)
    os.setgroups([])

    # now relinquish root privs
    os.setuid(uid)

    # os.setuid should probably raise an exception if it fails,
    # but I'm paranoid so...
    if os.getuid() != uid:
        print("setuid failed - bailing")
        os._exit(1)

    return_value = os.system("id") // 256  # or whatever
    os._exit(return_value)

# parent
os.waitpid(pid, 0)

print("parent continues (still root here)")

os.system("id")

給出:

uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
parent continues (still root here)
uid=0(root) gid=0(root) groups=0(root)

另一種方法是在要以特定用戶身份運行的命令前面添加前綴sudo -u username 例如,可以使用os.system('sudo -u user_a python test.py') test.py python 腳本中以user_a身份運行 test.py。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM