Script comparación listado

Imagen de Jasuarez
0 puntos

- Hola nuevamente compis :)

- Por acá con otra dudilla con Bash, actualmente estoy intentando
preparar un script que simplemente compare un log lo printe y
compare con una lista predefinida de usuarios extrayendo a
un archivo los que no se encuentren en esa lista.

- Ejemplo.

*Tengo esta lista /Var/log/Usuarios.txt

Pepe
María
Luis
Sancho
Cristina
Eva

* Sobre este log que me crea el Server/Var/log/Server.log ejecuto:

cat /Var/log/Server.log | grep illegal > /var/log/illegal.log

- Creándome un log de Usuarios ilegales en el Server "illegal.log" que haya encontrado
si existieran con sus IP:

###############################
illegal user Carlos from XX.26.167.19
illegal user Maria from XX.33.220.18
illegal user Armando from XX.220.51.11
illegal user Jose from XX.254.68.186
illegal user Cristina from XX.3.118.129

- Ahora el temario que intento realizar es tomar ese log y compararlo con la lista de Usuarios predefinida en
/Var/log/Usuarios.txt y solo realizar un log final con los Usuarios reales ilegales ya que en el illegal.log tras extraer los usuarios a un archivo ( illegal.txt )con:

grep 'illegal' /var/log/illegal.log | awk -F" " '{print $5,$7}' > /var/camlogs/CCcam/illegal.txt

- Me suelen aparecer usuarios que SI tienen permisos y claro no puedo realizar bloqueos automáticos
de IP en base a ese archivo (illegal.txt)

Básicamente sería:

illegal.log ==> comparar con ==> Usuarios.txt y los que no estén en este listado añadirlos a ==> illegal.log

- Es donde me encuentro actualmente estancado, a partir de ahí prácticamente el resto ya lo tengo,
he estadoleyendo temas de comparadores de cadenas pero no acabo de aclararme ya que las mismas son en base a líneas y dato único en un mismo archivo, por ejemplo:

-ne
no es igual a / es distinto a

if [ "$a" -ne "$b" ]

- Desconozco de que forma podría comparar ambos archivos y solo extraer lo que
realmente es necesario en base al listado de Usuarios.txt predefinida.

- Espero y deseo que la consulta no haya sido muy complicada :) :) :)

- Muchisimas gracias anticipadas.

###### Cordiales Saludos #######

Imagen de rioport
+1
0
-1

Supongo que en /var/log/illegal.log hay usuarios repetidos (diferentes intentos de inicio o qué se yo), por lo que creo que esto te podría servir:

comm -23 <(grep 'illegal' /var/log/illegal.log | awk -F " " '{print $3}' | sort -u) <(sort /Var/log/usuarios.txt) > /var/camlogs/CCcam/illegal.txt

Con esto en /var/camlogs/CCcam/illegal.txt quedarán los usuarios que no estén en la lista de usuarios permitidos (/Var/log/usuarios.txt).

Nota: Usé awk -F " " '{print $3}' porque según lo que muestras el nombre de los usuarios se encuentra en la tercera columna y no en la quinta ni septima como pones en tu ejemplo.

+1
0
-1

-- GC --

Imagen de Jasuarez
+1
0
-1

- Hola compi.

- Muchas gracias por las indicaciones :)

- Si, el "User" me lo printa el log en la tercera columna, copio tu línea y la investigo :D :D :D ,ciertamente he ido
avanzando en este tiempo e investigando la "temática" de los bash, paso a paso, comando a comando y
ha sido toda una sorpresa el descubrir todo un mundo de programación en Bash mas en profundidad.

- Desconocía ciertos términos y conceptos pero poco a poco he conseguido esta línea que de momento
y a la espera de poder subsanar ciertos ajustes me ejecuta lo que necesito.

* Tengo una lista en base a $1 con los nombres de los Usuarios llamada "legal.txt:"
* El log del Server (Illegal.log) me lo genera en base $7 y solo necesito los nombres que me los
indica en el $5 de este log, así que de momento lo he resuelto con.

paste $logdir/illegal.log $logdir/legal.txt |head| tr -s " " | awk '{if ($5 != $1)} { print $1, $2, $3, $4, $5, $6, $7 }' > $logdir/illegaluser.log

- De esta forma comparo el illegal.log con la base de datos legal.txt y obtengo finalmente un illegaluser.log con los datos "Reales" de los usuarios no permitidos con todas sus columnas
para ser tratadas posteriormente desde iptables con las IP generadas en $7.

- Lo comentado, investigo los comandos, variables, etc, etc, y realizo pruebas con tu código ya que el mío aún hay temas que no me acaban de convencer, me lo ejecuta todo perfectamente tras realizar multiples pruebas previas pero ya me he encontrado en el log del iptables con un User "Legal" bloqueado que SI estaba en el listado legal.txt

-Muchísimas gracias compi :)

+1
0
-1