User Tools

Site Tools


zz_deprecated:securing_phpmyadmin

Differences

This shows you the differences between two versions of the page.


Previous revision
zz_deprecated:securing_phpmyadmin [2022/02/11 11:36] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== [HOWTO] phpmyadmin security ======
  
 +
 +<WRAP center round alert 60%>
 +La única manera de securizar el phpmyadmin es NOUSARLO
 +
 +</WRAP>
 +
 +====== 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
 +
 +<code>svn checkout https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/tags/STABLE/phpMyAdmin phpMyAdmin-stable </code>
 +
 +
 +====== 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;
 +
 +<code>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/
 +</code>
 +
 +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:
 +<code>_default_.conf</code>
 +
 +Pongo también un ejemplo de configuración:
 +<code>
 +<VirtualHost *:80>
 +        ServerAdmin webmaster@servername
 +        DocumentRoot /var/www/html/
 +        ServerName servername
 +        ServerAlias www.servername
 +        <Location /phpMyAdmin>
 +                Order deny,allow
 +                Deny from all
 +        </Location>
 +        RewriteEngine On
 +        RewriteRule ^phpMyAdmin         https://servername/phpMyAdmin/
 +</VirtualHost>
 +
 +<VirtualHost *:443>
 +        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
 +
 +        <Location /phpMyAdmin>
 +                Order deny,allow
 +                Deny from all
 +                # IPs del cliente
 +                Allow From ip1
 +                Allow From ip2
 +                Allow From ipN
 +        </Location>
 +
 +        <Location /phpMyAdmin/libraries>
 +                Order deny,allow
 +                Deny from all
 +                #localhost files
 +                Allow from localhost 127.0.0.1 ip_server_01 ip_server_02 ip_server_0N
 +        </Location>
 +
 +        RewriteEngine On
 +</VirtualHost>
 +</code>
 +
 +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:
 +<code>/phpMyAdmin/libraries </code>
 +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.
 +
 +<code>cd /path/to/phpMyAdmin
 +vi config.inc.php </code>
 +
 +
 +<code> <?php
 +$cfg[['blowfish_secret']] = 'qeALvWxMQSs9NXNxMVomGBxBXu2AHHvL3Gqmnmok';
 +/* YOU MUST FILL IN THIS FOR SECURINGAUTH! */
 +
 +$i = 0;
 +$i++;
 +/* Authentication type */
 +$cfg[['Servers']][[$i]][['auth_type']] = 'cookie';
 +/* Server parameters */
 +$cfg[['Servers']][[$i]][['host']] = 'localhost';
 +$cfg[['Servers']][[$i]][['connect_type']] = 'socket';
 +$cfg[['Servers']][[$i]][['socket']] = '/var/lib/mysql/mysql.sock'; 
 +$cfg[['Servers']][[$i]][['compress']] = false;
 +$cfg[['Servers']][[$i]][['extension']] = 'mysql';
 +/* User for advanced features */
 +// $cfg[['Servers']][[$i]][['controluser']] = 'pma';
 +// $cfg[['Servers']][[$i]][['controlpass']] = 'pmapass';
 +/* Advanced phpMyAdmin features */
 +// $cfg[['Servers']][[$i]][['pmadb']] = 'phpmyadmin';
 +// $cfg[['Servers']][[$i]][['bookmarktable']] = 'pma_bookmark';
 +// $cfg[['Servers']][[$i]][['relation']] = 'pma_relation';
 +// $cfg[['Servers']][[$i]][['table_info']] = 'pma_table_info';
 +// $cfg[['Servers']][[$i]][['table_coords']] = 'pma_table_coords';
 +// $cfg[['Servers']][[$i]][['pdf_pages']] = 'pma_pdf_pages';
 +// $cfg[['Servers']][[$i]][['column_info']] = 'pma_column_info';
 +// $cfg[['Servers']][[$i]][['history']] = 'pma_history';
 +// $cfg[['Servers']][[$i]][['designer_coords']] = 'pma_designer_coords';
 +
 +// dodger SPECIAL CONFIG
 +$cfg[['ForceSSL']] = true ;
 +$cfg[['Servers']][[$i]][['AllowRoot']] = false ;
 +$cfg[['Servers']][[$i]][['hide_db']] = '(test|mysql|information_schema)';
 +
 +
 +/*
 + * Directories for saving/loading files from server
 + */
 +$cfg[['UploadDir']] = //;
 +$cfg[['SaveDir']] = //;
 +
 +?>
 +</code>
 +
 +A destacar de este fichero:
 +^ Parametro ^ valores ^ Descripcion
 +|  <code>$cfg[['blowfish_secret']]</code> || Aleatorio || Esta es la frase que usa como semilla para encriptar passwords en las cookies |
 +|  <code>$cfg[['Servers']][[$i]][['auth_type']] = 'cookie';</code> || config, http, signon, or cookie || cookie permite autenticar a los clientes individualmente y usar los usuarios de mysql |
 +|  <code>$cfg[['ForceSSL']] = true ;</code> || true/false || Fuerza a usar ssl si queremos entrar al myadmin  |
 +|  <code>$cfg[['Servers']][[$i]][['AllowRoot']] = false ;</code> || true/false || Deshabilitamos root |
 +|  <code>$cfg[['Servers']][[$i]][['hide_db']] = '(test|mysql|information_schema)';</code> || 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]].