2012-03-16 61 views
1

我正在爲一個gpg問題掙扎幾天,無法找到我自己的解決方案。我會很高興,如果你可以幫我解決以下問題: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,但似乎沒有任何幫助。

每個答案都非常感謝。謝謝!

回答

1

我終於得到它的工作:

首先,我改變了GPG命令解密與呼應的密碼進入標準輸入:

$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文件。也許你可以爲你的類似問題找到一些幫助。再次感謝每一個答案。

0

你可以嘗試使用

cat passphrase.txt | /usr/local/bin/gpg --output stammdaten.txt --decrypt --passphrase-fd 0 stammdaten.txt.gpg 

代替。

你可以嘗試的另一件事是在你的stammdaten.txt文件所在的目錄中以ftpadmin的身份在shell中運行此命令,以確保它不是文件權限問題。

su ftpadmin 
cat passphrase.txt | /usr/local/bin/gpg --output stammdaten.txt --decrypt --passphrase-fd 0 stammdaten.txt.gpg 
+0

如果我嘗試你的建議命令,我得到gpg:無效選項「--passphrase-fd0」,如果我嘗試「su ftpadmin」沒有任何反應,我仍然以root身份登錄。但是當我「蘇www數據」我切換並執行我的初始命令。文件所有者和組則是「www-data」,文件寫入成功。是否有可能執行我的命令作爲萬維網數據? – user963942 2012-03-19 12:31:17

+0

無效選項問題是我的錯......該命令在shell中工作,但不在shell中的shell_exec中。 – user963942 2012-03-19 13:59:39