как запустить php exe c с sudo на живом сервере - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть простые сценарии, которые создают папку для каждого зарегистрированного пользователя, она отлично работает на локальном сервере, но после отправки на работающий сервер она не работает ... Я обнаружил, что для нее требуется пароль sudo. Я гуглял вокруг и все предлагали мне отредактировать sudoer, запустив visudo, но ничего не работает.

 $sudoPassword = \Config::get('app.sudoPassword');

 $sudo = "echo $sudoPassword | sudo -S ";

 $createDir =  "cd ../../merchants && mkdir ".$merchant->identity." && cd ".$merchant->identity;

echo exec($createDir);

мой вопрос, как мне сделать exe c для запуска как root? Я использую CentOS в Digitalocean

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Я не рекомендую запускать скрипт как sudo. Лучшая альтернатива - дать разрешение веб-серверу (www-data пользователь) на запись в каталог ../../merchants.

Сначала добавьте себя в группу www-data, выполнив следующую команду.

usermod -a -G www-data <your-username>

Затем передайте права собственности на папку merchants группе www-data, используя приведенную ниже команду.

chgrp www-data merchants

Наконец, укажите правильные разрешения для папки merchants, используя команду ниже.

chmod g+rwxs merchants

Надеюсь, это поможет вам решить вашу проблему.


РЕДАКТИРОВАТЬ

В CentOS вам следует использовать apache вместо www-data.

1 голос
/ 24 февраля 2020

Это не прямой ответ на ваш вопрос, а просто предложенное улучшение вашего кода. Вместо использования sudo я бы придерживался решения @ tamrat. Это скорее комментарий, но он слишком длинный, чтобы быть комментарием.

Вместо использования функции php exec, я бы порекомендовал вам использовать компонент процесса Symfony, который уже доступен. в вашем Laravel проекте.

use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;

Использование:

$createDir =  "mkdir /full/path/to/merchants/".$merchant->identity." && cd /full/path/to/merchants/".$merchant->identity;

$process = new Process($createDir);
$process->run();

if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...