避免使用 system() api 命令注入

Raj*_*esh 5 linux c

我们有一个遗留的 C 代码,用于允许权限较低的用户以升级的权限运行自定义脚本。这设置了 SUID 位。此代码将 PATH env 限制为特定文件夹,然后使用system()api 使用受限 shell 执行脚本:

/bin/bash -r -c "script <arg>"
Run Code Online (Sandbox Code Playgroud)

由于路径受到限制,它只能执行该特定文件夹中的脚本。

现在知道了使用system()api命令注入的所有陷阱,可以采取哪些措施来避免命令注入?这在各种脚本等的许多地方使用,所以不想做一个全新的实现来避免任何回归。

dan*_*ack 6

因为很难做到正确,我建议删除代码中的 SUID。更改您的 C 代码以使用sudo. 通过使用 sudo,完成了获得安全系统编程的困难方面。

然后,您可以使用 visudo 仔细构建一个 sudo 配置,该配置执行执行任务所需的最低限度,并将其限制为所需的用户/组。配置 sudo 后,请除您之外的其他人进行测试并尝试打破预期的限制。

  • 我同意不滥用 SUID。然而,sudo 既不能自动纠正第 7 层问题,也不是草率编码实践的灵丹妙药。我实际上发现你的答案只是给人一种危险的安全感。 (2认同)