2017-07-27 129 views
0

我正在运行一个CentOS 7服务器,我希望能够BanUnban某些IP与Fail2banPHP exec()和UnBain IP与fail2ban

但是它不工作,当我运行下面的代码:

$exec = exec('sudo fail2ban-client set apache banip 0.0.0.0', $output, $return); 

var_dump($exec);  
var_dump($output); 
var_dump($return); 

我需要PHP的一些特殊权限,这就是为什么它不会工作?

当我运行它时,$return变量吐出了1。我知道0表示它是Successful

虽然$output不返回任何东西。

+0

你有没有检查这个线程:https://serverfault.com/questions/285256/how-to-unban- an-ip-properly-fail-fail/475117? –

+0

这些命令在SSH中以sudo方式工作。他们不通过可执行文件...我猜这是一个sudo问题 – Borsn

回答

1

我想你需要一个sudo密码。如果你有一个root用户,这确实是这样的,你需要做的是这样的:

$command = 'sudo -u root -S fail2ban-client set apache banip 0.0.0.0 < yourpass.key'; 

$exec = exec($command, $output, $return); 

var_dump($exec);  
var_dump($output); 
var_dump($return); 


哪里yourpass.key是包含密码root文件。按照上面的方式,密码文件必须与PHP脚本位于同一目录中。但是,您可以更改该路径。

举例来说,如果你要存储在/home文件只写

$command = 'sudo -u root -S fail2ban-client set apache banip 0.0.0.0 < /home/yourpass.key'; 
+0

我可以将密码添加为文本吗?像这样:''sudo -u root -S fail2ban-client set apache banip 0.0.0.0 Borsn

+0

用户'root'登录被禁用。另一个用户必须登录,然后'su'。但是php在内部运行,所以它应该让它'root'。 – Borsn

+0

@Borsn是的,但我不会推荐它作为一个安全问题。如果你仍然想这样做:''sudo -u root -S fail2ban-client set apache banip 0.0.0.0 << password123''另外,我相信你将无法使用root用户PHP如果被禁用。记住:Exec仍然调用一个正常的shell。 – NullDev