1

我试图稍后在 PHP 中启动一个 bash 脚本,所以我在 visudo 中允许它。

www-data ALL = (root) NOPASSWD: /sbin/iptables
www-data ALL = (root) NOPASSWD: /usr/bin/at

该脚本removeuserIP只是在做sudo iptables......并且正在工作:

#!/bin/bash
sudo iptables -t nat -D PREROUTING -s $1 -j ACCEPT;
sudo iptables -D FORWARD -s $1 -j ACCEPT;

在 PHP 代码中,我输入了这一行:

$msg=exec("echo /var/www/scripts/removeuserIP $ipaddress | at now + 1 minutes");

但问题是它现在正在启动脚本。我签入了/log/var/auth.log,确实,它现在正在启动命令。

我直接在终端中尝试了它,没有问题,它稍后开始(当然有一个参数):

echo /var/www/scripts/removeuserIP $ipaddress | at now + 1 minutes

我也尝试在终端中这样做,但这个也不起作用,因为它不明白文件有一个参数:

sudo at now +1 minutes -f /var/www/scripts/removeuserIP 172.24.1.115

我真的不明白为什么它现在开始,即使它应该在 1 分钟后而不是现在开始。

4

2 回答 2

0

removeuserIP在脚本中放置时间延迟是否可以接受?

#!/bin/bash
sleep 1m
sudo iptables -t nat -D PREROUTING -s $1 -j ACCEPT;
sudo iptables -D FORWARD -s $1 -j ACCEPT;
于 2016-11-03T14:08:04.013 回答
0

解决方法:最后查看/var/log/apache2/error.log后发现没有at的使用权限。

事实上,你必须去 /etc/at.deny 并删除带有 at 的 www-date 行。默认情况下禁止它的原因可能是安全原因,以及执行此操作的更好方法,但至少它是有效的。

于 2016-11-06T19:48:30.770 回答