2011-07-19 3 views
1

Je vais les noix avec ce ..chiffrement GPG a échoué: erreur fichier ouvert

Je GnuPG installé sur mon serveur CentOS et j'essaie de chiffrer les fichiers téléchargés (téléchargés via une page PHP). Sur le serveur via la ligne de commande, cela fonctionne parfaitement. Mais via le script php, il échoue avec cette erreur:

gpg: /path-to-my-file/my-file: encryption failed: file open error 

L'utilisateur apache (qui je pense est utilisé pour exécuter la commande exec) a lecture/écriture dans le répertoire du fichier.

Le fichier est téléchargé bien (je peux le voir plus tard car j'ai supprimé la suppression du fichier non chiffré de mon code) et peut être supprimé correctement via le site php.

la commande je lance est le suivant

/path-to-gpg/gpg --homedir=/path-to-my-home-gnupg/.gnupg -e -r [email protected] the-unencrypted-file 

Toute idée comment je pourrais aborder ce sujet? grâce

Répondre

1

Quelques choses à vérifier:

  • Run system("ls " . escapeshellarg($file)) et vérifier le résultat - est-il fichier non trouvé? Permission refusée? Cela vous aidera à déboguer. Exécutez system("whoami") pour vous assurer que PHP s'exécute comme vous le pensez.
  • Exécutez echo "<pre>ls " . escapeshellarg($file) . "</pre>" puis copiez + collez la commande et exécutez-la à partir du shell pour vous assurer que le chemin d'accès au fichier est conforme à vos attentes.

Aussi, je crois que CentOS fonctionne SELinux par défaut ... Si vous l'avez installé, vérifiez les journaux (en /var/log/) pour voir si SELinux empêche Apache d'exécuter GPG.

+0

laissez-moi vérifier tout cela et revenir avec des résultats –

+1

le fichier était là. Je courais comme apache .. mais le journal des erreurs était en fait très utile donc merci de le signaler. J'ai découvert que mon pubring et secring étaient réellement la propriété de root et non d'apache. En conséquence, Apache ne pouvait pas les lire et ne pouvait pas crypter le fichier. changer de propriétaire à Apache a résolu le problème. Merci david –

+0

Génial, content d'avoir pu aider. –

0

Essayez d'exécuter la commande avec les privilèges utilisateur apache réels en mode verbose:

su apache -c /path-to-gpg/gpg -vv ... 
Questions connexes