PHP exec pgp命令

时间:2009-06-29 18:24:05

标签: php unix pgp

我想使用PHP来'执行'pgp加密命令。无论命令行如何,我都会得到错误的64(解析器错误)或162(编码期间完全失败)。所以我已经将PHP程序中的命令行缩减为这个简单的指纹显示,这仍然是错误的:

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

如果我在命令行上运行“/ opt / pgp / bin / pgp --fingerprint”,我会得到“找到2个键”和预期的显示。但是PHP下的同一个exec给了我解析器错误64.我已经尝试了“\ n”到string命令,这没有什么区别。用户在浏览器中以'nobody'身份运行,该浏览器对pgp具有执行权限。 (如果pgp至少没有启动,我甚至不会看到'解析器错误'。)

为了在PHP下运行pgp,我需要做些什么特别的事情吗?


我已经回去尝试实际加密数据文件。这是pgp创建的'status-file'输出。它清楚地显示了我试图加密'test.txt'文件的“权限被拒绝”的最后一行的错误。那是假的。我已经将全世界的r / w授予该文件并且它可以清楚地访问它,因为它已经加密了内容。那么,真正的问题是什么是被拒绝的许可?

其他一些信息:如果我从命令行运行PHP来对这个调用pgp的PHP脚本工作正常 - 该文件被加密。另外,PERL在从浏览器调用时运行相同的命令(使用SYSTEM())。但是,当浏览器用于调用此PHP脚本时,它将失败。很明显,有一些权限问题以'nobody'的形式运行。

/export/home/pgphome/.pgp/pubring.pkr:open keyrings(1006:public keyring) /export/home/pgphome/.pgp/secring.skr:open keyrings(1007:私钥匙) 0x221DC947:加密(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 membership --overwrite删除--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:public keyring) /export/home/pgphome/.pgp/secring.skr:open keyrings(1007:私钥匙) 0x221DC947:加密(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)

3 个答案:

答案 0 :(得分:1)

答案是:需要在命令行中指定--temp-dir。

答案 1 :(得分:0)

这个PHP脚本运行的执行上下文是什么?交互式命令行,cron作业,Web服务器(我希望不是)?

根据答案的不同,我可能会开始查看PGP所依赖的环境变量,这些变量在从此脚本运行时未设置。

答案 2 :(得分:0)

我知道这已经过时了,但我对此感到满意。 (第8.5页)

正如Jim Thomas所说,这是一个目录权限问题。但至少pgp 8.5不允许你以我能看到的任何方式设置tmpdir。

我的解决方案(伪代码):

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

奇怪pgp强制在cwd中创建tmp目录,但是我没有看到任何影响位置的标志。