sábado, 31 de octubre de 2009

For each line en bash

En ocasiones podemos necesitar desde un script en bash analizar cada una de las lineas de un fichero. Un bucle for es una buena opción para ello.

Supongamos que tenemos un fichero llamado fichero con el siguiente contenido:

uno dos tres
cuatro cinco
seis

Y un script analizar.sh con el siguiente código:

#!/bin/bash

LINEAS=$(cat fichero)

for LINEA in $LINEAS
do
  echo $LINEA
done

Si lo ejecutamos, veremos que la salida no es la esperada:

$ ./analizar.sh
uno
dos
tres
cuatro
cinco
seis

Esto ocurre porque un bucle en bash usa para separar los campos espacios en blanco, saltos de linea, etc. Tendremos que decir a bash que el separador sea exclusivamente el salto de linea:

#!/bin/bash

IFS="
"
LINEAS=$(cat fichero)

for LINEA in $LINEAS
do
  echo $LINEA
done

La variable IFS (Internal Field Separator) es una variable interna de bash que especificará el caracter separador. Con este simple cambio, podremos procesar cada linea de un fichero según nuestras necesidades.

jueves, 29 de octubre de 2009

Ocultación de contraseñas en fstab al montar comparticiones samba

Si accedemos frecuentemente a comparticiones samba desde nuestra máquina Linux, es interesante que estas comparticiones se monten automáticamente al inicio del sistema. Para ello, en el fichero /etc/fstab tendremos algo parecido a esto:

//192.168.1.1/compartido  /mnt/compartido   smbfs  defaults,username=perico,password=delospalotes,uid=juan,gid=juan,iocharset=utf8    0 0

Pero claro, cualquier usuario de nuestra máquina puede hacer un cat /etc/fstab y enterarse del usuario y contraseña que usamos para hacer esta conexión.

Existe una forma de ocultar el usuario y contraseña usados:

//192.168.1.1/compartido  /mnt/compartido   smbfs  defaults,credentials=/root/.smbcredentials/servidor,uid=juan,gid=juan,iocharset=utf8    0 0

Ahora, la entrada del fstab indica que la identificación sobre el servidor se hará usando los datos del fichero /root/.smbcredentials/servidor, fichero que por supuesto solo lo puede leer root.

El contenido del fichero /root/.smbcredentials/servidor tendrá el siguiente contenido:

username=perico
password=delospalotes

miércoles, 28 de octubre de 2009

Deshabilitar ssh para root

Una manera de securizar un poco más un equipo de cara a posibles atacantes es no permitir que un usuario se pueda logar como root mediante ssh en la máquina en cuestión. Esta medida de seguridad nos permitirá el que, si un atacante se consigue logar en nuestra máquina por un ataque de fuerza bruta (o cualquier otro método), al menos le sea imposible hacerlo (en una primera fase) como usuario root. Siempre podrá intentar logarse con su, pero este será un segundo reto que le llevará tiempo.

Para deshabilitar el acceso de logado como root en ssh, establecer el parámetro a No en el fichero /etc/ssh/sshd_config:

PermitRootLogin no

Y a continuación, reiniciar el demonio sshd:

# /etc/init.d/ssh restart