【问题标题】:How to safely run arbitrary code on a remote machine?如何在远程机器上安全地运行任意代码?
【发布时间】:2019-12-29 08:17:22
【问题描述】:

我想接收来自用户的 shell 命令,并以没有实际权限的 Linux 用户身份运行它。

今天我正在这样做:sudo -u {username} 'sh' '-c' $'{user_command}'

这样安全吗?

【问题讨论】:

    标签: bash shell scripting heredoc


    【解决方案1】:

    手动转义' 听起来很脆弱。我会将命令放入文件中并将该文件作为脚本执行。这避免了设计上的命令注入。

    进一步注意,即使是非特权帐户也可以读取主机系统上的许多文件,例如 /etc/passwd 或来自 /proc 的信息。例如,如果他们运行ps,他们可以看到来自其他用户的命令。

    因此,我建议在容器中运行命令。安装docker并运行:

    # let's say you stored the command in "user.sh" ...
    docker run -v "${PWD}:/scripts" -it image_name bash /scripts/user.sh
    

    与安全相关的另一件事是人们可以尝试 (a) DOS 主机或 (b) DOS 其他机器或以不同的方式攻击它们。对于 (a),确保在 docker 机器上设置了非常严格的资源限制(mem、cpu、procs 数等)。对于 (b),禁止容器的网络访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多