Зашифровать файл с помощью GPG с помощью exec ()

Я пытаюсь зашифровать файл с помощью GPG через exec (). Файл, который я хочу зашифровать, создается перед запуском этой команды.

$fesha = date("mdY");
$file_name = "FILE_$fesha.txt";
$myfile = fopen($file_name, "w");
//MySQL query
fwrite($myfile, $txt);
fclose($myfile);

$password = "*password*";
$commando = "gpg --encrypt --passphrase=\"$password\" --armor --batch --yes --trust-model always -r **[email protected]** \"$file_name\"";
echo  shell_exec($commando);
echo $commando;

Я запускаю PHP-скрипт, наблюдая за папкой «output», текстовый файл создается без проблем, но asc-файл никогда не создается.

Если я вручную запускаю вывод из файла PHP (фактическая команда GPG), зашифрованный файл создается без каких-либо проблем или сообщений об ошибках.

Пытаюсь решить эту проблему пару часов.

Я попытался использовать классовый подход ($ gpg = new gnupg ();), но мне не удалось установить все модули / расширения PECL.

Любая помощь будет оценена.


person Neoz Memphisto    schedule 21.10.2019    source источник
comment
Вы пробовали использовать pass_thru()? - php.net/manual/en/function.passthru.php   -  person Jeremy Harris    schedule 21.10.2019
comment
Просто попробовал, но все равно не получается ... :(   -  person Neoz Memphisto    schedule 22.10.2019


Ответы (1)


После нескольких часов исследований, проб и ошибок с дополнительными параметрами команд, попыток с разрешениями на стороне сервера, попытка добавить пользователя www-data в область администратора, изменив разрешения на /home/www-data/.gnupg и / папки home / mainuser / .gnupg ...

Я сделал что-то "глупое" и отправил эту команду ($ commando = "gpg --gen-key";), чтобы узнать, могу ли я сгенерировать секретный ключ через PHP. script, потому что я как бы понял, что на данный момент это связано с разрешениями, и я не смог войти в терминал как www-данные.

Очевидно, у меня не было интерактивного ответа, но я предполагаю, что он просто создал пустой ключ или что-то в этом роде, потому что после того, как я снова попробовал исходную команду:

$ commando = "gpg --encrypt --passphrase = \" $ password \ "--armor --batch --yes --trust-model всегда -r [email protected] \" $ имя_файла \ "";

Это действительно сработало! Сервер создал текстовый файл и зашифрованный файл.

Итак, я не хочу верить, что эта глупая штука ("gpg --gen-key") на самом деле "раскрыла тайну", я хочу верить, что это была комбинация из всего, что я сделал.

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

Использование GPG (GnuPG с PHP на сервере < / а>.

gpg: ВНИМАНИЕ: небезопасное владение на homedir / home / user /.gnupg

Каковы правильные разрешения для. вложенная папка gnupg?

person Neoz Memphisto    schedule 22.10.2019