Как запустить системные команды Linux из веб-интерфейса?
Я ищу чистый и безопасный способ запуска определенных системных команд Linux из веб-интерфейса.
Допустим, я хотел бы sudo -u differentuser ping 0.0.0.0
, IP-адрес предоставляется пользователем в HTTP-запросе, и я хотел бы напечатать результат на веб-странице. Каков был бы лучший способ сделать это?
Я думал об использовании PHP exec()
команда:
<?php
echo exec('sudo -u differentuser ping ' . $_POST['ip']);
Но это кажется очень грязным и ненадежным, и мне придется добавить пользователя apache в файл sudoers.
Какой язык вы бы использовали и как этого добиться?
Спасибо за вашу помощь.
Изменить: sudo
здесь важно, потому что мне нужно запускать эти команды от имени конкретного пользователя, отличного от того, который использовался для размещения веб-интерфейса.
2 ответа
Обычно это не безопасно. Не имеет значения, позволяете ли вы пользователям отправлять команды или любой другой вид интерактивности. Даже если ваш скрипт выполняется сам по себе, можно придумать эксплойты, чтобы использовать его в той или иной форме и, возможно, изменить его действия.
Но это применимо, только если вы хотите иметь безумные правила безопасности на вашем сервере. В реальном мире вероятность того, что вы нарушите безопасность своего сервера, минимальна.
У меня еще есть несколько предложений для вас:
убедитесь, что вы
Убедитесь, что ваш скрипт не принимает входные данные извне, он не читает базу данных или файл. Все должно быть заключено в сценарий.
Попробуйте поместить сценарий где-нибудь за пределами documentRoot, чтобы он не был доступен пользователям.
Установите некоторые специальные разрешения для скрипта, чтобы его действия ограничивались пользователем, от которого он запускается. Даже если кто-то что-то сломает, ОС не позволит ему сделать что-то еще, кроме выполнения только этой конкретной команды в конкретной среде.
Это, конечно, может быть дополнено дополнительными правилами, но это только то, что приходит на ум сейчас.
Поместите свои команды в скрипт оболочки и сделайте что-то вроде этого:
chown root:wheel ping.sh
chmod +xs ping.sh
А затем запустите этот скрипт в вашем PHP-скрипте с помощью exec()
Это должно работать:-)