2012-03-16 3 views
1

Я борюсь с проблемой gpg в течение нескольких дней и не могу найти решение самостоятельно. я был бы рад, если бы вы могли помочь мне со следующей проблемой:GPG расшифровывает файл без содержимого/как пустой файл

Мне нужно расшифровать файл gpg в php. для этого, я пользуюсь следующей командой:

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? я также пытался chown и chgrp с ftprightson в расшифрованном файле, но ничего не помогает.

каждый ответ очень приветствуется. благодаря!

ответ

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:

до того, как было установлено с:

putenv("GNUPGHOME=/var/www/.gnupg"); 

но, очевидно, пользователь php (в моем случае «ftpadmin», обнаруженный с помощью «whoami») не имеет права доступа к этому каталогу, поэтому я скопировал папку .gpg в свою новую созданную папку пользователя php:/home/ftpadmin (с 777 завивки) и изменил GNUPGHOME:

putenv("GNUPGHOME=/home/ftpadmin/.gnupg"); 

теперь я в состоянии расшифровать файлы GPG с PHP. возможно, вы могли бы найти какую-то помощь для своей аналогичной проблемы. спасибо за каждый ответ.

0

Вы можете попробовать использовать

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

вместо этого.

Еще одна вещь, которую вы можете попробовать - запустить эту команду в оболочке как ftpadmin в каталоге, где ваш файл stammdaten.txt должен убедиться, что это не проблема с разрешением файла.

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. но когда я «su www-data», я переключаюсь и выполняю свою первоначальную команду. владелец файла и группа затем являются «www-data», файл записывается успешно. возможно ли выполнить мою команду в виде www-данных? – user963942

+0

проблема с неправильной настройкой была моей ошибкой ... команда работает в оболочке, но не в shell_exec в php. – user963942

Смежные вопросы