¿Cómo se habilita el acceso remoto a MySQL Database Server en Ubuntu?

Ubuntu No hay Comentarios »

El acceso remoto al servidor de base de datos MySQL está deshabilitado de forma predeterminada por razones de seguridad. Sin embargo, a veces es necesario proporcionar acceso remoto al servidor de base de datos de casa o de un servidor web.

Inicio de sesión mediante SSH
En primer lugar, inicio de sesión sobre ssh al MySQLservidor remoto de base de datos:
$ ssh usuario@servidordestino

Editar archivo my.cnf
Una vez conectado le necesita para editar el MySQL configuración de servidor de archivos my.cnf utilizando por ejemplo un editor de texto como vi.
Está situado en la ubicación de /etc/mysql/my.cnf

Para editar /etc/my.cnf, ejecuta:
$ vi /etc/my.cnf

Localiza la línea en [mysqld]
Asegúrate de que está comentada o quitala y se añade el siguiente línea:

bind-address=IP-DE-TU-SERVIDOR

Guardar y cerrar el archivo
Reinicia el servidor de mysql, escribe:
$ /etc/init.d/mysql restart

Otorgar acceso a la dirección IP remota
Conectarse al servidor de mysql:
$ mysql -u root -p mysql

Conceder acceso a una base de datos existente
Vamos a suponer que siempre se realiza la conexión desde la IP remota 192.168.1.20 para base de datos denominada webdb para usuario webadmin. Para otorgar acceso a esta dirección IP escribe el siguiente comando en mysql > :

mysql> update db set Host='192.168.1.20' where Db='webdb';
mysql> update user set Host='192.168.1.20' where user='webadmin';
mysql> exit

Abrir puerto 3306
Es necesario abrir el puerto TCP 3306 usando reglas de iptables.

Podemos permitir el acceso general:
$/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

Permitirlo solo desde la IP 172.31.2.28
$/sbin/iptables -A INPUT -i eth0 -s 172.31.2.28 -p tcp --destination-port 3306 -j ACCEPT

O desde una subred 192.168.1.0/24
$/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT

Salvamos las reglas nuevas
$service iptables save

Probamos la conexión
$ mysql -u webadmin –h 49.132.5.68 –p

  • -u webadmin: webadmin es el nombre de usuario de MySQL
  • -h IP o el nombre de host: 49.132.5.68 es la dirección IP del servidor MySQL o nombre de host (FQDN)
  • -p: solicitar contraseña

o mediante telnet
$ telnet 49.132.5.68 3306

Conectarte por SSH, SFTP o SCP sin password

Scripts, Ubuntu 1 Comentario »

Para realizar scripts que se ejecuten automáticamente con un cron nos puede ser muy útil hacer una conexión por ssh, sftp o scp sin contraseña ya que el hecho de que te pregunte la contraseña hace que no se puedan automatizar labores sin intervención humana.

Este artículo describe la forma de conectarse entre dos máquinas con seguridad y sin solicitar la contraseña.

Esto se hace a través de las claves RSA. Las podemos crear con el comando:

$ ssh-keygen -t rsa

Esto nos generará dos archivos, “id_rsa.pub” e” id_rsd”. Ahora hemos de copiar el contenido del archivo “id_rsa.pub” (clave pública como indica su extensión) al servidor de destino y al archivo authorized_keys dentro de ~/.ssh/.

Primero copiamos el archivo al servidor de destino con scp o sftp. Por ejemplo:

$ sftp usuarioremoto@servidordestino
(debemos introducir la contraseña por última vez)
$put id_rsa.pub
$mv id_rsa.pub .ssh/authorized_keys

(si no existe el directorio .ssh en el servidor de destino podemos crearlo)

Si el archivo “authorized_keys” existe significa que ya había otras relaciones de confianza. Entonces tendremos que añadir el contenido de id_rsa.pub al archivo existente con el comando:

$ cat id_rsa.pub >> .ssh/authorized_keys

Esto es todo. Ya podemos ejecutar comandos sin introducir la contraseña.

Para comprobar que está todo correcto puedes ejecutar:

$ ssh usuarioremoto@servidordestino uname -a

y ya no debe pedirte contraseña alguna.

Ejecutar un shutdown, reboot o halt con sudo sin introducir password

Scripts, Ubuntu No hay Comentarios »

Andaba hace tiempo detrás de esta manera de poder ejecutar remotamente un shutdown -h now.

Mi intento está basado en un script que me realizaba una serie de copias de seguridad y las alojaba en un servidor remoto en mi casa, Me faltaba este pequeño paso pero que me tenia amargado. Se trata de que después de hacer las distintas copias de seguridad, subirlas al servidor de mi casa y al termino necesitaba que el servidor alojado en mi casa se apagase después de haber terminado de subir el backup.

No voy a detallar el script porque no viene al caso. Evidentemente para la conexión remota en mi casa utilicé las claves publicas y privadas, de esta forma no es necesario introducir la contraseña y puede hacerse un script bash (sh) para que no sea necesaria la intervención humana.

Hasta que di con esta solución, el servidor de mi casa permanecía encendido hasta que por la mañana lo apagaba con el sudo shutdown -h now que inevitablemente me pedia la contraseña de sudo.

Asi de sencillos son los pasos:

  1. Usa el comando: $ sudo visudo
  2. Busca la linea que pone "# User alias specification" y añade tu usuario que tendrá ese privilegio. La linea quedará:
    #User alias specification
    User_Alias USERS = tuusuario
  3. Ahora busca la linea # Cmnd alias specification" y añade una lista de comando como la siguiente:
    # Cmnd alias specification
    Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/reboot, /sbin/halt
  4. Ahora busca la linea que contiene "%admin ALL=(ALL) ALL" y añade el comando SHUTDOWN_CMDS que dejarás al usuario ejecutar sin contraseña de la siguiente manera:
    %admin ALL=(ALL) ALL
    USERS ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS

Ya no te preguntará la contraseña de sudo para ese usuario.

Puedes añadir el privilegio a mas usuarios añadelos después de tuusuario (en el punto 2) con una coma de la forma:
User_Alias USERS = tuusuario, otro_usuario

Después de esto, al poner en mi script remoto "ssh tuusuario@servidor sudo shutdown -h now" se apaga el servidor sin solicitar la contraseña de sudo y hace posible el apagado remoto.

Encriptación de un fichero en Ubuntu mediante OpenSSL

Scripts, Ubuntu No hay Comentarios »

En ocasiones nos es necesario encriptar un fichero para evitar que ojos ajenos puedan ver información relevante nuestra.

A continuación os voy a dar un par de comandos sencillos mediante OpenSSL que nos permitirán encriptar un fichero para estar seguros de que información que contiene no sea vista por nadie.

Se trata de usar OpenSSL para encriptar nuestros ficheros de manera que podamos proteger el contenido del mismo mediante el uso de una contraseña. Puede usarse tanto como para ficheros de texto como binarios, por ejemplo una imagen.

OpenSSL es un conjunto de utilidades para criptografia de ficheros. Si no lo tienes instalado debes ejecutar:

$ sudo apt-get install openssl

Para encriptar un fichero ejecuta:

$ openssl aes-256-cbc -a -salt -in fichero_a_encriptar.txt -out fichero_encriptado.txt.enc

Nos pedira que escribamos una password y la confirmemos.

Tambien podemos añadir la contraseña en el mismo comando y asi poder integrarlo en un script bash de la siguiente manera:
$ openssl aes-256-cbc -a -salt -in backup.tar.gz -out backup.tar.gz.enc -pass pass:tupassword

Para desencriptar el fichero del primer ejemplo ejecutamos:

$ openssl aes-256-cbc -d -a -in fichero_encriptado.txt.enc -out fichero_desencriptado.txt

WP Theme & Icons originales por N.Design Studio.
Aviso Legal Entradas RSS Comentarios RSS Iniciar sesión