我注意到在Mac OS X上(当前我正在运行Yosemite,但是在OS X的早期版本上我遇到了同样的问题)每当我使用-static选项调用g ++(或什至是gcc)时,就会链接二进制文件失败-总是由于未能成功找到某个库或另一个库。结果,我只能生成使用共享库的二进制文件。
这是一个问题,因为我有一种情况,如果不编写使用Setuid Root权限安装的程序,将无法解决。我需要编写的该程序将检查环境变量,以确保它们没有任何恶意(并且它将以比“抱歉”更好的安全性态度进行操作),然后将其用户ID降级为普通用户,然后使用exec()形式调用另一个程序。
这些对环境的安全检查将确保其他程序可以在确保关键环境变量(例如DYLD_LIBRARY_PATH)没有损坏的情况下安全运行。但这个方案本身能不能在任何这种保证运行-因为这是它的职责是部分执行此检查的第一个地方。
那么,如何保护此C ++程序免受此类安全漏洞的侵害?我的第一个想法是使用-static选项— 进行编译,但是由于这在OS X上不起作用,因此有人还有其他想法吗?
谢谢。