Logo
  • Entries
  • Comments
  • Popular
Recent Posts
  • January 2012
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • July 2007
Recent Comments
  • Makendra It's always a pleasure to hear from someone with eexrpitse....
  • Rubén Ortiz Hola dependerá de varias cosas pero la respuesta sería NO. ...
  • jose miguel perea Buenos días, ¿La replicación entre maestro y esclavo es i...
  • Rubén Ortiz Si lo hacéis legal, con VMware el único problema son los cos...
  • Angel Hola, estamos valorando implementar baremetal para crear un ...
Popular Articles
  • Declaro la guerra al mosquito Tigre (35)
  • Phpbb3 - encode error converter (19)
  • MySQL - Variables básicas a configurar (17)
  • Reinicio programado Windows 2003 Server (16)
  • Plesk - Evitar el SPAM (10)
  • Home
  • Contacta
  • Hosting Linux
  • Legal
  • Sobre mí – About me

CentOS 5 – GPG y PHP

Posted by Rubén Ortiz on Jul 15, 2008 in Centos, Linux | 2 comments

Una manera rápida y fácil de encriptar archivos con GnuGPG. Básicamente, se trata de generar un archivo .gpg mediante un script de php.

En consola, la generación del archivo sin hacer uso de la llave, añadiendo un password ocasional por la entrada estándar sería así

1
<strong># echo unpassword| gpg -c --passphrase-fd=0 archivo</strong>

En contra, para desencriptarlo sería

1
<strong># echo unpassword | gpg –passphrase-fd=0 archivo.gpg</strong>

De este modo, hemos encriptado “manualmente” por decirlo así, un archivo utilizando gpg. Ahora, lo interesante sería poder utilizar esto de forma automática o por cron. Dejamos de lado el tema script de sistema y nos centramos en un cron ejecutado con php. En este caso, lo ejecuta el usuario nobody nobody, usuario de Apache en Debian. En otras distros pues sería otro usuario porque la configuración de Apache será diferente.

La principal línea del código sería algo así:

1
2
echo shell_exec('echo '.$_POST['password'].' |
/usr/bin/gpg -c --passphrase-fd=0 /home/usuario/archivo');

Le pasamos a shell_exec el password con el que vamos a encriptar la base de datos con $_POST['password']. La otra parte importante es la ruta al archivo a encriptar, /home/usuario/archivo. Antes de ejecutarlo, cosas a tener en cuenta. ¿Quién ejecuta ese script? ¿Php? Lo ejecuta Apache y el usuario como hemos dicho antes es nobody. Por tanto, nobody deberá tener permisos y privilegios para poder acceder a ese archivo en cuestión. Lo ejecutamos. Si ha salido bien, ese día vamos a la administración de lotería más cercana y echamos una primitiva. Si no, miramos los logs de sistema buscando el error.

1
<strong>gpg: fatal: can't create directory `/root/.gnupg': Permission denied</strong>

El directorio .gnupg no está creado. Lo creamos. Para hacer las pruebas, le podemos dar permisos totales y luego, restringirlos hasta el nivel más adecuado.

1
2
<strong># mkdir /root/.gnupg
# chmod 777 /root/.gnupg</strong>

Luego lo cambiamos. Volvemos a ejecutar. Quizá veamos un error como este

1
<strong>gpg: cannot open `/dev/tty': No such device or address</strong>

Es un error relacionado con la entrada estándar. El código que estamos ejecutando espera por la entrada estándar, los carácteres que confirmarán el password elegido. Para solucionarlo, modificamos el código de nuestro php añadiendo la opción –batch

1
2
echo shell_exec('echo '.$_POST['password'].' |
/usr/bin/gpg -c --passphrase-fd=0 --batch /home/usuario/archivo');

Seguimos repasando los logs de sistema y comprobando si por fin se ha encriptado nuestro archivo.

1
2
3
<strong>gpg: can't create `/home/yunuuser/notas.txt.gpg': Permission denied
gpg: symmetric encryption of `/home/yunuuser/notas.txt' failed:
file create error</strong>

Si vemos un error como este es que el usuario nobody no puede crear el archivo encriptado en la ruta que le hemos especificado. Cambiamos privilegios y propietario del directorio y volvemos a crear. Al final, deberemos tener nuestro archivo encriptado mediante un password generado manualmente por PHP.

  • http://lists.gnupg.org/pipermail/gnupg-users/1999-March/003807.html
  • http://lists.gnupg.org/pipermail/gnupg-users/2003-October/020539.html
  • http://www.alt-php-faq.org/local/65/
  • http://lists.gnupg.org/pipermail/gnupg-users/2002-May/013312.html

2 Responses to “CentOS 5 – GPG y PHP”

  1. Insane says:
    16 de March, 2009 at 4:41 am

    Gracias!!!!

  2. Txumari says:
    5 de June, 2009 at 10:59 am

    Te agradezco este articulo. No sabes tu la de tiempo que llevo buscando como conseguir pasar la contraseña. Lo que si comentar es que a mi no me reconocia tu linea de codigo y era porque me faltaban los dos guiones delantes de passphrase en vez de uno como tu tienes.

    Muchas gracias.

Leave a Reply

Click here to cancel reply.

Nube de Tags

apache bare metal benchmark cacti centos dell drupal esxi General gripe A Hardware humor IIS kayako Linux lpi lyric Lyrics memcached mysql nginx openfiler OpenVZ openx Parallels php Phpbb plesk postgresql proftpd raid SQL Server ssh svn trac ubuntu varnish Virtualizacion Virtuozzo Virtuozzo Linux Warphammer.net Windows windows 2003 wordpress zabbix

Categorias

  • 2003 Server
  • Apache 2.X
  • benchmark
  • Centos
  • Cuanto (Luser) Cabron
  • ESXi
  • General
  • Hardware
  • IIS
  • Lighttpd
  • Linux
  • Lyrics
  • MySql
  • Nginx
  • OpenVZ
  • Parallels
  • Parallels Bare Metal
  • Php
  • Phpbb
  • Plesk
  • PostgreSQL
  • Prestashop
  • Software
  • SQL SERVER
  • Ubuntu
  • Varnish
  • Virtualizacion
  • Virtuozzo
  • Virtuozzo Windows
  • VMWare
  • Warphammer.net
  • Windows
  • Wordpress

Blogroll

  • David Toribio
  • EasyCompany.es
  • Marius Duch
  • Series
  • Warphammer.net

Recursos

  • Backup Plesk9
  • CentOS 5 32 bits RPMs
  • CentOS 5 64 bits RPMs
  • Lighttpd
  • MySQL Tunner
  • OpenVZ – Panel – PROXMOX
  • OpenVZ – Panel – VTONF
  • OpenVZ Wiki
  • Parallels Virtual Automation Resources
  • Plesk 8 Docs
  • Plesk 9 Docs
  • Plesk Hacker
  • Port80 – Compression Check
  • Virtuozzo DOCS
  • Virtuozzo Lin Commands
  • Virtuozzo Win Commands
  • Virtuozzo Windows Docu

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Designed by Elegant Themes | Powered by Wordpress