J'essaie de lancer un script bash plus tard en PHP, donc je l'ai laissé dans visudo.Démarrer un script bash plus tard en PHP
www-data ALL = (root) NOPASSWD: /sbin/iptables
www-data ALL = (root) NOPASSWD: /usr/bin/at
Le script removeuserIP
fait exactement sudo iptables
... et travaille:
#!/bin/bash
sudo iptables -t nat -D PREROUTING -s $1 -j ACCEPT;
sudo iptables -D FORWARD -s $1 -j ACCEPT;
et dans le code PHP, je mets cette ligne:
$msg=exec("echo /var/www/scripts/removeuserIP $ipaddress | at now + 1 minutes");
mais la question est ça commence le script maintenant. J'ai vérifié dans /log/var/auth.log
et en effet, il commence la commande maintenant.
Je l'ai essayé dans un terminal directement et il n'y avait pas de problème, il commence plus tard (avec un argument bien sûr):
echo /var/www/scripts/removeuserIP $ipaddress | at now + 1 minutes
J'ai aussi essayé de le faire comme celui-ci dans un terminal, mais celui-ci ne fonctionne pas trop parce qu'il ne comprend pas qu'il y ait un argument pour le fichier:
sudo at now +1 minutes -f /var/www/scripts/removeuserIP 172.24.1.115
Je ne comprends vraiment pas pourquoi il commence dès maintenant, même si elle devrait commencer à 1 minute plus tard et pas maintenant.
S'il vous plaît essayer 'exec ('echo"/var/www/scripts/removeuserIP $ ipaddress "| maintenant + 1 minutes"; '(notez les guillemets). Cela pourrait aider, même si je ne suis pas sûr. Si c'est le cas, je l'afficherai comme réponse. –
Mettre www-data dans sudoers est l'une des pires idées. –
J'ai essayé comme vous l'avez dit et ça ne marche toujours pas. Je viens de vérifier le journal et il semble qu'il n'a pas la permission d'utiliser à, vu dans/var/log/apache2 J'ai même essayé de visudo: www-data ALL = (tous) NOPASSWD: ALL et il dit toujours non permission d'utiliser à. Pourquoi est-ce l'une des pires idées? Toute autre suggestion pour faire quelque chose de plus sécurisé? Pour être honnête je suis un débutant avec apache2/php donc je ne suis pas surpris de ta réponse. – Peter