User Tools

Site Tools


zz_deprecated:securing_phpmyadmin

Differences

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

Link to this comparison view

zz_deprecated:securing_phpmyadmin [2018/05/17 09:10]
dodger ↷ Page moved from php:securing_phpmyadmin to deprecated:securing_phpmyadmin
zz_deprecated:securing_phpmyadmin [2019/07/18 09:17]
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]]. 
zz_deprecated/securing_phpmyadmin.txt · Last modified: 2019/07/18 09:17 (external edit)