【问题标题】:Run python file in sudo but config file in user space在 sudo 中运行 python 文件,但在用户空间中运行配置文件
【发布时间】:2020-07-14 13:29:39
【问题描述】:
我编写了一个 python 脚本来访问需要 root 权限的系统功能。
这个“主”脚本是通过运行另一个 Python 脚本文件“config.py”来配置的,使用 exec,我的脚本的用户将编写该脚本并在我的脚本中配置一些状态变量。
主脚本文件是 root 拥有的,而配置文件是用户拥有的(因为我的脚本用户想要修改这个文件)。
显然这并不理想,因为我的脚本的用户可以在配置脚本中运行根级别的命令。有没有办法在用户级别运行配置文件,即使主文件是在根目录下运行的?
【问题讨论】:
标签:
python
linux
scripting
sudo
【解决方案1】:
你可以做的是创建一个特殊的用户来执行脚本用户给你的命令。确保根据您的安全要求要求锁定此用户。
假设您希望此用户名是 scriptkiddie(为了笑),那么您可以通过以下方式创建该用户。
$ useradd scriptkiddie
然后,包装您的脚本将在runuser 命令中代表脚本用户执行的任何系统命令(这里我将使用nmap -Pn -p22 10.0.0.0/8,一个需要root 的命令)。
runuser 将在您指定的任何用户的上下文中运行您提供的任何内容。
$ runuser -l scriptkiddie -c 'nmap -Pn -p22 10.0.0.0/8'
在 Python 中,您可以使用 format(...) 来注入给您的任何命令。
"runuser -l scriptkiddie -c {}".format(user_cmd)
此方法将阻止任何用户在root 的上下文中运行命令,因为所有命令都将在新用户scriptkiddie 的上下文中运行。
【解决方案2】:
由于它是一个配置文件,最好将其设置为非可执行文件,例如普通的 ini / yaml 等。我假设您希望包含它以访问一些常量。有时它需要更多的工作来设置,但最终,如果唯一运行的代码是你的,你可以是安全的(呃)。