【发布时间】:2016-04-04 16:30:22
【问题描述】:
我正在尝试获取进程 PID 并使用以下代码将其终止:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$_script_path = "/path/to/scriptname.php";
$cmd_find_process = "ps aux | grep '[p]hp -f ".$_script_path."'";
echo $cmd_find_process.PHP_EOL;
echo exec($cmd_find_process);
echo PHP_EOL.PHP_EOL;
$cmd = "kill $(".$cmd_find_process." | awk '{print $2}')";
echo $cmd;
echo exec($cmd);
?>
最初我无法列出进程,我通过编译自定义 SELinux 模块 selinux-httpd-allow-ps-aux.te 解决了这个问题:
policy_module(myhttpd,1.0.0)
gen_require(`
type httpd_t;
')
domain_read_all_domains_state(httpd_t);
我已经禁用了 dontaudit 语句:
semodule -DB
但我无法终止之前由同一用户启动的任何进程:apache。 /var/log/audit/audit.log 文件中没有记录错误。
为了全面了解,我试图杀死的 PHP 脚本是使用以下命令执行的:
su -s /bin/sh apache -c php -f /path/to/scriptname.php
我知道它是 SELinux,因为用
关闭 SELinuxecho 0 > /selinux/enforce
会成功的。
【问题讨论】:
标签: php linux apache centos selinux