Auditar cuentas de usuario para contraseñas que nunca caducan con un script Bash

Durante décadas, los cambios periódicos de contraseña han sido una parte esencial de la seguridad del sistema. La idea es que si alguien obtiene tu contraseña, pueda acceder a ella por un tiempo limitado. Por lo general, es más fácil pedirle al sistema que los invite en lugar de confiar en que los usuarios recuerden cambiar sus contraseñas. Sin embargo, las cuentas de usuario normales se pueden configurar con contraseñas que nunca caducan y, por lo tanto, nunca solicitan a los usuarios que las cambien.

El script de Bash en este artículo enumera todas las cuentas de usuario regulares en su sistema que tienen contraseñas configuradas para que nunca caduquen. Por, me refiero a cuentas que generalmente tienen acceso de shell interactivo y un /home directorio telefónico.

 

Para este ejemplo puedes usar lo siguiente /etc/passwd archivo con los usuarios habituales Alice, Bob y Charlie:

[[email protected] /]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
alice:x:1000:1000::/home/alice:/bin/bash
bob:x:1001:1001::/home/bob:/bin/bash
charlie:x:1002:1002::/home/charlie:/bin/bash

Como puede ver, estos usuarios regulares tienen un directorio personal en /home. Antes de ejecutar el script Bash, verifique las tres cuentas de usuario usando chage(1):

[[email protected] /]# for USER in alice bob charlie; do echo $USER; chage -l $USER; done
alice
Last password change                                : Aug 04, 2021
Password expires                                    : never
Password inactive                                   : never
Account expires                                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

bob
Last password change                                : Aug 04, 2021
Password expires                                    : Nov 02, 2021
Password inactive                                   : never
Account expires                                     : never
Minimum number of days between password change      : 1
Maximum number of days between password change      : 90
Number of days of warning before password expires   : 7

charlie
Last password change                                : Aug 04, 2021
Password expires                                    : never
Password inactive                                   : never
Account expires                                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

Solo la contraseña de Bob caducará en cualquier momento. Las contraseñas de Alice y Charlie nunca lo serán. Pero, ¿cómo ve todas las cuentas de usuario cuyas contraseñas nunca caducan sin tener que verificar cada cuenta individualmente? Como se mencionó anteriormente, todas sus cuentas de usuario regulares tienen un directorio de inicio en /home. Puede usar este hecho para filtrarlos de /etc/passwd. Echemos un vistazo al script de Bash:

#!/bin/bash
for USER in $(grep home /etc/passwd | cut -d':' -f1)
do
  if [ "$(chage -l $USER | grep 'Password expires' | cut -d':' -f2)" == ' never' ]
 then
   echo $USER
 fi
done

El archivo /etc/passwd consta de varias columnas separadas por :, con la primera columna de cada fila que contiene el nombre de usuario. Para cada fila que contiene la cadena residencia, el script extrae el nombre de usuario y lo almacena en la variable USUARIO. Esto encuentra todas las cuentas de usuario regulares. Luego ejecuta el comando chage en estas cuentas de usuario, y si el atributo La contraseña caduca se establece en Nunca, el nombre de usuario se envía a SALIDA ESTÁNDAR.

No fue demasiado difícil, ¿verdad? Y en caso de que necesite hacerlo en un shell interactivo, no necesita escribir ningún script en absoluto, pero puede usar una sola línea de Bash en su lugar:

[[email protected] /]# for USER in $(grep home /etc/passwd | cut -d':' -f1);do if [ "$(chage -l $USER | grep 'Password expires' | cut -d':' -f2)" == ' never' ]; then echo $USER;fi;done
alice
charlie
[[email protected] /]#

Y esa es la belleza de Bash.

Índice

Envoltura

Las contraseñas que no caducan pueden considerarse una brecha de seguridad y violar las políticas de seguridad de su organización. Es sencillo verificar la configuración de la contraseña mediante un script Bash como el de este artículo, que genera una lista de cuentas de usuario regulares cuyas contraseñas nunca caducan. Este script Bash utiliza algunas de las herramientas GNU más comunes, como chage(1), cut(1), echo(1), y grep(1).

El script Bash usa construcciones típicas como un for bucle y el if-then condición para hacer el trabajo. Es una poderosa herramienta que todo administrador de sistemas debería conocer.

Artículos de interés

Subir