PGP-шифрование из PHP - PullRequest
2 голосов
/ 10 мая 2011

Если я запускаю команду

gpg -e -r john@doe.com my_secret_file.txt

из командной строки unix, работает нормально. Но когда я пытаюсь использовать ту же команду с помощью PHP, она не работает:

$gpg = '/usr/bin/gpg';
$recipient = 'john@doe.com';
$secret_file = 'secret_file.txt';

echo shell_exec("$gpg -e -r $recipient $secret_file");

Пожалуйста, помогите мне найти решение.

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

Помимо проблем с разрешениями, как предлагает Дементо, также возможно, что пользователь запускает скрипт не так, как при работе в командной строке, и у этого пользователя нет открытого ключа john@doe.comпоэтому он не может зашифровать файл для него.Итак ... какой пользователь запускает этот скрипт?Предполагая, что это www-data, если вы делаете

carlos@server:~$ su - www-data
(insert www-data's password or do sudo su - www-data if sudo it's available)
www-data@server:~$ gpg --list-keys

, вы видите ключ для john@doe.com?

2 голосов
/ 10 мая 2011

Я попробовал ваш пример на моей машине, и он работает как ожидалось. В результате получается дополнительный файл в локальном каталоге с именем secret_file.txt.gpg, зашифрованный для john@doe.com. Это подтверждает, что ваш настоящий скрипт в порядке и могут быть другие проблемы.

Вы не увидите никаких выводов самого скрипта, зашифрованный файл генерируется в тишине. echo в последней строке вашей программы ничего не делает, потому что gpg не генерирует никакого вывода, если нет проблем. Вы должны взглянуть на руководство shell_exec .

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

0 голосов
/ 26 июня 2011

Вы можете увидеть ошибку с помощью следующей команды:

<code>$output = exec("$gpg -e -r $recipient $secret_file 2>&1", $out); 
echo "<pre>$output
";

это поможет вам.

возможные проблемы на взгляд:

  • файл, который вы пытаетесь зашифровать, находится не на правильном пути ..
  • GnuPG пытается записать в каталог /root/.gnupg пользователя «apache». Obvisouly это невозможно, если вы не измените свои права доступа к этому каталогу (не рекомендуется).
  • у вас нет прав доступа к корневому каталогу GnuPG (где бы он ни был)
  • у вас нет ЗАПИСИ в директории apache пытается создать новый файл ..

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

...