Cambiar la password de root de MySQL

Muchas veces cuando trabajamos con MySQL perdemos la contraseña del root lo cual es un gran problemas si solo tenemos una cuenta con todos los privilegios para acceder a MySQL, como nuestro manejo de mysql es poco, terminamos por eliminar el motor de bases de datos y empezar el trabajo de nuevo esto es una gran perdida de tiempo y hacer de esfuerzo por eso le mostrare una forma para poder cambiar la password del root en MySQL lo primero que debemos hacer es detener el servicio Mysql

#> /etc/rc.d/init.d/mysqld stop

Una vez el servicio este abajo escribimos las siguientes líneas:

#> mysqld_safe –skip-grant-tables –skip-networking

Cuando abrimos el mysqld_safe es como si trabajásemos en el modo a prueba de fallos de Windows

–skip-grant-tables esta opción causa que el servidor no use el sistema de privilegios lo que le da acceso ilimitado a todas las bases de datos a todos los usuarios de la base de datos.

–skip-networking deja de escuchar (LISTEN) conexiones TCP/IP provenientes de la red, es decir MySQL trabajaría en un ambiente totalmente local

Ahora nos logeamos como root pero no damos un password ya que en el modo abierto nos permite obviar la contraseña del usuario root hasta que terminemos de asignar una nueva password :

#>mysql -u root

Una vez dentro de mysql usamos la base de datos mysql:

mysql> use mysql;

Cambiamos la contraseña de ‘root’ agregando la siguiente línea:

mysql> UPDATE user SET password=PASSWORD(‘nuevo_pass’) WHERE user=’root’;

Si lo hacemos bien veremos algo como esto:

Query OK, 1 rows affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Reiniciamos el servicio y listo

#> service mysqld restart

La siguiente vez que entre al monitor (mysql -u root -p) usa la nueva clave o contraseña.

Sacar una lista de dominios y de IPs del servidor Plesk

Si usas Plesk y quieres un listado de todos tus dominios y la IP que utilizan, sólo tienes que ejecutar esta consulta desde un cliente o desde shell MySQL con un usuario que tenga permisos (de lectura como mínimo) a la base de datos psa (es la base de datos interna de Plesk), por ejemplo, usa como usuario las mismas credenciales que tu “superadmin” de Plesk.

SELECT i.ip_address, d.name FROM psa.hosting AS h
LEFT JOIN psa.domains AS d ON h.dom_id = d.id
LEFT JOIN psa.IP_Addresses AS i ON h.ip_address_id = i.id;

Si lo que quieres es un resumen con todas las IPs, el número de dominios que usan y un dominio de ejemplo, usa esta consulta:

SELECT i.ip_address, COUNT(d.name) AS dominios, d.name AS uno FROM psa.hosting AS h
LEFT JOIN psa.domains AS d ON h.dom_id = d.id
LEFT JOIN psa.IP_Addresses AS i ON h.ip_address_id = i.id
GROUP BY h.ip_address_id
ORDER BY h.ip_address_id, d.name

Instalar un servidor de Subversion en un CentOs con Plesk

No es nada difícil instalar un servidor de Subversion en un linux, pero hay que tener unas cuantas cosas en cuenta si queremos que se integre bien con Plesk y poder alojar todos nuestros proyectos bajo un subdominio del tipo https://svn.midominio.com/repositorio1

Como siempre, para toquetear el servidor necesitas tener acceso al sistema por consola con el usuario root. Este tutorial funciona con Plesk 8 y Plesk 9 (concretamente Plesk 9.2) corriendo sobre un Linux CentOS, que no es otra cosa que un servidor dedicado de 1and1. Y siendo honrados, hay que decir que básicamente es la adaptación y traducción del howto que yo usé escrito por Ale Le (en inglés).

NOTA: Cambia “repositorio1″ por el nombre que le quieras dar y “dominio.com” por tu nombre de dominio.

Resumen de los pasos a seguir:

  1. Instalar el servidor de Subversion
  2. Configurar apache
  3. Crear el repositorio Subversion
  4. Configurar Plesk
  5. Crear usuarios y repositorios

Paso 1: Instalar el servidor de Subversion

  1. # yum install subversion
    Una vez hecho login con el usuario root, usamos yum para instalar los paquetes de subversion (si en vez de CentOs utilizas otra distribución, quizás tengas que usar aptget u otro gestor de paquetes). Para comprobar que la versión de subversion es la correcta ejecuta # svn --version y tendría que darte 1.4 (en concreto, yo tengo 1.4.2)

Paso 2: Configurar Apache

Gracias a yum hemos instalado Subversion con gran facilidad y podríamos usarlo ya con los protocolos y puertos de subversion. Ahora hemos de configurar apache para que cuando alguien llame a https://svn.midominio.com/repositorio1 se esté conectando a subversion via WEBDAV.

  1. # yum install mod_dav_svn
    Instalamos el mod_dav_svn para apache (DAV es la tecnología que nos permitirá hacer commits a través de http). Este comando debería instalar todos los paquetes que dependan para su funcionamiento (como mod_authz_svn). Puedes ver los módulos de apache que tienes instalados en # ll /etc/httpd/modules
  2. # vi /etc/httpd/conf.d/subversion.conf
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so

    Puede ser que el archivo ya esté creado, aunque con un nombre subversion.conf.ALGO : si estas dos lineas aparecen arriba y no están comentadas, ya nos vale. Hemos de asegurarnos de que apache está cargando el archivo mod_dav_svn.so al arrancar. En /etc/httpd/conf/httpd.conf podemos ver que después de cargar módulos básicos hace Include conf.d/*.conf. Por lo que crearemos un archivo llamado /etc/httpd/conf.d/subversion.conf y le insertamos el código arriba escrito.

Paso 3: Crear el repositorio Subversion

  1. # mkdir /var/svn/
    # mkdir /var/svn/repositorio1

    Crearemos el directorio svnrepo en /var/, donde se alojarán los repositorios de subversion
  2. # svnadmin create /var/svn/repositorio1
    Instalamos un repositorio en ese directorio mediante el comando svnadmin create
  3. chmod -R 777 /var/svn/repositorio1
    Muy importante es dar permisos de escritura a este directorio. Si no es así, apache no podrá modificar estos archivos y por tanto, los commits nunca funcionarán.

Paso 4: Configurar Plesk

  1. Creamos un subdominio mediante el panel de control de Plesk.
    Dentro del dominio en el que queremos colgar nuestro servidor de subversion. Hay que ir al panel del dominio > Sitio Web > Crear subdominio y le llamamos “svn”, por ejemplo. Si al crear el dominio hemos activado https y hemos dicho que vaya al mismo sitio que http, podremos acceder por https a nuestro repositorio.
  2. # vi /var/www/vhosts/dominio.com/subdomains/svn/conf/vhost.conf
    <Location /repositorio1>
    DAV svn
    SVNPath /var/svn/repositorio1
    AuthType Basic
    AuthName “Subversion repositorio1”
    AuthUserFile /etc/svn-auth-file
    Require valid-user
    </Location>

    Como Plesk sobreescribe el archivo /var/www/vhosts/dominio.com/conf/httpd.confy el /var/www/vhosts/dominio.com/subdomains/svn/conf/httpd.conf cada vez que tocamos algo en el panel de control, hemos de hacer los cambios en otro fichero que creamos con el nombre vhost.conf. En ese fichero introducimos el código que he puesto arriba. Con eso le decimos a apache que use DAV y que el repositorio de svn está en /var/svnrepo/ y que para autenticar pida cualquier usuario válido en el archivo de passwords /etc/svn-auth-file (luego lo creamos).
  3. # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=dominio.com
    Como siempre que añadamos un archivo al directorio conf de un dominio, hemos de decir a Plesk que regenere el httpd.conf incluyendo un “include” a nuestro vhost.conf. Al poner name=dominio.com sólo regenerará ese dominio.
  4. # /etc/init.d/httpd restart
    Una vez el include está en httpd.conf, reiniciamos el apache y así leerá el nuevo archivo vhost.conf. Ahora ya tenemos montado el servidor y el subdominio apuntando a nuestro subversion en http://svn.dominio.com/repositorio1 o https://svn.dominio.com/repositorio1 si lo hemos configurado así (pruébalo, venga!) :-)

Paso 5: Crear usuarios y repositorios

  1. # htpasswd -c /etc/svn-auth-file usuario1
    La aplicación htpasswd crea un archivo en /etc/svn-auth-file e introduce un usuario con nombre usuario1 (en seguida nos pide que escribamos y confirmemos su contraseña). ¡Alerta! Si queremos crear más usuarios, no debemos usar la opción -c, ya que esta crea un nuevo fichero, sobreescribiendo el anterior. Para el segundo y siguientes usuarios, usaremos # htpasswd /etc/svn-auth-file usuario2. Si queremos borrar un usuario, podemos editar el fichero o usar la opción -D mayúscula.
  2. Además, a mi me interesa tener varios repositorios, sólo he de hacer los pasos 3, 4 (sólo el punto 2, añadiendo un bloque debajo del otro) y 5 cambiando “repositorio1″ por otro nuevo repositorio
  3. Si sólo quiero dar acceso a ciertos usuarios a repositorios concretos, puedo hacerlo cambiando la linea en vhost.conf Require valid-user por Require user usuario1 usuario2

Por favor, dejad comentarios si veis algún fallo o sugerencia. Espero que esto os ahorre unas cuantas horas de investigación :-)

Bajar ficheros adjuntos de más de 5 MB desde Horde/Webmail en Plesk

Se trata de una configuración de Horde vhost webmail, dirigida por Plesk.

Los Virtual Host (Vhost) de Plesk están en el archivo : /etc/httpd/conf.d/zz010_psa_httpd.conf.

Conéctese a su servidor mediante root SSH y modifíquelo a través del editor de texto

# nano /etc/httpd/conf.d/zz010_psa_httpd.conf

A continuación, basta incluir la siguente linea en vhost webmail :

php_admin_value memory_limit 128M

Puede modificar el tamaño 128 por 56 o lo que se estime necesario….

Por último, deberán modificarse las variables de /etc/php.ini para ficheros de upload y tamaño de POST.

# nano /etc/php.ini

Secure Shell Hacks – Linux

E aqui una pequeña wiki de SSH¡¡¡

SSH hacks

Cómo me conecto por ssh sin contraseñas

En primer lugar es necesario generar una pareja de claves en tu máquina (‘client‘), en este caso ‘bender‘:

cesar@bender ~ $ ssh-keygen -t dsa

Te preguntará un passphrase que es recomendable introducir, aunque también se puede dejar en blanco. Tras esta operación obtendrás los ficheros:

cesar@bender ~ $ ls ~/.ssh
id_dsa
id_dsa.pub
known_hosts

El fichero ‘id_dsa‘ contiene la clave privada y no debería salir de tu ordenador. Debe tener permisos 600:

cesar@bender ~ $ chmod 600 .ssh/id_dsa

El fichero ‘id_dsa.pub‘ contiene tu clave pública. Para autorizar una clave pública en una máquina remota ‘kastor‘:

cesar@bender ~ $ cat ~/.ssh/id_dsa.pub | ssh kastor 'cat - >> .ssh/authorized_keys'

No olvides poner dos símbolos «>», puesto que en caso contrario te cargarás otras claves autorizadas en la máquina ‘kastor‘. La próxima vez que hagas ‘ssh kastor‘ entrará sin más. Si has puesto passphrase, tendrás que hacer primero:

cesar@bender ~ $ ssh-add

Solución de problemas

  • Sigue sin dejar conectarme: Asegúrate de que los permisos de ‘~/.ssh/authorized_keys‘ en la máquina remota son 644.
  • Cuando escribo ‘ssh-add‘ aparece el mensaje Could not open a connection to your authentication agent: La shell desde la que intentas conectarte no esta bajo el control del agente de autenticación.
  • Solucion rápida: Lanza una shell con el agente de ssh.
cesar@bender ~ $ ssh-agent bash
  • Solución mejor: lanza todas tus X bajo el ‘ssh-agent‘. Así todas las terminales colgarán de él.

El archivo /etc/hosts

Para un acceso rápido por ssh resulta muy útil definir alias de tus máquinas comunes en el fichero ‘/etc/hosts‘:

cesar@bender ~ $ sudo vim /etc/hosts
#
# Syntax:
#
# IP-Address  Full-Qualified-Hostname  Short-Hostname
#
192.168.1.4     kastor.zylk.net kastor

Esta operación requiere privilegios de administrador o superusuario.

Como manejar las llaves de ssh ? Uso de keychain

Una posibilidad es iniciar el ordenador en ‘init 3‘ sin X y redefinir tu ‘startx‘: Este es mi ‘~/bin/startx-ssh‘:

cesar@bender ~ $ vim ~/bin/startx-ssh
#!/bin/bash

keychain ~/.ssh/id_dsa || exit
source ~/.keychain/`hostname`-sh
startx

exit

Al iniciarlo, me pide el passphrase. Otra posibilidad es incluir estas dos líneas en tu archivo ‘.gnomerc‘ o similar en otros entornos gráficos.

keychain  ~/.ssh/id_dsa
source ~/.keychain/`hostname`-sh

Y ahora, si hago login desde otra máquina, o quiero que un cron pueda conectarse a otras máquinas, incluyo las siguientes líneas:

cesar@bender ~ $ source ~/.keychain/`hostname`-sh

Si quiero cerrar el acceso, hago:

cesar@bender ~ $ keychain --stop

Para volverlo a arrancar:

cesar@bender ~ $ keychain ~/.ssh/id_dsa

Cómo y por qué usar un túnel ssh?

Has trabajado alguna vez detrás de un firewall? Tienes una página web privada de una institución detrás de un firewall a la que sólo pueden acceder las máquinas de esa institución? Has intentado alguna vez mover un fichero desde detrás de un firewall a otra máquina que esta detrás de otro firewall? Entonces, lo que necesitas es hacer un túnel ssh.

La idea básica es que desde tu máquina (‘client.machine‘) tienes acceso a una máquina ‘bridge.machine‘ que no es a la que quieres acceder, pero que desde ella si podrías acceder a tu objetivo ‘target.machine‘. El túnel te permite operar de forma transparente desde ‘client.machime‘ hasta ‘target.machine‘. Hay dos tipos de túneles: túneles directos e inversos. En un túnel directo (forward) se hace corresponder un puerto de destino (‘dport‘) en la ‘target.machine‘, con un puerto local (‘lport‘) en tu máquina ‘client.machine‘. Esto se hace de la siguiente manera:

cesar@bender ~ $ ssh -NfL lport:target.machine:dport bridge.machine

Regla nemotécnica: acuérdate de la liga de futbol americano (NFL) y que la del medio es en minúscula.
HINT: Por cierto, aseguraros que el puerto local no está siendo usado, por ejemplo que apache este escuchando en ese puerto (aunque este mapeado con un virtual host deshabilitado). Por otro lado la opción verbose (-NfvL) puede ayudar en la traza de algún error.

Conectarse por ssh a target.machine

Primero construiríamos el túnel:

cesar@bender ~ $ ssh -NfL 6666:target.machine:22 bridge.machine

Y a continuación basta con hacer lo siguiente para entrar directamente en ‘target.machine‘:

cesar@bender ~ $ ssh -p6666 localhost

O bien:

cesar@bender ~ $ scp -P6666 fichero localhost:/el/path/que/te/venga/bien

Esto requiere que en tu ‘$HOME/.ssh/config‘ añadas la línea:

NoHostAuthenticationForLocalhost yes

Ejemplos de uso para los túneles ssh

Conexión a una web de una red privada

Si montas un servicio en un ordenador detrás de un firewall, este no va a estar disponible fuera porque en general los puertos estarán capados. Por ejemplo, una web dentro de una máquina de una red privada sin salida al exterior. A través de un túnel ssh se puede acceder a este servicio.

cesar@bender ~ $ ssh -NfL 8080:target.machine:80 bridge.machine

Después en el navegador, la web de ‘target.machine‘ estará disponible en ‘http://localhost:8080‘.

Conexión al LDAP de una red privada

cesar@bender ~ $ ssh -Nvf -L 9999:kastor.zylk.net:389 cesar@kastor.zylk.net

Aunque el puerto del LDAP (389) esta capado, yo puedo acceder a él desde fuera de la red si tengo un acceso a ‘kastor‘ haciéndolo pasar a través del puerto 22 (el del ssh) y mapeandolo a un puerto, digamos el 9999 en mi máquina local. Situación inicial:

               |             |
localhost:9999   ----------- | kastor.zylk.net:389
               |             |

Túnel:

               |          22 |                     |
localhost:9999   -----------   kastor.zylk.net:22    kastor.zylk.net:389
               |             |                     |

Una vez hecho el túnel, puedo configurar en mi agenda el acceso al LDAP con servidor localhost y puerto 9999. Nota: En realidad el proceso incorpora tres máquinas, la local, la de salida y la del servicio. Lo que pasa es que en este caso las dos ultimas son la misma.

Administrar el servidor CUPS de una red privada

Desde mi máquina:

cesar@bender ~ $ ssh -Nvf -L 63131:cups.zylk.net:631 cesar@kastor.zylk.net

Túnel:

               |          22 |                 |
localhost:63131   -----------   kastor.zylk.net   cups.zylk.net:631
               |             |                 |

De este modo me puedo conectar a la interfaz web de administración desde mi máquina en http://localhost:63131

Cómo definir tus propios hosts sin ser root?

Una situación bastante común es que tener acceso a una cuenta en una máquina sin privilegios de administrador o superusuario. Para conectarte a ‘kastor.zylk.net‘ con login ‘cesar‘:

cesar@bender ~ $ ssh cesar@kastor.zylk.net

La solución está en el fichero ‘$HOME/.ssh/config‘:

Host kastor
Hostname kastor.zylk.net
User cesar
Port 22
ForwardX11 no
Protocol 2,1

Host cups
Hostname localhost
User zylk
Port 9999

Con lo cual puedes hacer directamente:

cesar@bender ~ $ ssh kastor

El ssh sabe que tiene que conectarse a la máquina ‘kastor.zylk.net‘ y usar el login ‘cesar‘. Y ahora sabe que tiene que conectarse al puerto 9999 de ‘localhost‘ usando como login ‘zylk‘. Con esto tienes ya total transparencia en los túneles. Sobre todo si te haces un alias para levantarlo del tipo de:

cesar@bender ~ $ alias tncups='ssh -NfL 9999:cups.zylk.net:22 cesar@kastor'

Ejecutas el alias, que puedes copiar en tu ‘.bashrc‘:

cesar@bender ~ $ tncups

y te puedes conectar directamente a ‘cups.zylk.net‘ de forma transparente desde el exterior.

cesar@bender ~ $ ssh cups

Utilizando el sistema de ficheros sshfs

El objetivo es tener un sistema de ficheros remoto. Una especie de NFS o samba, pero seguro a través de ssh. Instalo sshfs:

$ sudo apt-get install sshfs

Me añado al grupo «fuse»:

$ sudo vi /etc/group

Luego ejecuto:

$ sshfs cesar@kastor.zylk.net:/data1/z-docs /mnt/z-docs/

Cómo conectarse unicamente via certificado?

Configurar el demonio de ssh de modo que sólo se puedan realizar conexiones ssh a la máquina si el usuario remoto está en la lista ‘authorized_keys‘.

$ sudo vim /etc/sshd_config
PasswordAuthentication no
UsePAM no

Por defecto esta opción está marcada como yes. También se puede definir donde están las listas autorizadas (claves públicas). Por defecto las define el usuario:

#AuthorizedKeysFile     %h/.ssh/authorized_keys

Reinicio el servicio:

$ /etc/init.d/sshd restart

Desactivar el login a root por ssh

Desactivo conexiones remotas ssh a la cuenta root, como medida de prevención de ataques ssh.

$ sudo vim /etc/sshd_config
PermitRootLogin no

Reinicio el servicio:

$ /etc/init.d/sshd restart