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

Script para notificar intrusiones en tu red (Wifi o cableada) con Ubuntu

Este es un script que detecta quien se esta conectandoa tu red, y como comenta su autor Franklin Aliaga, es muy util si usas un Modem Router Inalambrico para detectar personas que se pueden estar conectando a tu red, hoy en dia existen infinidades de metodos para entrar a una red inalambrica asi que hay que estar monitoreando siempre la red, en este caso el script funciona de la siguiente manera, mientras tu estas haciendo tus trabajos hay un demonio que cada 3 min. ejecutara el script y mostrara en una alerta en el panel de notificaciones de tu Ubuntu.

Requisitos:

sudo apt-get install libnotify-bin nmap

Para crear el script sigue los siguientes pasos:

Abre una consola y en tu /home, teclea:

sudo gedit alertared

Copia y pega el siguiente codigo:

#!/bin/bash
#script creado por: franklin aliaga
#si no tienes nmap digita sudo apt-get install nmap
#con este comnado de nmap nos muestra los hosts conectados
#y los guarda en un archivo *.txt

#script mejorado y actualizado por: microstudi (lector de tuxapuntes)

# Modificica esta linea a tu gusto si deseas guardar los temporales en otra ruta.

ARCHIVOS="$HOME/bin/hosts"

/usr/bin/nmap -sP 192.168.2.1/24 -oG $ARCHIVOS/hosts_ip.txt

#aqui cortamos el formato obtenido anteriormente de archivo para solo obtener las ip's
#y mandarlo a otro archivo *.txt
cat $ARCHIVOS/hosts_ip.txt | grep Host | cut -c 7-20 | tr -d "\()" > $ARCHIVOS/host_ip1.txt

#aqui capturamos el numero de lineas que tiene nuestro archivo
#en este caso la cantidad de ip's que hay en el archivo
contador=$(wc -l $ARCHIVOS/host_ip1.txt | cut -c 1-2)

#aqui obtenemos la nuestra ip
ip=$(/sbin/ifconfig eth0 | grep "inet addr" | awk '{print $2}' | cut -c 6-)
echo "Mi ip: $ip"
total=$(expr $contador - 1)

var=0

while [ $var -le $total ]; do
let var=$var+1
#capturamos la ip por linea
linea=$(cat $ARCHIVOS/host_ip1.txt | sed -n "$var p")
if [ $linea != "192.168.2.1" ]; then
if [ $linea != $ip ]; then
/usr/bin/notify-send "Conectado $linea"
#Para enterar-se por la consola también:
echo "Conectado $linea"
fi
fi
done

Guarda el fichero que acabas de crear y en consola teclea:

sudo chmod +x alertared

Despues creamos el demonio:

crontab -e

Y añadimos la linea:

*/3 * * * * /home/tu nombre de usuario/alertared

*Con esto el sistema ejecutara cada 3 minutos el script y nos notificara los intrusos.

Manual de detección de vulnerabilidades en LINUX y UNIX

Manual de detección de vulnerabilidades en LINUX y UNIX
Jesus Nerney, Cesa narvaez|PDF|compresion.rar|español|6mb

La curiosidad del hombre y su capacidad para crear, le ha permitidodesde siempre avanzar a nivel tecnológico a medida que la vidamisma se encarga de imponerle nuevos retos, pero esta curiosidad abordasiempre en diferentes sentidos. Por un lado, están los queaprovechan su creatividad para construir paso a paso un mundo mejor,donde todos podamos participar y disfrutar de las bondades del biencreado. Por el otro, están aquellos que la aprovechan para finesdestructivos. En el medio se encuentra el resto de la humanidad,disfrutando o sufriendo con los nuevos descubrimientos. Incluso sepuede hablar de otro grupo que actúa de igual forma con unos ycon otros: aquellos que dedican su vida a buscar las posibles fallas delos descubrimientos realizados bien sea para mejorarlos, o simplementepara buscar conocimiento.

Enlace para descargar: http://tuentishare.com/post/libros-ebooks/277/manual-de-deteccin-de-vulnerabilidades-en-linuxunix.html

Poner como Administrador un usuario en Windows XP sin ser Administrador

Como todos sabemos, en Microsoft Windows XP es posible designar a los usuarios del equipo como Administradores o como usuarios Limitados, donde los primeros tienen control total del sistema, mientras que los segundos no pueden instalar algunos programas específicos o realizar modificaciones profundas en la configuración del sistema… Para poder cambiar el tipo de usuario, es decir pasarlo de Limitado a Administrador o viceversa, se necesita realizar esto desde un usuario Administrador (lo cual tiene sentido sino cualquier persona con una cuenta de tipo Limitada podría volverse Administrador), pero hay una manera un poco rebuscada de saltearse este requisito y modificar el tipo de usuario de Microsoft Windows XP sin tener los privilegios necesarios para hacerlo…

  • Control Userpasswords2 - 01Primero que nada nos vamos a “Inicio“, luego “Ejecutar” y escribimos “control userpasswords2” (sin las comillas) para luego presionar “Aceptar“… Se nos desplegará una nueva ventana titulada “Cuentas de usuario” donde tendremos una lista de los usuarios creados en el equipo en el cual estamos trabajando, y la posibilidad de agregar nuevos, quitar o modificar los existentes…
  • Control Userpasswords2 - 02Seleccionaremos el usuario que pretendamos modificar su tipo y presionaremos en “Propiedades“… Una nueva ventana se nos abrirá mostrándonos en primer lugar el nombre de usuario, el nombre completo y una descripción del mismo, pero tendremos que situarnos en la segunda pestaña titulada “Pertenencia a grupos” para cambiar el nivel del mismo… Los tres niveles importantes que hay que tener en cuenta antes de decidir por cual seleccionar son los siguientes:
    • Usuario estándar: es el clásico usuario limitado que le permite a la persona instalar algunos programas que no modifiquen los archivos del sistema operativo, es el usuario “Limitado” del cual Microsoft Windows XP habla en “Cuentas de usuario” dentro del “Panel de control“…
    • Usuario restringido: es un nivel más bajo que el anterior, ya que le permite a la persona hacer un uso “de oficina” de la computadora (como crear documentos y guardarlos), y no le permite instalar programas o realizar modificaciones en la configuración del sistema…
    • Administradores: son los usuarios con control total del sistema y ningún tipo de limitaciones (se encuentra dentro de la tercera opción titulada “Otros“)…
  • Una vez que decidamos el nivel a designar al usuario que estamos modificando, lo seleccionaremos y presionaremos en “Aceptar” en las dos ventanas que hemos abierto… Como estamos realizando una modificación en un usuario que se encuentra en ejecución, los cambios no se aplicarán hasta que cerremos dicha sesión y la volvamos a abrir, es por eso que cuando presionemos en el segundo “Aceptar” se nos desplegará una ventana que nos invitará a cerrar sesión, por lo que queda a elección de uno si hacerlo en dicho momento o en otra ocasión…

Con esto podemos modificar cualquier usuario, y es ideal tanto para hacerlos Administradores como para hacerlos Usuarios Restringidos si se trata de una computadora de uso público o masivo… Saludos…

Activar SpamAssassin para todos los emails en Plesk

Os digo los pasos para activar el filtro Spamassassin para todos los emails creados en un servidor con panel de control Plesk.

  1. Entramos como root via ssh
  2. Entramos como root al servidor mysql con:  mysql -u(usuarioroot) -p(password)
  3. Elegimos la base de datos psa que es la que usa el panel de control Plesk : use psa;
  4. A continuación tipeamos esta query/update para activar spamassassin en todos los emails creados en Plesk: UPDATE mail SET spamfilter = 'true' WHERE postbox = 'true';
  5. Finalmente nos salimos del entorno del servidor mysql tipeando exit
  6. Y ya para terminar de activar el filtro spamassasin en todos los emails en plesk reescribimos los archivos de configuración del email con :
    /usr/local/psa/admin/bin/mchk --with-spam

    NOTA: si el archivo mchk nos dice que no se encuentra en esa ruta hacemos un locate mchk y vemos donde se encuentra