C++ gperf工具&x2B;阿帕奇&x2B;fcgi,它赢了';不要写入文件
我正试图用C++ gperf工具&x2B;阿帕奇&x2B;fcgi,它赢了';不要写入文件,c++,apache,fastcgi,gperftools,C++,Apache,Fastcgi,Gperftools,我正试图用mod\u fascgi和perftools分析一个在apache中运行的fcgi应用程序(C++)。Centos 6 x86_64也是如此 问题如下。据 出于安全原因,CPU评测不会写入文件,因此无法用于setuid程序 Apache必须作为root启动,然后使用setuid将Apache用作用户,从而使用setuid。然后,gperftools将不会写入该文件。 并且以root用户身份运行Apache也被禁用 有解决办法吗 到目前为止,我想到了3种解决方案: 在应用程序中创建一个
mod\u fascgi
和perftools
分析一个在apache
中运行的fcgi
应用程序(C++)。Centos 6 x86_64也是如此
问题如下。据
出于安全原因,CPU评测不会写入文件,因此无法用于setuid程序
Apache必须作为root
启动,然后使用setuid将Apache
用作用户,从而使用setuid
。然后,gperftools
将不会写入该文件。
并且以root用户身份运行Apache也被禁用
有解决办法吗
到目前为止,我想到了3种解决方案:
- 在应用程序中创建一个测试来模拟一些请求和模拟FCGI类
- 使用-DBIG\u SECURITY\u-HOLE标志重新编译Apache,以允许以root用户身份运行Apache
- 重新组合gperftools,删除suid的检查
然而,令我惊讶的是,“calls setuid()”被视为与具有setuid位的二进制文件相同。你确定gperftools真的阻止了前者,而不仅仅是被误用了吗?它不是在写一个部分日志文件吗?我重新编译了
gperftools
并删除了suid的检查
要记住的唯一一件事是,要编写日志,您不能终止进程。执行“服务httpd停止”将终止进程(因此不会刷新日志)
您必须发送一个信号(阅读gperftools文档),或者在main中添加
ProfileStart()
和ProfileStop()
调用。感谢您的想法,在非根端口中启动apache也可以工作。有一个ProfilerFlush()函数,用于强制输出。