====== [HOWTO] phpmyadmin security ======
La única manera de securizar el phpmyadmin es NOUSARLO
====== Descripcion ======
De todos es sabido que phpmyadmin no es precisamente seguro... para ello he decidido crear este minidoc de como intentar "asegurarlo" al máximo posible.
====== Instalación ======
Simplemente hace falta descargar la ultima version y descomprimir:
http://www.phpmyadmin.net/home_page/downloads.php
o por svn
svn checkout https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/tags/STABLE/phpMyAdmin phpMyAdmin-stable
====== Configuracion ======
===== Configuracion en el apache =====
Según mi punto de vista, lo más seguro será que se use únicamente HTTPS para el acceso al programa.
Para ello, podemos generar un certificado ssl propio con openssl en el server, aquí pongo un ejemplo de como hacerlo;
cd /etc/http/conf
mkdir CA
cd CA
openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
openssl genrsa -out `hostname`.key 2048
openssl req -new -key `hostname`.key -out `hostname`.csr
openssl ca -keyfile ca.key -cert ca.crt -out `hostname`.crt -infiles `hostname`.csr
openssl x509 -req -in `hostname`.csr -out `hostname`.crt -sha1 -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
mv `hostname`.crt ../ssl.crt/
mv `hostname`.csr ../ssl.csr/
mv `hostname`.key ../ssl.key/
Ya digo que es un **EJEMPLO**.
Con esto se genera un certificado de CA propio en el servidor (logicamente, saltará el aviso de ssl en el navegador) y nos autofirmamos el certificado para apache.
Ahora hace falta configurar un vhost para usarlo, como ultimamente se suele hacer, podemos usar el vhost por defecto:
_default_.conf
Pongo también un ejemplo de configuración:
ServerAdmin webmaster@servername
DocumentRoot /var/www/html/
ServerName servername
ServerAlias www.servername
Order deny,allow
Deny from all
RewriteEngine On
RewriteRule ^phpMyAdmin https://servername/phpMyAdmin/
ServerAdmin webmaster@servername
DocumentRoot /var/www/html/
ServerName servername
ServerAlias www.servername
ErrorLog "|/usr/sbin/rotatelogs -l /var/log/httpd/_default_.error_log.%Y.%m.%d 86400"
CustomLog "|/usr/sbin/rotatelogs -l /var/log/httpd/_default_.access_log.%Y.%m.%d 86400" combined
SSLEngine On
SSLCipherSuite HIGH:MEDIUM
SSLProtocol all
SSLCertificateFile conf/ssl.crt/servername.crt
SSLCertificateKeyFile conf/ssl.key/servername.key
SSLCACertificateFile conf/CA/ca.crt
Alias /phpMyAdmin /var/www/html/phpMyAdmin
Order deny,allow
Deny from all
# IPs del cliente
Allow From ip1
Allow From ip2
Allow From ipN
Order deny,allow
Deny from all
#localhost files
Allow from localhost 127.0.0.1 ip_server_01 ip_server_02 ip_server_0N
RewriteEngine On
Lo más destacable es prohibir el acceso sin https en el vhost *:80 y el *Location* con las ip's permitidas del cliente (y las nuestras para probar).
También se recomienda denegar el acceso a la localización:
/phpMyAdmin/libraries
Que contiene rutinas peligrosas
===== Configuracion en el phpMyAdmin =====
La configuración del phpmyadmin se puede hacer via web o directamente en el fichero de configuración del mismo, yo pongo directamente la del fichero.
cd /path/to/phpMyAdmin
vi config.inc.php
A destacar de este fichero:
^ Parametro ^ valores ^ Descripcion
| $cfg[['blowfish_secret']]
|| Aleatorio || Esta es la frase que usa como semilla para encriptar passwords en las cookies |
| $cfg[['Servers']][[$i]][['auth_type']] = 'cookie';
|| config, http, signon, or cookie || cookie permite autenticar a los clientes individualmente y usar los usuarios de mysql |
| $cfg[['ForceSSL']] = true ;
|| true/false || Fuerza a usar ssl si queremos entrar al myadmin |
| $cfg[['Servers']][[$i]][['AllowRoot']] = false ;
|| true/false || Deshabilitamos root |
| $cfg[['Servers']][[$i]][['hide_db']] = '(test|mysql|information_schema)';
|| nombres de bbdd || Se ocultan las bases de datos que queramos, sea cual sea el usuario que entra, es diferente de los permisos de cada uno |
Para más información acerca de la configuración de phpMyAdmin, está la [[http://wiki.cihar.com/pma/Config|wiki oficial]].