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 "================================================"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,ConsultoraA 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.bkpAhora 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.csvSeguro 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.gzPodemos 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.txtPodemos leer o comprobar ahora el recuento de entradas:
more bank-ip.txt
wc -l bank-ip.txtEsta 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!
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:
.
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
Last updated