Tengo una lista simple de usuarios de una columna. Proviene del comando lastlog. Necesito poder saber si estas cuentas están deshabilitadas y no tengo acceso de root. Solo puedo ver con más y ejecutar el comando lastlog. Necesito ver si los usuarios que no iniciaron sesión en los últimos 90 días siguen activos.
Hasta ahora ejecuto
sudo lastlog -b 90
Lo que me da los usuarios que iniciaron sesión... en los últimos 90 días. Ahora simplemente lo ejecuto awk imprimiendo el primer campo y esa es mi lista de usuarios simple. Ahora me gustaría básicamente ver si en /etc/passwd, su shell es /bin/bash y si en /etc/shadow, hay un !
en su línea. Cómo puedo hacer esto. Probé los bucles for y while y parece que no puedo hacerlo bien. Cualquier ayuda sería apreciada.
Respuesta1
No estoy seguro de haberte entendido correctamente. ¿Es eso lo que buscas?
lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$"
Aquí está el desglose:
awk '{if (NR > 1) print $1 }'
- imprime la primera columna omitiendo la primera línea (encabezado del último registro)grep -f - /etc/passwd
- utilizar la entrada estándar como un archivo para obtener patrones y buscar patrones en/etc/passwd
grep "/bin/bash$"
- grep para /bin/bash,$
significaEOL
.
Algunas notas:
lastlog -b 90
- eso te da registrosmás viejode 90 días. Si desea que los usuarios que iniciaron sesión dentro de los últimos 90 días utilicenlastlog -t 90
.- Solo opté por
(NR > 1)
la solución porque la estamos usandoawk
de todos modos. Una forma más concisa de omitir la primera línea de un archivo seríased 1d
.
EDITAR
Puede utilizar un modismo similar si también desea filtrar los registros desde !
/etc/shadow. Entonces el comando completo sería:
lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$" | cut -d ':' -f 1 | grep -f - /etc/shadow | grep -v ":\!:"
cut -d':' -f 1
divide la línea usando:
como delimitador y devuelve el primer campogrep -v
mediocoincidencia invertida(seleccione líneas que no coincidan).
Respuesta2
El signo de exclamación, como habrás notado, debe "eliminarse". Intente ingresar búsquedas con una barra invertida primero: \! en lugar de ! por lo que no lo ejecuta como un comando en lugar de ser tratado como texto. En muchos casos, también puedes citarlo con comillas simples (no dobles) como esta: '!' -- dependiendo del comando que elijas, uno de ellos debería hacerlo por ti.