Я создаю Captive Portal на PHP, сайте, где пользователям, подключающимся к Wi-Fi, будет запрашиваться некоторая информация, прежде чем будет разрешен их доступ.
Я уже настроил iptables для перенаправления неавторизованного трафика c на страницу входа. На странице входа в систему после того, как пользователь предоставил необходимую информацию, мне нужно выполнить следующую команду:
exec("/usr/sbin/iptables -t mangle -I PREROUTING 1 -m mac --mac-source $mac -j RETURN");
эта команда требует root доступа, поэтому, когда я запускаю c, она в терминале с root пользователь или используйте "sudo iptables ...", он работает, и доступ разрешен. Так что команда работает.
Но я не могу заставить эту команду работать в PHP. Я добавил apache пользователя (www-data) в файл sudoers и добавил его в группу sudo. Кажется, это сработало, потому что, если я «выдал себя за» www-data в linux терминале (su -s /bin/bash www-data
) и выполнил ту же самую команду в терминале, это сработало.
На моей странице php я позвонил :
$result = shell_exec("sudo /usr/sbin/iptables -t mangle -I PREROUTING 1 -m mac --mac-source $mac -j RETURN");
Но ничего не вернулось.
Если я выполняю команду, отличную от root, она работает:
$mac = shell_exec("$arp -a ".$_GET["nome"]); $_SERVER['REMOTE_ADDR']);
preg_match('/..:..:..:..:..:../',$mac , $matches);
Как я могу заставить эту команду работать в php