Я ищу чистый и безопасный способ запуска определенных системных команд 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
здесь важен, потому что мне нужно запускать эти команды от имени конкретного пользователя, отличного от того, который использовался для размещения веб-интерфейса.
Обычно это небезопасно. Не имеет значения, разрешаете ли вы пользователям отправлять команды или использовать любой другой вид взаимодействия. Даже если ваш скрипт работает в одиночку, могут быть изобретены эксплойты, чтобы использовать его в той или иной форме и, возможно, изменить его действия.
Но это применимо только в том случае, если вы хотите иметь безумные правила безопасности на своем сервере. В реальном мире вероятность того, что вы можете поставить под угрозу безопасность своего сервера, минимальна.
У меня еще есть несколько предложений для вас:
убедитесь, что лет
Убедитесь, что ваш скрипт не принимает никаких входных данных извне, он не читает базу данных или файл. Все должно быть заключено в сценарий.
Попробуйте поместить скрипт где-нибудь за пределами documentRoot, чтобы он не был доступен для пользователей.
Разместите некоторые специальные разрешения для сценария, чтобы его действия были ограничены пользователем, от имени которого он запускается. Даже если кто-то каким-то образом сломает его, ОС не позволит ему сделать что-то еще, кроме выполнения только этой конкретной команды в определенной среде.
Конечно, это можно дополнить и другими правилами, но это как раз то, что приходит в голову сейчас.
Поместите свои команды в сценарий оболочки и сделайте что-то вроде этого:
chown root:wheel ping.sh
chmod +xs ping.sh
А затем запустите этот скрипт в своем php-скрипте с помощью exec ()
Это должно работать :-)