domingo, 20 de enero de 2013

Instalando servidor SSH

Un servidor SSH es un programa de software que utiliza el protocolo Secure Shell para aceptar conexiones desde equipos remotos. Igualmente Telnet y FTP son protocolos bien conocidos pero estos envían datos en formato de texto plano, lo cual puede ser capturado por alguien que usa otro sistema de la misma red, incluyendo Internet. Mientra los datos transferidos usando la herramientas SSH estan cifrada, por lo que es seguro. El conjunto de herramientas SSH incluye ssh para conectarse con seguridad a un sistema remoto y ejecutar comandos remotos..

Instalación

root@linux# aptitude install openssh-server openssh-client

Configuración

Todas las configuraciones del servidor ssh se encuentran en el archivo /etc/ssh/sshd_config.
Para configurar el servidor debe indicarse las direcciones donde el servicio debe responder. En este caso serán conexiones ligadas a la dirección 192.168.1.100, a través del puerto 22 y utilizando la versión 2 del protocolo ssh:
/etc/ssh/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
ListenAddress 192.168.1.100
Protocol 2

#[...]
Por seguridad, se debe desactivar el login como root. on esta configuración, para adquirir los privilegios del root, se debe hacer un login usuario normal y, después, adquirir los privilegios de root. De este modo, prevenimos que el password del root sea objeto de un ataque.
/etc/ssh/sshd_config
#[...]

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes

#[...]
También se debe verificar que no sean permitidos los logins con contraseñas vacías:
/etc/ssh/sshd_config
#[...]

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

#[...]
Reiniciar el servicio:
root@linux# /etc/init.d/ssh restart

Verificación

Clientes Linux

Debe ser posible establecer una conexión ssh a la dirección 192.168.1.100. La primera vez que la conexión se efectúe, ésta debe ser confirmada, porque el servidor no está registrado en la lista de los sistemas conocidos por el cliente.


fribeiro@laptop:~$ ssh 192.168.1.100
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
RSA key fingerprint is ee:16:b0:c9:1b:ef:b4:64:e1:86:80:f4:36:9f:08:03.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.100' (RSA) to the list of known hosts.
fribeiro@192.168.1.100's password:
Linux server 2.6.32-5-amd64 #1 SMP Fri Oct 15 00:56:30 UTC 2010 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law. 
 
 
fribeiro@linux:~$ logout
Connection to 192.168.1.100 closed.
fribeiro@laptop:~$
Las conexiones con el login root no serán aceptadas:
fribeiro@laptop:~$ ssh -l root 192.168.1.100
root@192.168.1.100's password:
Permission denied, please try again.
root@192.168.1.100's password:
Permission denied, please try again.
root@192.168.1.100's password:
Permission denied (publickey,password).

 

 

Clientes Windows

El acceso a partir de clientes Windows es posible con un programa emulador del terminal que soporte ssh, como Putty:

 

 

Obtener privilegios de root

Como el login como root está desactivado, la manera de obtener privilegios de root en una conexión ssh es a través de un usuario común que escala privilegios con el comando su:
fribeiro@laptop:~$ ssh 192.168.1.100
fribeiro@192.168.1.100's password:
Linux server 2.6.32-5-amd64 #1 SMP Fri Oct 15 00:56:30 UTC 2010 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Oct 27 11:01:21 2010 from laptop.home.lan
fribeiro@linux:~$ su - root
Password:
root@linux:~#
 
Favor comentar. 

Cambiar IP en Linux desde Consola


Nuestro objetivo es configurar la interfaz de red eth0 con una dirección IP estática 192.168.1.100. También es necesario indicar la dirección del dispositivo de acceso a Internet, el gateway (192.168.1.1). En una configuración casera, este será la dirección estática del router ADSL.

Configuración

Les mostrare dos formas de como configurar la IP en la consola linux


Primeramente lo haremos editando los archivos de configuracion /etc/network/interfaces y /etc/resolv.conf




La configuración de las interfaces de red está guardada en el archivo /etc/network/interfaces:

 /etc/network/interfaces
 root@server:~# vi /etc/network/interfaces
# This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# allow-hotplug eth0
# iface eth0 inet dhcp

# Static IP address
auto eth0
iface eth0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1



También es necesario indicar la dirección del servidor DNS. En esta configuración, el servidor DNS funciona en el router/modem ADSL, por lo que el parámetro para nameserver debe tener el valor 192.168.1.1, en el archivo/etc/resolv.conf:
/etc/resolv.conf
root@server:~# vi /etc/resolv.conf
domain localdomain
search localdomain
nameserver 192.168.1.1



Segunda forma de configurar la IP en la consola linux seria de la siguente manera:

Se configura la IP con el comando ifconfig:

root@server:~# ifconfig eth0 192.168.1.100 netmask 255.255.255.0

A continuacion configuramos el Gateway:

root@server:~# route add default gw 192.168.1.1

y como ultimo paso agregamos el DNS al resolv.conf
root@server:~# echo nameserver 192.168.1.1 > /etc/resolv.conf

   

 Reiniciamos la interfaz de red para activar la nueva configuración:

root@server:~# ifdown eth0
root@server:~# ifup eth0
dependiendo del linux lo puedes hacer de las siguiente manera
root@server:~# /etc/init.d/network restart
o 
 root@server:~# service network restart

Listo ya tenemos nueva IP.


Verificación la nueva IP

El comando ifconfig suministra información detallada sobre la configuración de las interfaces de red. La configuración de la interfaz eth0 debe exhibir, los parámetros previamente definidos:
 
root@server:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:84:4c:b2
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe84:4cb2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:32 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5657 (5.5 KiB)  TX bytes:9091 (8.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)





También, debe ser posible contactar a servidores en la Internet:

root@server:~# ping -c3 www.google.com
PING www.debian.org (215.10.19.5) 56(84) bytes of data.
64 bytes from google.com (215.10.19.5): icmp_seq=1 ttl=43 time=188 ms
64 bytes from google.com (215.10.19.5): icmp_seq=2 ttl=43 time=190 ms
64 bytes from google.com (215.10.19.5): icmp_seq=3 ttl=43 time=185 ms

--- www.debian.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 185.808/188.217/190.108/1.793 ms

Favor dejar su comentario.

Programar tareas en Linux usando crontab


Linux tiene un gran programa llamado cron. Esto permite que las tareas que se ejecutan automáticamente en segundo plano a intervalos regulares. También puede usarlo para crear automáticamente copias de seguridad, sincronizar archivos, programar actualizaciones y mucho más. Bienvenido al maravilloso mundo de crontab. Editando crontab!!
 .

Crontab

El crontab (cron deriva de Cronos, en griego que significa "tiempo") de comandos, que se encuentra en sistemas operativos Unix, se utiliza para programar la ejecución de comandos de forma periódica.
Para ver los crontabs que se están ejecutando actualmente en su sistema, puede abrir un terminal y ejecutar:


crontab -l
Para editar la lista de cronjobs puede ejecutar:


crontab -e 

Se abre con el editor por defecto el podría ser vi, nano o pico. Para cambiar el editor de crontab por defecto es necesario exportar la variable de ambiente EDITOR:


#su
passwd: 
#export EDITOR="nano"
          o
#export EDITOR="vi"

Con el comando anterior cambiamos el editor de crontab, nuevamente volvermos agregar tareas en crontab, se guarde y sale del editor. Los cronjobs se escriben en el siguiente formato:




* * * * * /bin/execute/this/script.sh 



Como puedes ver hay 5 estrellas. Las estrellas representan las diferentes partes de fecha en el siguiente orden:
minutos: (de 0 a 59)
horas: (de 0 a 23)
día del mes: (del 1 al 31)
mes: (de 1 a 12)
días de semana: (de 0 a 6) (0 = domingo)

Ejecutar cada minuto

Si deja el asterisco significa cada minuto. Tal vez es un poco confuso. Vamos a usar el ejemplo siguiente:




* * * * * /home/usuario/script.sh 
Todos ellos son todavía asteriscos! Así que esto significa ejecutar /home/usuario/script.sh:
cada minuto
de cada hora
de cada día del mes
de cada mes
y todos los días de la semana.

En resumen: Este script se ejecuta cada minuto. Sin excepción.

Ejecutar cada Viernes a las 1 AM

Así que si desea programar la secuencia de comandos para ejecutar todos los viernes a la 1AM, necesitaríamos el cronjob siguiente:




0 1 * * 5 /home/usuario/script.sh 

¿Lo entiendes? Esta tarea se ejecutara cuando el reloj del sistema marque:
minuto: 0
de hora: 1
de días del mes: * (todos los días del mes)
del mes: * (cada mes)
y día de la semana: 5 (= Viernes)


Ejecutar los días laborables a las 1 a.m.

Si queremos programar una tarea en el crontab que se ejecute de lunes a viernes y a las 1 am, necesitaríamos editar el siguiente cronjob:




0 1 * * 1-5 /home/usuario/script.sh 

Lo entiendes? La Tarea está siendo ejecutada cuando el reloj del sistema marca:
el minuto: 0
de hora: 1
de días del mes: * (todos los días del mes)
del mes: * (cada mes)
y día de la semana: 1-5 (= lunes hasta viernes)


Ejecutar una tarea pasado 10 min después de cada hora y el día 1 de cada mes





10 * 1 * * /home/usuario/script.sh 
Trucos en el crontab

¿Qué pasa si te gustaría ejecutar algo cada 10 minutos? Así que usted puede hacer esto:




0,10,20,30,40,50 * * * * /home/usuario/script.sh 

Pero crontab le permite hacer esto también:




*/10 * * * * /home/usuario/script.sh 
Palabras especiales en crontab

En crontab también se puede usar palabras clave en lugar de número:

  • @reboot       Ejecutar una vez en el arranque
  • @yearly        Ejecutar anual una vez al año        "0 0 1 1 *"
  • @annually     Lo mismo que (@yearl)
  • @monthly     Ejecutar una vez al mes                "0 0 1 * *"
  • @weekly      Ejecutar una vez por semana        "0 0 * * 0"
  • @daily          Ejecutar una vez al dia                 "0 0 * * *"
  • @midnight    Lo mismo de (@daily)
  • @hourly       Ejecutar una vez a la hora             "0 * * * *"

Deje el resto de los campos vacíos para que pueda ser válida, ejemplo:



@daily /home/usuario/script.sh 


Almacenamiento de la salida de crontab

Cron puede guarda la salida de /home/usuario/script.sh en el buzón del usuario (root en este caso). Pero es más bonito si la salida se guarda en un archivo de registro separado. He aquí cómo:




*/10 * * * * /home/usuario/script.sh >> /var/log/script_output.log 2>&1   

Linux puede informar acerca de los diferentes niveles. No hay salida estándar (stdout) y error estándar (stderr). STDOUT está marcado 1, STDERR se marca 2. Así que la siguiente declaración le dice a Linux para almacenar STDERR en STDOUT, así, la creación de un flujo de datos de los mensajes y errores:




2>&1  

Ahora que tenemos un flujo de salida, se puede almacenar en un archivo.
Dónde:
 > sobrescribirá el archivo.
 >> anexará al expediente.
En este caso nos gustaría anexar:




>> /var/log/script_output.lo 



Enviar por correo la salida de crontab

Cron guarda la salida en el buzón del usuario (root en este caso) del sistema local, pero también se puede configurar para reenviar todo el crontab a una dirección de correo electrónico:



MAILTO = "yourname@yourdomain.com"   


Enviar por correo la salida de crontab de un solo cronjob

Si prefiere recibir la salida de una sola tarea programada en su correo, asegúrese de que el paquete está instalado:



Instalar msmtp, ver link
apt-get install msmtp ca-certificates 
Luego de instalado cambiar el cronjob así:



*/10 * * * * /home/usuario/script.sh 2>&1 | mutt -s "Cronjob ouput" yourname@yourdomain.com  
o 

*/10 * * * * mutt -s "prueba desde la consola" yourname@yourdomain.com </var/log/auth.log

Enviar la salida de crontab a null

Eso es fácil:


*/10 * * * *  /home/usuario/script.sh > /dev/null 2>&1  
/dev/null es un archivo especial que descarta todos los datos escritos en ella.


Deshabilitar Crontab

Para borrar todas las tareas en cron solo necesita aplicar este comando:
Crontab -r 

Espero que les sirve estas informacion.

miércoles, 16 de enero de 2013

Configurar msmtp para enviar correos desde la terminal



Msmtp es un cliente smtp pequeña pero poderosa y altamente personalizable. Puede acceder a gmail smtp usando msmtp, que es exactamente lo que voy a enseñar en este tutorial.

Instrucciones paso a paso:

1.   Instalar msmtp y ca-certificates para usarlo con SSL:

          sudo apt-get install msmtp ca-certificates

2.   Vamos a crear y editar el archivo de configuración utilizando Gedit o Vi:

          vi /etc/msmtprc
                 o
          gedit /etc/msmtprc

       Ahora copia y pega el siguiente código en el editor de texto:


        defaults
        tls on
        tls_starttls on
        tls_trust_file /etc/ssl/certs/ca-certificates.crt

        account default
        host smtp.gmail.com
        port 587
       auth on
       user username@gmail.com
       password mypass
       from username@gmail.com
       logfile /var/log/msmtp.log

    Aca reemplazaremos el username@gmail.com con su correo electrónico y su contraseña en       mypass.

3.    Le asignamos permiso al archivo.

        chmod 0644 /etc/msmtprc

4.    Su configuración msmtp está listo. Ahora podemos enviar un mensaje de prueba a ti mismo para ver si todo está funcionando correctamente:

        echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug --from=default -t username@gmail.com

                                                  o


      mutt -s "prueba desde la consola" 
username@gmail.com






      si quieres enviar el log de un archivo solo tienes que agregar estas lineas

        mutt -s "prueba desde la consola" username@gmail.com </var/log/auth.log



Nota: Una vez más reemplazar username@gmail.com con su propia dirección de correo y ejecutarlo. Usted debe recibir un correo electrónico.

Cuando este todo configurado puede crear una tarea en CRON para que este te este enviando log de tu sistema a tu email, si quieres ver como funciona el CRON espera la proxima publicacion.

Esto esta realizado sobre DEBIAN.