Назад | Перейти на главную страницу

Запуск пула FPM от имени суперпользователя / отражение корневого доступа

Я создаю приложение управления NAS с помощью PHP, доступ к которому можно получить только из локальной сети.

Начну с того, что PHP-FPM не позволяет запускать пулы с пользователем. root, и я не нашел способа заставить его.

Да, да, запуск PHP от имени root небезопасен (и создание приложения для настройки ОС также), но я не знаю, как мне редактировать Arch Linux /etc/rc.conf прямо из PHP с file_put_contents() и после выполнения rc.d restart network.

Я установил open_basedir = / в php.ini.

у меня есть прочитайте это и поэтому я настроил sudoer, запустил пул PHP-FPM с соответствующим пользователем и группой.

Мой sudoer - системный пользователь, добавленный:

useradd -r -s /bin/bash -g wheel -d /srv/http/ systemphp

В конфигурации sudoer я добавил запись:

systemphp stone=NOPASSWD: ALL

stone - фактическое имя хоста системы.

Проблема в том, что мне пришлось бы sudo <everything>, но я не хочу основывать все на shell_exec() / exec().

Поскольку здесь возможен любой вариант, я все же попробовал:

var_dump(shell_exec('sudo fdisk -l'));

Это вернулось null. Где в PuTTY, su systemphp, sudo fdisk -l вернул фактический список.

Без shell_exec()следующий код приводит к fopen(/etc/rc.conf): failed to open stream: Permission denied:

$handle = fopen('/etc/rc.conf', 'r+');

if ( $handle )
{
    while( ($buffer = fgets($handle)) !== false)
    {
        echo $buffer;
    }

    if ( !feof($handle) )
    {
    echo 'Error: fgets() unexpectedly failed' . PHP_EOF;
}

    fclose($handle);
}

Как мне создать такую ​​среду или хотя бы отразить ее?

Хотя я полностью согласен с тем, что это плохая идея и что вам следует отредактировать временную копию и попросить что-то еще скопировать ее, если вы полны решимости отредактировать rc.conf напрямую, создать группу, сделать systemphp член его, измените групповое владение rc.conf этой группе и дать rc.conf права записи группы.

Это, по крайней мере, намного меньше возможностей для потенциальных провалов, чем предоставление пользователю NOPASSWD: all разрешения через sudoers.

Кроме того, это все еще ужасная идея. Возможно, вы не видите способа нанести вред системе, но сделать это будет ужасно сложно. Я бы сказал, что вы не можете. rc.conf это bash-скрипт, он получен, удачи в потенциальных крайних случаях.

Кстати, я даже не могу думать ни о чем в rc.conf это было бы полезно изменить таким образом, особенно потому, что это очень минимальный файл в современных системах - в основном все, что, вероятно, было бы более уместно изменить в другом месте или изменить в другом файле и сообщить rc.conf для источника этого файла, если это так фактически нужно там присутствовать.

Пожалуйста, не создавайте веб-интерфейсы, которые редактируют важные файлы конфигурации.

Вместо этого вы можете создать веб-приложение, которое позволит пользователям изменять копию или шаблон этого файла конфигурации. Затем агент или сценарий расписания могут фактически изменить этот файл конфигурации.

Это самый способ scm работай. Посмотри на кукольный или bcfg2 чтобы увидеть, как это было сделано на других языках.