2

我正在尝试分析一个在with中fcgi运行的应用程序(C++)。所以是 Centos 6 x86_64。apachemod_fascgiperftools

问题如下。根据gperftools 文档

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

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

有什么解决办法吗?

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

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

2 回答 2

1

我重新编译gperftools并删除了suid的检查。

唯一要记住的是,要写入日志,您不能终止该进程。并且执行“service httpd stop”将终止该进程(因此它不会刷新日志)。

您必须发送信号(阅读 gperftools 文档)或在 main.xml 中添加ProfileStart()andProfileStop()调用。

于 2014-07-03T15:05:18.987 回答
0

您始终可以在高端口上侦听并以非 root 用户身份启动/停留,这比其他三个选项的侵入性要小得多。

另一种选择是在分析器下静态启动 fcgi 并让 httpd 连接到它(unix 套接字或 TCP),IOW 不在 Apache 中为 FCGI 进行进程管理并从进程管理器分叉。

然而令我惊讶的是,“调用 setuid()”被视为与具有 setuid 位的二进制文件相同。你确定 gperftools 真的阻止了前者,而不仅仅是被误用吗?它不会写部分日志文件吗?

于 2014-07-01T13:57:12.997 回答