====== [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]].