2015-09-17 1 views
0

Мне нужно знать, безопасно ли разрешать www-data выполнять команды sudo без пароля?Позволяет www-data выполнять команды без безопасного пароля?

Я использую его для выполнения команд терминала из сценария php, но это не подходит для наших живых серверных серверов?

вот файл sudoers.

www-data ALL=(ALL) NOPASSWD:ALL 

вот пример команды, которую я пытаюсь запустить на внешний удаленный сервер. Я использую ssh2_exec для запуска этого.

sudo service apache2 status;sudo service mysql status;sudo service mongod status 

Если нет, есть ли лучший способ сделать это?

+0

Нет, это, вероятно, не является безопасным на всех. Если вы это сделаете, существует высокая вероятность того, что посетители вашего веб-сайта могут повлиять на выполнение привилегированных действий, если не полностью контролировать их. И никто этого не хочет. Даже если вы попытаетесь избежать этого путем тщательного проектирования вашего php-кода, вы станете жертвой ошибок в своем собственном коде, если php-модуль или любой другой задействованный компонент. –

ответ

3

Это, по сути, делает ваш веб-сервер простым вектором для атак на сайт. Если кто-то может найти способ загрузить какой-либо код, или когда-нибудь будет в будущем, где вы shell_exec с переменной переменной пользователя, люди могут выполнять привилегированный произвольный код на вашем сайте.

Это не подходит для общедоступных серверов.

Лучший способ сделать это - написать программу в вашей системе, которая работает в crontab и печатает эти значения в плоском файле, а затем открыть этот файл на PHP.

например

#!/bin/bash 

service apache2 status 
service mysql status 
service mongod status 

Добавьте к этому корневому пользователю хронам с sudo crontab -e

* * * * * /path/to/script > /home/my-user/file 

Вы, возможно, потребуются также сделать файл глобального чтения (после его создания); это просто состояние так, вероятно, безопасно:

sudo chmod 777 /home/my-user/file 

Тогда в PHP

<?php 

$status = file_get_contents('/home/my-user/file'); 
echo $status; 
+0

Я изменил сценарий для обработки нескольких выходов; в этот момент имеет смысл передать вывод в файл в crontab. – M1ke

+0

Спасибо M1ke, единственная проблема заключается в том, что PHP-скрипт запускается на малине Pi и проверяет 3 удаленных сервера. – Kieron606

+0

У вас есть доступ к удаленным серверам? Вы можете сделать этот файл доступным через веб-корень и просто запустить cron. – M1ke

Смежные вопросы