Contraseñas seguras y uso del comando passwd
A la hora de securizar nuestro Sistema Operativo, es fundamental, la elección de una contraseña adecuada. Si no tenemos esto en cuenta, estamos creando una vulnerabilidad crítica, que afectará a la seguridad de los datos que guarde el sistema. En este artículo veremos las características que debe incluir una buena contraseña y el comando «passwd», que usamos en sistemas GNU/Linux, para administrarlas.
Sumario
- Elección de contraseña
- Sugerencias para las contraseñas de los usuarios
- Comando passwd
- Cambios de contraseña
- Otras opciones del comando
- Uso del comando passwd con ejemplos
Elección de contraseña
Como pauta general, las contraseñas deben constar de 6 a 8 caracteres, incluidos uno o más caracteres de cada uno de los siguientes conjuntos:
- Caracteres alfabéticos en minúsculas y mayúsculas
- Dígitos del 0 al 9
- Caracteres especiales
Sugerencias para las contraseñas de los usuarios
La seguridad de una contraseña depende de la solidez del algoritmo de cifrado y el tamaño del espacio de claves. En el sistema heredado de UNIX, el método de cifrado se basa en el algoritmo NBS DES. Ahora se recomiendan métodos más modernos. El tamaño del espacio de la clave depende de la aleatoriedad de la contraseña que se seleccione.
Los problemas de seguridad de las contraseñas suelen ser problema de una selección descuidada de la misma o una mala manipulación. Por esta razón, no debemos seleccionar una contraseña que aparezca en un diccionario o que sea un nombre propio, un número de licencia, fecha de nacimiento o domicilio.
Cualquiera de estas elecciones puede usarse como una conjetura para romper la seguridad del sistema.
Podemos encontrar consejos muy útiles sobre cómo elegir una contraseña segura en wikipedia
Comando passwd
El comando passwd nos permite el cambio de las contraseñas de las cuentas de usuario. Un usuario normal solo puede cambiar la contraseña de su propia cuenta, mientras que el superusuario o root tiene permisos suficientes para cambiar la contraseña de cualquier cuenta de usuario incluida en un sistema GNU/Linux, además de cambiar el período de validez de la cuenta.
En sistemas GNU/Linux encontramos un fichero en /etc/passwd, donde podemos ver todos los usuarios del sistema.
cat /etc/passwd
Aquí tenemos los usuarios normales, el superusuario y los usuarios propios del sistema. Contiene una entrada por línea para cada usuario y los campos están separados por «:». Encontramos siete campos de la siguiente manera.
1.- Nombre de usuario: se utiliza cuando el usuario inicia sesión. Debe tener entre 1 y 32 caracteres de longitud.
2.- Contraseña: un carácter «x» indica que la contraseña cifrada se almacena en el archivo /etc/shadow. Ten en cuenta que debes usar el comando passwd para calcular el hash de una contraseña escrita en la CLI o para almacenar/actualizar el hash de la contraseña en el archivo /etc/shadow.
3.- ID de usuario (UID): a cada usuario se le debe asignar una ID de usuario (UID). El UID 0 (cero) está reservado para root y los UID 1 al 99 están reservados para otras cuentas predefinidas. El sistema reserva los UID 100 al 999 adicionales para cuentas/grupos administrativos y del sistema.
4.- ID de grupo (GID): la ID de grupo principal (almacenada en /etc/group)
5.- Información de ID de usuario: este campo es para un comentario. Nos permite agregar información adicional sobre los usuarios, como el nombre completo del usuario, el número de teléfono, o cualquier otra información relevante.
6.- Directorio de inicio: establece la ruta absoluta al directorio en el que estará el usuario cuando inicie sesión. Si este directorio no existe, el directorio de usuarios se convierte en el directorio raiz «/».
7.- Comando/shell: establece la ruta absoluta al shell del usuario (/bin/bash).
Si tenemos muchos usuarios y necesitamos uno en concreto, podemos filtrar con «grep»
cat /etc/passwd | grep usuario
Casi todos los sistemas operativos modernos GNU/Linux y los de tipo UNIX disponen de algún tipo de contraseñas ocultas, y en /etc/passwd solo veremos asteriscos «*» en lugar de contraseñas cifradas. Las contraseñas cifradas las encontraremos en /etc/shadow, que solo el superusuario puede leer.
Puedes encontrar más información sobre este tema en «Administración de usuarios y grupos en GNU/Linux»
Cambios de contraseña
Como veremos más adelante, con más detalle y ejemplos, el proceso de cambio de contraseña es el siguiente.
Primero se solicita al usuario su contraseña anterior, si la hay.
Luego, esta contraseña se cifra y se compara con la clave almacenada. El usuario solo tiene una oportunidad para ingresar la contraseña correcta. El superusuario puede omitir este paso para cambiar la contraseña, si esta ha sido olvidada.
Una vez que se ha establecido la contraseña, se guarda la información de la antigüedad de la contraseña con el objeto de verificar si el usuario puede cambiar la contraseña en este periodo establecido. De lo contrario, passwd nos negará la posibilidad de cambiar la contraseña.
A continuación, nos solicita dos veces una contraseña de reemplazo. La segunda entrada se compara con la primera y si coinciden ambas el sistema ordenará que se cambie la contraseña.
Luego, se comprueba la complejidad de la contraseña.
Otras opciones del comando
Con esta herramienta, tenemos muchas más opciones además de modificar el password. También podemos imprimir o modificar la información de la cuenta, la shell de inicio e incluso las fechas de caducidad, entre otras.
-a, –all Esta opción solo se puede usar con «-S» y hace que se muestre el estado para todos los usuarios.
-d, –delete Eliminar la contraseña de un usuario (dejarla vacía). Esta es una manera rápida de deshabilitar un contraseña para una cuenta. Establecerá la cuenta nombrada sin contraseña.
-e, –expire Caducar inmediatamente la contraseña de una cuenta. Esto puede obligar a un usuario a cambiar su contraseña en el próximo inicio de sesión del usuario.
-i, –inactive INACTIVE Esta opción se usa para deshabilitar una cuenta después de que la contraseña haya caducado por un número de días. Después de que una cuenta de usuario tenga una contraseña caducada para días INACTIVOS, el usuario ya no podrá iniciar sesión en la cuenta.
-k, –keep-tokens Indica que el cambio de contraseña debe realizarse solo para la autenticación caducada (contraseñas). El usuario desea mantener sus tokens no vencidos como antes.
-n, –mindays MIN_DAYS Establecer la cantidad mínima de días entre cambios de contraseña en MIN_DAYS. Un valor de cero para este campo indica que el usuario puede cambiar su contraseña en cualquier momento.
-S, –status Muestra la información del estado de la cuenta. La información de estado consta de 7 campos. El primer campo es el nombre de inicio de sesión del usuario. El segundo campo indica si la cuenta de usuario tiene una contraseña bloqueada (L), no tiene contraseña (NP), o tiene una contraseña utilizable (P). El tercer campo da la fecha del último cambio de contraseña. Los siguientes cuatro campos son la edad mínima, edad máxima, advertencia período y período de inactividad de la contraseña. Estas edades se expresan en días.
Para ver todas las opciones en el manual del comando, ejecuta
man passwd
Uso del comando passwd con ejemplos
La función principal del comando es establecer una contraseña de usuario o modificar la contraseña existente. La sintaxis es sencilla
passwd [usuario]
Si queremos modificar la contraseña del usuario actual, no necesitamos definir ningún usuario. Veamos un ejemplo completo, en el que podremos comprobar todos sus pasos.
- 1.- Solicita la contraseña actual.
- 2.- Introducimos la nueva.
- 3.- Repetimos la nueva.
- 4.- La seguridad del sistema no admite la contraseña nueva por ser demasiado simple.
- 5.- Introducimos un password más complejo.
- 6.- Lo repetimos.
- 7.- Se acepta y actualiza a la nueva contraseña.
Si intentamos cambiar la contraseña a otro usuario, el sistema no lo permite con un usuario normal. Deberemos ser root. En este caso no nos pedirá la contraseña anterior.
En la gestión de usuarios podemos necesitar bloquear la cuenta de un usuario haciendo que su contraseña caduque, después la desbloqueamos siguiendo el mismo proceso. Para realizar estas operaciones tendremos que escalar privilegios y convertirnos en root.
# Bloquear cuenta passwd -l usuario # Desbloquear cuenta passwd -u usuario
La imagen nos muestra el proceso completo.
Podemos establecer la duración mínima y máxima en días de la caducidad de la contraseña.
# Duración minima passwd -n 5 [usuario] # Duración maxima passwd -x 500 [usuario]
Para visualizar el estado de la contraseña ejecutamos el comando con la opción «-S»
passwd -S [usuario]
Nos permite visualizar nuestro usuario actual, pero para visualizar otro usuario deberemos ser root.
En algunos casos necesitaremos lanzar un aviso al usuario, comunicándole que su contraseña está próxima a caducar. Establecemos este periodo en días, antes de que caduque, con la opción «-w».
passwd -w [dias] [usuario]
Como vemos en la captura siguiente el status de la contraseña ha cambiado.
root@debian:~# passwd -w 10 jizquierdo #Cambiamos la fecha de expiración de la cuenta passwd: información de caducidad de la contraseña cambiada. root@debian:~# passwd -S jizquierdo #Comprobamos la nueva fecha de expiración de la cuenta jizquierdo P 04/19/2022 5 500 10 -1 root@debian:~#
Si nos encontramos con que un usuario ha olvidado su contraseña, con privilegios de root, podemos borrar la contraseña del usuario concreto con la opción «-d». Que se produzca esta situación no es recomendable y para ello tenemos esta opción. Es demasiado común encontrarnos con este problema.
su - passwd -d [usuario]
No obstante, en vez de borrar la contraseña, como ya hemos comprobado, como root la podemos cambiar.
Además de la información que obtenemos con el comando «man passwd» con el que obtendremos un manual completo del comando, podemos utilizar la opción «-h», y nos las listará las opciones admitidas por el comando.
passwd -h
Se imprime la salida…
Con el comando «passwd», tenemos una poderosa herramienta de gestión de usuarios que seguro será de mucha utilidad si eres administrador de sistemas.
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.
Gracias Javier. Muy útil para cualquier tipo de usuario