Мне нужно знать, безопасно ли разрешать www-данным выполнять команды sudo без пароля?
Я использую его для выполнения команд терминала из сценария php, но это не подходит для наших рабочих серверов?
вот файл sudoers.
www-data ALL=(ALL) NOPASSWD:ALL
Вот пример команды, которую я пытаюсь запустить на внешний удаленный сервер.
Я использую ssh2_exec для запуска этого.
sudo service apache2 status;sudo service mysql status;sudo service mongod status
Если нет, то есть ли лучший способ сделать это?
По сути, это делает ваш веб-сервер основным вектором для атак на сайт. Если кто-то может найти способ загрузить какой-либо код, или когда-нибудь наступит момент, когда вы shell_exec
с помощью строки пользовательской переменной люди могут выполнять привилегированный произвольный код на вашем сайте.
Это не подходит для публично доступных серверов.
Лучший способ сделать это — написать на вашей системе программу, которая работает в crontab
и распечатывает эти значения в плоский файл, затем открывает этот файл в PHP.
например
#!/bin/bash
service apache2 status
service mysql status
service mongod status
Добавьте это к пользователю root с помощью 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;
Других решений пока нет …