PHP exec pgp команда

1

Я хочу использовать PHP для "exec" команды pgp encryption. Независимо от командной строки я получаю либо ошибку 64 (ошибка синтаксического анализатора), либо 162 (полный сбой во время кодирования). Таким образом, я сократил командную строку в PHP-программе до этого простого отображения отпечатков пальцев, которые сохраняются:

exec("/opt/pgp/bin/pgp --fingerprint", $results);

Если я запускаю "/opt/pgp/bin/pgp --fingerprint" в командной строке, я получаю "2 ключа найдено" и ожидаемый экран. Но тот же exec в PHP дает мне ошибку парсера 64. Я попробовал "\n" для строковой команды, и это не имеет значения. Пользователь работает как "никто" в браузере, который имеет разрешение на выполнение на pgp. (Если pgp не был, по крайней мере, запущен, я бы даже не увидел ошибку "parser error".)

Есть ли что-то особенное, что мне нужно сделать для запуска pgp под PHP?


Я вернулся к попытке фактически зашифровать файл данных. Вот вывод 'status-file', который создает pgp. Он явно показывает ошибку в последней строке "разрешенное разрешение" в файле, который я пытаюсь зашифровать "test.txt". Это подделка. Я предоставил весь мир r/w этому файлу, и он явно обращается к нему, потому что статус говорит, что он зашифровал содержимое. Итак, на самом деле вопрос заключается в том, на что отказывается разрешение?

Дополнительная информация: если я запустил PHP из командной строки в отношении этого PHP script, который вызывает pgp, он отлично работает - файл зашифровывается. Кроме того, PERL запускает те же команды (используя SYSTEM()) при вызове из браузера. НО, когда браузер используется для вызова этого PHP скрипт, он терпит неудачу. Очевидно, что существует некоторая проблема с правами, запущенная как "nobody".

/export/home/pgphome/.pgp/pubring.pkr:open keyrings (1006: public keyring) /export/home/pgphome/.pgp/secring.skr:open keyrings (1007: private keyring) 0x221DC947: encrypt (1030: ключ, добавленный в список получателей) /export/home/eckankar/dev/www/info/test.txt:encrypt (3048: данные, зашифрованные с помощью шифрования AES-128) /export/home/eckankar/dev/www/info/test.txt:encrypt (3124: отказ в доступе)

В качестве фона здесь приведен аргумент команды PHP exec(): /opt/pgp/bin/pgp --encrypt/export/home/eckankar/dev/inc/test.txt --output/export/home/eckankar/dev/www/info/test.xxx -r членство --overwrite remove --home-dir/export/home/pgphome/.pgp -v --status-file/export/home/eckankar/dev/inc/test.txt.err

ALl папка/каталоги в этой команде предоставили миру "rwx".

Вот как выглядит выходной файл состояния при успешном завершении шифрования, если он запускается из командной строки (/opt/csw/php5/bin/php test.php), а не через браузер:

pgp: encrypt (3157: текущее местное время 2009-06-30T11: 51:17-05: 00) /export/home/pgphome/.pgp/pubring.pkr:open keyrings (1006: открытый ключ) /export/home/pgphome/.pgp/secring.skr:open keyrings (1007: private keyring) 0x221DC947: encrypt (1030: ключ, добавленный в список получателей) /export/home/eckankar/dev/inc/test.txt:encrypt (3048: данные, зашифрованные с помощью шифрования AES-128) /export/home/eckankar/dev/inc/test.txt:encrypt (0: выходной файл/export/home/eckankar/dev/inc/test.txt.pgp)

  • 0
    Вы пробовали это из командной строки? Это работает как ожидалось?
Теги:
pgp

3 ответа

1

Ответ: необходимо указать -temp-dir в командной строке.

0

Я знаю, что это старо, но я просто поучаствовал в этом. (pgp 8.5)

Как сказал Джим Томас, это проблема с разрешением на каталоги. Но по крайней мере pgp 8.5 не позволяет вам устанавливать tmpdir каким-либо образом, я вижу.

Мое решение (псевдокод):

save cwd
chdir(/tmp/)
system()/exec() pgp command
chdir(saved_cwd)

Нечетно, что pgp заставляет dmp tmp создавать в cwd, но я не видел, чтобы флаг не влиял на местоположение.

0

В каком контексте выполнения находится этот PHP script? Интерактивная командная строка, задание cron, веб-сервер (надеюсь, нет)?

В зависимости от ответа на это, я могу начать искать переменные среды, от которых зависит PGP, которые не установлены, когда он запускается из этого script.

  • 0
    Да, фактическая команда для шифрования файла выполняется в контексте веб-сервера, а именно: «никто», который имеет значительные ограничения, как и следовало ожидать. Веб-сервер шифрует предоставленную информацию о пользователях так, чтобы она не лежала в виде простого текста. (Закрытый ключ не существует на этом сервере). Любая идея о том, какие переменные окружения может увидеть pgp?
  • 0
    PS Я вижу две переменные окружения: PGP_HOME_DIR, которые я устанавливаю явно в командной строке (хотя не в моем примере --fingerprint), а другая - LD_LIBRARY_PATH, которая равна / opt / pgp / lib. Не уверен, что этот последний является проблемой ....
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню