Ejercicios de utilidades

Aquí iré recopilando algunos ejemplos de pequeñas utilidades del sistema empleando comandos.

Script de información del sistema

A continuación te pongo un script que refleja algunos comandos usados a lo largo de los topics para sacar información de un sistema, por ejemplo al hacer el mantenimiento:

echo "================================================"
echo "Información del sistema"
echo "================================================"

echo "Sistema Operativo:"
uname -a

echo ""
echo "Distribución de Linux"
lsb_release -a 2>/dev/null || echo "lsbe_release ha fallado"

echo ""
echo "Versión del kernel:"
uname -r

echo ""
echo "Tiempo de actividad del Sistema:"
uptime

echo ""
echo "Espacio en Disco:"
df -h

echo ""
echo "Información de la red:"
ip a

echo ""
echo "Conexiones de red activas:"
ss -tuln

echo ""
echo "Archivos de configuración de Red:"
cat /etc/hosts
cat /etc/resolv.conf

echo ""
echo "Binarios con permisos SUID:"
find / -perm -4000 2>/dev/null

echo ""
echo "Comandos ejecutables con sudo:"
sudo -l

echo "================================================"

Gestionar archivos desde terminal con find

Topic 103.2

Ejemplo 1) Vamos a crear un directorio de correos electrónicos y contraseñas a partir de un listado de usuarios

Imaginemos que tenemos el siguiente fichero users.csv:

nombre,apellido,telefono,puesto de trabajo
Juan,Pérez,555-1234,Desarrollador
Ana,López,555-5678,Analista
Luis,García,555-8765,Administrador de Sistemas
María,Fernández,555-4321,Gerente de Proyectos
Carlos,Sánchez,555-3456,Soporte Técnico
Laura,Rodríguez,555-6543,Consultora

A partir de aquí, nuestro trabajo es añadir estas personas a un servidor LDAP por ejemplo por lo que necesitamos generarles un correo de login, una contraseña y conservar el resto de datos.

Lo primero sería conservar el archivo original:

cp users.csv users.csv.bkp

Ahora ya podemos trabajar cómodamente:

# 1- Generamos un archivo a parte de logins
cut -d "," -f 1,2 users.csv | tr 'A-Z,' 'a-z.' 1>usernames.csv

# 2- Creamos un archivo con los dominios "dominio.com" con el mismo numero de lineas y lo juntamos
# Esto de momento lo haremos a mano, más adelante veremos como hacerlo en vi o automático con un script con un bucle.
paste usernames.csv domains.csv | expand -t 1 | tr ' ' '@' >logins.csv

# 3- Instalamos la herramienta de generación de contraseñas y creamos
sudo apt install pwgen
pwgen -yB -s 8 6 >passwords.txt
#Esto creará un archivo de contraseñas con simbolos especiales y letras de 6 lineas con 8 caracteres cada una.

# 4- Lo pegamos todo y eliminamos 
paste users.csv logins.csv passwords.txt |expand -t 1 | tr ' ' ';' >users.csv

Seguro que hay formas más sencilla de hacer esto mismo con Linux pero no deja de ser una práctica de comandos útil.

Más info sobre pwdgen: https://parzibyte.me/blog/2019/05/20/generar-contrasenas-seguras-pwgen-ubuntu/

Ejemplo 2) Hagamos un listado de IPs de bancos europeos

Lo primero es descargar la base de datos con la que vamos a trabajar que es la de RIPE (si no tienes instalado wget puedes instalarlo como ya sabes):

wget https://ftp.ripe.net/ripe/dbase/ripe.db.gz

Podemos dividir este archivo en paquetes mas pequeños de 10MB:

split -b 10M ripe.db ripe_

Vamos con el procedimiento:

# 1- Vamos primero a leer (cierralo con Ctrl+C) y descomprimir la bd
zcat ripe.db.gz
gunzip ripe.db.gz

# 2- Busquemos coincidencias por bancos:
grep -i -B 1 bank ripe.db 
# -i hara la busqueda case-insensitive
# -B 1 nos mostrará la fila coincidente y la superior 

# 3- Añadimos aquellas entradas de IP
grep -i -B 1 bank ripe.db | grep inetnum 
#El inetnum es el campo de rango de IPs

# 4- Damos formato al documento
#Eliminamos espacios
#Nos quedamos con lo que hay despues de ":"
#Ordenamos las filas
grep -i -B 1 bank ripe.db | grep inetnum | tr -d ' ' | cut -d ':' -f 2 | sort >bank-ip.txt

Podemos leer o comprobar ahora el recuento de entradas:

more bank-ip.txt
wc -l bank-ip.txt

Esta práctica no está afinada ya que como puedes ver se nos cuela alguna entrada en texto y ordena mal las IPs.

Esta misma práctica podría hacerse con nombres de empresas concretas o gobiernos y luego se puede usar esta información para comparar con resultados de conexiones, intrusiones, etc.

De nuevo, estamos aquí para aprender!

18MB
Open
Archivo que necesitarás para la siguiente práctica ⬇️
Ejemplo 3) Trabajar con un registro de intrusiones

Partiendo de un registro de intrusiones de un servidor público cualquiera (extraido de /var/log/secure de RedHat), vamos a usar el ejemplo que tienes arriba para practicar:

Ejemplo 4) Crear atajo de consulta de IP

Esta práctica es bastante sencilla y muy útil, como ya sabrás el comando ip address show (ip a para los amigos) te permite ver las interfaces e IPs de tu sistema. Vamos a ello:

Ahora esto lo podemos poner en un alias temporal:

O bien añadirlo al sistema como una utilidad más, para ello, debes añadirlo al archivo de configuración de tu shell (.bashrc, .bash_profile, o .zshrc), dependiendo del shell que estés utilizando, en mi caso, para Ubuntu es /home/user/.bashrc.

En la última línea añadimos el alias de arriba y guardamos el archivo. Ahora debemos abrir nueva shell o hacer los cambios persistentes con:

Listo! Ahora deberias probarlo:

.

31- Dividir el fichero ripe.db en ficheros de 10M

Topic 103.4

Ejemplo 1) Copias de seguridad con pipes y tee

Debemos crear una rutina de copia de seguridad simple que cree periódicamente una imagen de la partición /dev/sda1 con dd.

Adicionalmente podemos añadir para futuras comprobaciones de integridad de datos, que la rutina también genere un hash SHA1 del archivo de imagen:

Estos dos podemos combinarlo con pipes y el comando tee:

Si quisiéramos comprobar el SHA1 simplemente:

Topic 105.1

Usos útiles de alias

Algunos alias útiles:

Last updated