Я ищу несколько советов ..
Мне удалось получить скрипт php для вызова другой страницы, которая, в свою очередь, запускает системные команды от имени пользователя root.
Это то, что я сделал, я хотел бы посмотреть, смогу ли я это обеспечить.
В etc/sudoers.d
Я добавил файл, который содержит список файлов, которые пользователь wwwrun может запускать от имени пользователя root без пароля. Он содержит записи, похожие на:
wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/filea
wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/fileb
wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/filec
Мой основной веб-сайт имеет страницу test.php, разрешения на это 777
& wwwrun:root
В test.php у меня есть некоторые jquery, который использует ajax для вызова action.php&action=aaa
В action.php у меня есть:
if ($_REQUEST['action']) == 'aaa') {
exec('/Web/scripts/helper/filea', $res);
}
if ($_REQUEST['action']) == 'bbb') {
exec('/Web/scripts/helper/fileb', $res);
}
if ($_REQUEST['action']) == 'bbb') {
exec('/Web/scripts/helper/filec', $res);
}
filea
содержит пару команд bash. Этот файл имеет 655
& root:root
разрешения.
Команды в filea, fileb и filec являются фиксированными, и, если передана переменная, это всего лишь говорит ей выполнить другую фиксированную команду в файле.
Как я могу сделать это более безопасным? Очевидно, что лучше не иметь root-прав, но мне нужно запустить некоторые команды для перемещения, редактирования, обновления, установки файлов и т. Д.
ОБНОВИТЬ
Просто чтобы подтвердить, что это работает. Я хотел бы сделать это немного более безопасным.
Я попытался изменить владельца на wwwrun: root и разрешения на 744
Это сделало так, что только root может редактировать файлы, я думаю, это хорошая идея ..
Спасибо
Несколько предложений по обеспечению безопасности приложения, отсортированных по результативности:
Попробуйте перестроить систему так, чтобы права root не требовались. Вы указали на это, если вы можете предоставить более подробную информацию о функциональности приложения, мы могли бы изучить его. Это, вероятно, лучшее вложение вашего времени для защиты приложения.
Защитите скрипты от модификации не-root пользователями. Если wwwroot может изменить содержимое скрипта, он может выполнить любую команду от имени root:
Убедитесь, что файлы принадлежат пользователю root и группе, к которой принадлежит wwwdata, и что никто, кроме root, не может их изменять. Вы можете ограничить права доступа wwwrun только для выполнения и отказаться от других разрешений, в противном случае злоумышленник может просто перезаписать содержимое файла и выполнить произвольные команды:
wwwrun$ cp evil /Web/scripts/helper/filea && sudo /Web/scripts/helper/filea
Убедитесь, что все пути, вплоть до сценария, принадлежат пользователю root, и что только root может изменять их. В противном случае злоумышленник может просто перемещать каталоги для выполнения произвольных команд:
wwwrun$ rm -rf /Web/script && mkdir -p /Web/script/helper
wwwrun$ cp evil /Web/scripts/helper/filea && sudo /Web/scripts/helper/filea
Сделайте это для всех команд, которые вы запускаете из своих скриптов
Убедитесь, что все указанные команды и файлы используют абсолютные пути
Проверьте безопасность скриптов, которые вы выполняете: они запускаются от имени root, если они не предназначены для запуска от имени root (временные файлы, небезопасные зависимости и т. Д.), Злоумышленник воспользуется ими
Измените файл sudoers, чтобы команды не могли запускаться с аргументами, используя синтаксис «», например:
wwwrun ALL=(ALL) NOPASSWD: /Web/scripts/helper/filea ""
Проверьте условия гонки — например, Злоумышленник может одновременно выполнять более одной команды, проверьте, не может ли этот параллелизм создать уязвимости. При необходимости убедитесь, что сценарии не запускаются одновременно с использованием механизма блокировки
Попробуй дать root
привилегии для www-data
тоже!
Требуется чтобы www-data
право читать. Вы также можете попробовать изменить файлы owner
а также group
в www-data
,