(注意:我考虑过Linux,但问题可能适用于其他平台。)
问题: Linux不对#进行suid!脚本也不会激活它们的“Linux功能”。
为什么我们有这个问题?因为在内核解释器设置中运行脚本时,攻击者可能已经替换了该文件。怎么样?以前信任的suid / capability-enabled脚本文件可能位于他可以控制的目录中(例如,可以删除不拥有的受信任文件,或者该文件实际上是他拥有的符号链接)。
正确的解决方案:让内核允许suid / cap脚本,如果:a)很明显调用者对脚本文件没有权力 - 或者像其他几个操作系统那样做b )将脚本作为/ dev / fd / x传递,参考最初由内核打开的可信文件。
我正在寻找:对于无法做到这一点的内核(所有Linux),我需要一个安全的“现在”解决方案。
我有什么想法?一个二进制包装器,它以安全的方式完成内核所不具备的功能。
我想
sudo的问题:sudo不是一个好的包装器,因为它没有帮助内核不会因为刚解释的“脚本被替换”陷阱(“man sudo”下的警告说左右)。
basename script.py .py
或参数-o suid_capability_wrapper可以打印一堆注释和警告,以便教育用户:
答案 0 :(得分:0)
你不想在任何文件上使用shebang - 你想使用调用Python解释器的二进制文件,然后告诉它启动你问的脚本文件
它需要做三件事:
这将为您提供一个二进制文件,它将仅在Python 下执行所有由root-and-suid脚本拥有的脚本。您只需要一个这样的程序,而不是每个脚本一个。这是你的“suidpythonrunner”。
正如您所推测的,您必须在运行Python之前清除环境。 <{1}}由内核处理,但LD_LIBRARY_PATH
可能是致命的。