运行器的 shell 执行器有多少访问权限,CI 作业可以通过它执行任意代码吗?

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

我目前正在研究本地运行程序与 shell 执行器的使用(

bash
powershell
)。通常我会使用容器,但是最近我遇到了一个用例,必须使用这样的执行器。从那时起,我开始问自己“安全性怎么样?”

是否可以使用 shell 执行器在本地运行器上执行 CI 作业中的任意代码?在这里,我排除了任何超出“拥有”运行器的用户被允许执行的操作的内容(例如,在 Linux 上,不属于

sudoers
的用户无法执行任何需要
sudo
的命令) .

security gitlab continuous-integration
1个回答
0
投票

是否可以使用 shell 执行器在本地运行器上执行 CI 作业中的任意代码

嗯。 CI 运行程序基本上就是为了这个目的而设计的——运行用户告诉 CI 系统运行的任何代码。因此,从这个意义上说:是的,用户可以在本地运行器的 CI 作业中执行任意代码。配置/安装运行器时,您将配置一个运行 CI 作业的用户帐户。至少,这通常包括在构建目录中读/写/执行文件以及使用 shell 二进制文件本身的权限。由于 CI 作业可以编写和执行它们想要的任何文件,这意味着它们可以执行用户定义的任意代码。 代码执行是否成功取决于代码尝试执行的操作以及您为运行者用户帐户设置的安全边界。就像您提到的,在 Linux 系统上,需要

sudo

的操作可以通过使用不具有该权限的用户帐户来阻止。还可以采取大量其他安全措施,其中最重要的可能包括使用 AppArmor/SELinux 策略。

在非一次性环境中使用 shell 运行程序时确保系统安全是一个复杂而深入的主题,具体取决于您从威胁或系统稳定性的角度到底担心什么。如果没有其他可以直接回答的具体问题,您可以考虑就该主题展开

讨论

以进一步探讨。 要考虑的另一件事是您是否“真的”需要 shell 运行程序,或者该 shell 运行程序是否必须位于物理主机/管理系统操作系统上。我发现 shell 运行程序(实际上)是唯一选择的唯一情况是,当涉及连接到系统的物理设备无法合理地传递到来宾虚拟机或容器时。据我所知,虚拟化几乎可以满足所有其他用例。通过虚拟化进行隔离(以及在作业完成后处理虚拟化环境)对于解决 shell 运行程序可能出现的一大类可能的威胁和稳定性问题有很大帮助。

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