我正在尝试分析fcgi
应用程序(C ++),该应用程序在apache
内运行mod_fascgi
perftools
。 SO是Centos 6 x86_64。
问题如下。根据{{3}}
“出于安全原因,CPU分析不会写入文件 - 因此无法用于setuid程序。”
Apache必须以root
启动,然后使用setuid以apache
用户身份,因此使用setuid
。然后gperftools
将不会写入该文件。
并且以root
运行Apache也被禁用。
任何解决方案?
到目前为止,我想到了3个解决方案:
答案 0 :(得分:0)
您可以随时收听高端端口并以非root用户身份启动/停留,这比其他三个选项要少得多。
另一个选择是在探查器下静态启动你的fcgi并让httpd连接到它(unix socket或TCP),IOW不为Apache中的FCGI进行进程管理,并从进程管理器中分离出来。
然而,令我惊讶的是"调用setuid()"处理与具有setuid位的二进制文件相同。你确定gperftools真的阻止了前者并且不仅仅是被误用了吗? Woudln是在编写部分日志文件吗?
答案 1 :(得分:0)
我重新编译了gperftools
并删除了suid的检查。
唯一需要记住的是,对于要写入的日志,您无法杀死该进程。并且执行'service httpd stop'将终止进程(因此它不会刷新日志)。
您必须发送信号(阅读gperftools文档)或在主要内容中添加ProfileStart()
和ProfileStop()
来电。