我正在努力解决gpg问题几天,并且无法找到我自己的解决方案。如果你能帮助我解决以下问题,我会很高兴的:
我需要在php中解密一个gpg文件。为此,我使用以下命令:
cat passphrase.txt | /usr/local/bin/gpg --decrypt --passphrase-fd 0 stammdaten.txt.gpg>stammdaten.txt
the passphrase.txt contains the password for decryption
stammdaten.txt.gpg is the encrypted file
the decrypted data will be written in stammdaten.txt
when i run this command in php:
shell_exec=("cat passphrase.txt | /usr/local/bin/gpg --decrypt --passphrase-fd 0 stammdaten.txt.gpg>stammdaten.txt")
i get a zero-byte output file (stammdaten.txt) with owner=ftpadmin and group=psacln
but when i execute the same command via ssh terminal (as root), the data will be decrypted and written correctly with file owner=root and group=root.
我认为,这是一个许可问题。我怎样才能在php中正确使用该命令?我还尝试使用ftprightson解密文件chown和chgrp,但似乎没有任何帮助。
每个答案都非常感谢。谢谢!
答案 0 :(得分:1)
最后我开始工作了:
首先,我更改了用于解密的gpg命令,并将密码短语回显到stdin:
$passphrase = utf8_decode('mypassphrase');
$encrypted = 'fullsystempathtogpgfile.gpg';
"echo '$passphrase' | /usr/local/bin/gpg -v -v --batch --passphrase-fd 0 --no-default-keyring $encrypted";
在执行shell_exec之前我需要更改gpg的homedir:
之前设置:
putenv("GNUPGHOME=/var/www/.gnupg");
但显然php用户(在我的情况下是“ftpadmin”,发现有“whoami”)没有访问该目录的权限,所以我将.gpg文件夹复制到我新创建的php用户文件夹中:/ home / ftpadmin (用777烫发)并改变了GNUPGHOME:
putenv("GNUPGHOME=/home/ftpadmin/.gnupg");
现在我能用php解密gpg文件。也许你可以为你的类似问题找到一些帮助。再次感谢每一个答案。
答案 1 :(得分:0)
您可以尝试使用
cat passphrase.txt | /usr/local/bin/gpg --output stammdaten.txt --decrypt --passphrase-fd 0 stammdaten.txt.gpg
代替。
您可以尝试的另一件事是在shell中以ftpadmin的身份在stammdaten.txt文件所在的目录中运行此命令,以确保它不是文件权限问题。
su ftpadmin
cat passphrase.txt | /usr/local/bin/gpg --output stammdaten.txt --decrypt --passphrase-fd 0 stammdaten.txt.gpg