Не могу запустить команды sudo в shell_exec - PullRequest
0 голосов
/ 02 февраля 2020

Я создаю 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

...