【问题标题】: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 等。我假设您希望包含它以访问一些常量。有时它需要更多的工作来设置,但最终,如果唯一运行的代码是你的,你可以是安全的(呃)。

      【讨论】:

        猜你喜欢
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 2011-07-05
        相关资源
        最近更新 更多