如何在Ubuntu上获得root权限并执行Python3中的shell命令?

问题描述 投票:0回答:1

我在用Python3运行一些shell命令 os.system 需要以root身份运行。

我试过

os.system("sudo su")
os.system("other commands")

home_dir = os.system("sudo su")
os.system("other commands")

但是上面两个脚本都只是成为root,然后停止执行,所以我的其他命令都没有执行。

我正在运行 Python 3.6.9 在Ubuntu 18.04虚拟机上。

python-3.x linux bash shell ubuntu-18.04
1个回答
1
投票

通过以下方式获得的root权限 sudo 只适用于通过 sudo 运行的命令,而不会提高调用者的权限 (在本例中,你的 python 脚本)。所以你的第一条命令 os.system("sudo su") 将会运行一个交互式的root shell,但是在你退出之后,你的python代码会执行后续的对 os.system("other commands")这些命令将在其普通用户权限下运行。

你可以通过sudo每次运行一个命令。

os.system("sudo some_command")
os.system("sudo some_other_command")

请注意,每条命令都会被单独记录在案 sudo 在系统日志中,而且即使有几个命令。sudo 不应该在很短的时间间隔内多次要求输入密码。

或者如果你需要做一连串的步骤,比如改变目录,而这些步骤在调用者中可能是不可能的(例如,如果运行python脚本的非root用户无法访问该目录),那么你可以这样做。

os.system("sudo sh -c 'cd some_dir && some_other_command'")

(仅供参考。&& 类似于 ; 但另一条命令只有在 cd 成功,所以比较安全,尽管这一点与 shell 语法有关,而不是与 python 有关)。)

如果有很多命令,当然你也可以选择单独制作一个 "helper "shell-script,然后通过sudo运行整个脚本。

os.system("sudo sh /path/to/myscript.sh")

最后需要注意的是,如果你是在非交互式环境中运行python脚本,你可能需要告诉 sudo 不提示密码,至少在相关的调用用户和目标命令中是如此。 详情请参见 man sudoers 并寻找涉及 NOPASSWD.

© www.soinside.com 2019 - 2024. All rights reserved.