我想使用 PHP 来“执行”一个 pgp 加密命令。无论命令行如何,我都会收到 err 64(解析器错误)或 162(编码期间完全失败)。因此,我将 PHP 程序中的命令行简化为这个仍然会出错的简单指纹显示:
exec("/opt/pgp/bin/pgp --fingerprint", $results);
如果我在命令行上运行“/opt/pgp/bin/pgp --fingerprint”,我会得到“找到 2 个键”和预期的显示。但是 PHP 下的同一个 exec 给了我解析器错误 64。我已经尝试过 "\n" 到字符串命令,但这并没有什么不同。用户在浏览器中以“nobody”身份运行,该浏览器对 pgp 具有执行权限。(如果 pgp 至少没有启动,我什至不会从中看到“解析器错误”。)
为了在 PHP 下运行 pgp,我需要做些什么特别的事情吗?
我已经回过头来尝试实际加密数据文件。这是 pgp 创建的“状态文件”输出。它清楚地在我尝试加密“test.txt”的文件的“权限被拒绝”的最后一行显示错误。那是假的。我已将所有世界 r/w 授予该文件,并且它清楚地访问它,因为状态表明它已加密内容。所以,真正的问题是什么是被拒绝的许可?
其他一些信息:如果我从命令行针对调用 pgp 的 PHP 脚本运行 PHP,它工作正常 - 文件被加密。此外,当从浏览器调用 PERL 时,它会运行相同的命令(使用 SYSTEM())。但是,当浏览器用于调用此 PHP 脚本时,它会失败。显然,以“无人”身份运行存在一些权限问题。
/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:加密(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 members --overwrite remove --home-dir /export/home/pgphome/.pgp -v --status-file /export/home/eckankar/dev/inc/test.txt 。呃
此命令中的所有文件夹/目录都已将“rwx”授予世界。
以下是加密成功时状态输出文件的样子,就像从命令行 (/opt/csw/php5/bin/php test.php) 运行而不是通过浏览器运行时一样:
pgp:encrypt (3157:current local time 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:private keyring) 0x221DC947:encrypt (1030:key added to recipient list) /export/home/eckankar/dev/inc/test.txt:encrypt (3048:data encrypted使用密码AES-128)/export/home/eckankar/dev/inc/test.txt:encrypt(0:输出文件/export/home/eckankar/dev/inc/test.txt.pgp)