Comprobar existencia de un archivo en Bash

A veces suele ser útil en los scripts comprobar si un archivo existe, para evitar acciones o tomar otras.
El siguiente código comprueba la existencia de un archivo y muestra en pantalla el correspondiente estado.

#!/bin/bash
FILE=/home/bernie/Escritorio/pp

if [ -e $FILE ]; then
echo El fichero existe
else
echo El fichero no existe
fi

Saludos!

Listar las carpetas por tamaño en linux

Suele ser útil obtener los tamaños de los archivos de una pc. Muchas veces es necesario borrar ciertos archivos por falta de espacio, o saber cuál es el que ocupa mas, etc. El simple ls (o todos sus sabores ls -al, etc) no devuelve mas que el listado de las carpetas o archivos que se encuentran en un directorio. Para obtener la lista de carpetas ordenadas por tamaño, puede ser útil correr la siguiente línea:

for f in * ; do if [ -d "$f" ]; then du -sh "$f" ; fi done | sort -n

Espero que sea de utilidad!
Saludos!!

Datos del Linux que corre en la PC

Es un buen comando que sirve para obtener la versión del sistema operativo (linux) que está corriendo en una pc.

lsb_release -a

La info que se devuelve es algo así como:

LSB Version: :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: RedHatEnterpriseAS
Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 4)
Release: 4
Codename: NahantUpdate4

A veces suele ser importante (y util) saber que sistema operativo estamos corriendo.
Saludos!

Fail2Ban

Como trabajo de la materia Linux, elegimos el estudio y configuración de algún software de la vuelta. Además si éste no tenía artículo en Wikipedia español debíamos hacerlo. Así fue como dimos con fail2ban, un framework escrito en Python, que básicamente se encarga de escanear logs. El usuario puede especificarle expresiones regulares, y cuando el programa encuentra dichas expresiones regulares en los logs, toma una determinada acción. La acción puede tratarse de «bloquear» una IP, un puerto, un protocolo, etc. Puede ser extremadamente útil para evitar ataques de fuerza bruta por ejemplo. En el proyecto puntualmente levantamos un servidor web (lighttpd) y cuando un usuario se logueaba mal mas de 2 veces, bloqueaba la IP desde la cuál se estaba tratando de loguear por 60 segundos.
Es todo ajustable, de manera que si queremos bloquear una IP por más tiempo, basta con cambiar 60 por la cantidad de segundos que querramos y listo!

INSTALACIÓN
Simplemente sudo apt-get install fail2ban
(Conviene tener instalado Python 2.5 previamente, sino sudo apt-get install python2.5)

CONFIGURACIÓN

Para la configuración se tienen básicamente 2 archivos importantes.
/etc/fail2ban/jail.conf
/etc/fail2ban/filter.d/archivoConReglas.conf

El primer archivo es el que contiene todas las configuraciones referentes al bloqueo que se desea realizar. Se indica que puertos se han de bloquear, el archivo conteniendo las expresiones regulares que se desean buscar, el nombre del log que se desean encajar las expresiones regulares, el tiempo de bloqueo, etc.

port = puertos que bloqueara o aplicará la penalización
protocol = protocolos que bloqueara o aplicará la penalización
filter = indica el nombre del archivo que contendrá las expresiones regulares
logpath = path al archivo de log que se quiere escanear
maxretries = máxima cantidad de reintentos de fallo
También existen otros parámetros como bantime que especifica la cantidad de tiempo en segundos que se deseará bloquear la pc atacante.

El segundo es un archivo que se crea con las expresiones regulares a buscar. En nuestro caso buscaríamos expresiones que fueran del tipo:
(http_auth.c.872).*: (Donde es un alias que contiene IP, protocolo, puerto, etc). El http_auth.c.872 es el código de error para simbolizar que hubo un intento fallido de logueo.

Es un software sumamente interesante, que acepta trabajar con la mayoría de los servidores o programas importantes (Apache,QMail, Lighttpd, SSH, entre otros).
Invito a probarlo, puede llegar a ser de gran utilidad.
Saludos!

Restaurando Grub segunda vuelta

Cambia, todo cambia… Hace unos meses tuve este problema y lo solucioné como está escrito en el post Restaurando Grub. Sin embargo ahora me sucedió de nuevo, y ya no está el Ubuntu 9.04 ni el Windows 7 Release Candidate. Ahora los actores son Ubuntu 9.10 (que trae el nuevo gestor Grub 2) y el Windows 7 definitivo.
Grub 2 es bastante diferente que Grub en varios aspectos, archivos de configuración diferentes, nombre de variables también diferentes, etc.
Para restarurar grub 2 y que vuelvan a aparecer Windows 7 con Ubuntu 9.10 Karmic Koala, hay que seguir los siguientes pasos:

1. Bootear con un live cd de Ubuntu que se tenga a mano

2. Escribir en consola «sudo fdisk -l» (para listar la tabla de particiones y saber en qué partición tenemos instalado Ubuntu 9.10)

3. sudo mount /dev/sda1 /mnt (dnd sda1 es la partición en la cuál tenemos Ubuntu 9.10, en mi caso sda1)

4. sudo mount –bind /dev /mnt/dev (con este comando montamos el resto de los dispositivos)

5. sudo chroot /mnt (ejecutamos chroot para poder acceder como root a nuestro sistema de archivos)

6. grub-install –recheck /dev/sda (con este comando cargamos Grub en el MBR del sda, disco indicado. OJO! DEBE SER EL DISCO Y NO EL NÚMERO DE PARTICIÓN, SI PONES EL NÚMERO DE PARTICIÓN PROBABLEMENTE PIERDAS WINDOWS).

7. Reiniciar y cuando arranca el Ubuntu 9.10 de nuestra pc hacemos:
sudo update-grub2

Espero les sea de utilidad. Son pocos pasos y rápidos y pronto tenemos nuestro Ubuntu/Windows andando de nuevo.
Saludos!

Cambiando usuario en un script

Los otros días se nos presentó un problema que parecía trivial pero que demandó un poco mas de tiempo que el esperado. El mismo consistía en levantar una serie de aplicaciones al inicio sin inconvenientes de que las mismas fueran levantadas como root, a excepción de una. De manera que lo que se nos ocurrió fue desde el arranque hacer un script que levantara todas las aplicaciones con root y al final cambiarse de usuario con el famoso su y ejecutar los comandos con el nuevo usuario. Sin embargo, esto no funcionó. 😦 Por el contrario, y luego de un ratito explorando el man y algunos foros, encontramos lo siguiente:

#!/bin/bash

su – usuario1 -c «touch /home/usuario1/ejemplo.ok»

exit 0

Ejecuta un comando con el usuario especificado. Sin misterios :-D.
Gracias a Agustin con el que remamos esto!!!

Restaurando Grub

Tenía en mi pc dos particiones en las cuales en cada una tenía instalado Windows Vista y Ubuntu 9.04. Dado que el vista no caminaba del todo bien, y ante la salida del Windows 7, decidí instalarlo y probarlo (y la verdad que está sustancialmente mejor que su antecesor). Sin embargo al instalarlo pasó por arriba al MBR y se hacía imposible el booteo de Ubuntu. Navegando un pocó encontré la solución al problema.
1. Bootear con un live cd y montar la partición en la cual se encuentra Ubuntu.
Escribir en consola:
2. sudo grub
3. root (HDX,Y) #Donde X es el número de disco e Y la partición.
4. setup HDX
5. quit

(HDX,Y) hacen referencia al disco y partición, por ejemplo (HD0,1) es la segunda partición del primer disco (recuerden que las numeraciones comienzan en 0).
Como nota si no saben en qué disco/partición se encuentra instalado Ubuntu pueden escribir en la consola del grub (luego de «sudo grub») «find /boot/grub/stage1».

Espero que le sea te utilidad! Saludos!!