gperftools + apache + fcgi,它不会写入文件

时间:2014-06-20 14:07:39

标签: c++ apache fastcgi gperftools

我正在尝试分析fcgi应用程序(C ++),该应用程序在apache内运行mod_fascgi perftools。 SO是Centos 6 x86_64。

问题如下。根据{{​​3}}

  

“出于安全原因,CPU分析不会写入文件 - 因此无法用于setuid程序。”

Apache必须以root启动,然后使用setuid以apache用户身份,因此使用setuid。然后gperftools将不会写入该文件。 并且以root运行Apache也被禁用。

任何解决方案?

到目前为止,我想到了3个解决方案:

  • 在应用程序中创建测试以模拟某些请求并模拟FCGI类。
  • 使用标志-DBIG_SECURITY_HOLE重新编译Apache,以允许以root身份运行apache。
  • 重新检查gperftools去除suid的检查。

2 个答案:

答案 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()来电。