Я пытаюсь запустить скрипт bash позже в PHP, поэтому я разрешил его в visudo.Начать скрипт bash позже в PHP
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 минуту позже и не сейчас.
Попробуйте выполнить 'exec ('echo'/var/www/scripts/removeuserIP $ ipaddress" | в настоящее время + 1 минута '); '(отметьте кавычки). Это может помочь, хотя я не уверен. Если да, я отправлю его в качестве ответа. –
Ввод www-данных в sudoers - одна из худших идей. –
Я пробовал, как вы сказали, и он все еще не работает. Я просто проверил журнал и, похоже, у него нет разрешения на использование, видел его в/var/log/apache2 Я даже пробовал в visudo: www-data ALL = (all) NOPASSWD: ALL и он все еще говорит, что нет разрешение на использование. Почему это одна из худших идей? Любое другое предложение сделать что-то более безопасным? Честно говоря, я начинаю с apache2/php, поэтому я не удивлен вашим ответом. – Peter