Google+

lunes, 5 de noviembre de 2012

Política de contraseñas en Linux


Si queremos aumentar la seguridad de nuestro servidores siempre podremos fortificar nuestros programas o nuestra red, pero si nuestra cuenta de usuario tiene una contraseña del tipo 123456 el trabajo anterior no vale para nada. Por eso hoy explicaré los pasos a seguir para establecer una buena política de contraseñas.

Es importante tener copia de seguridad de los siguientes ficheros, ya que podemos fastidiar el login:
# cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bck
# cp /etc/login.defs /etc/login.def.bck
Empezamos a modificar el fichero login.defs
# vi /etc/login.defs
Nos centramos en las 3 lineas que se muestran a continuación, son las que cambiaremos y adaptaremos:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
Ahora lo que significa cada linea:
  • PASS_MAX_DAYS: Establece un periodo de caducidad de contraseña en días
  • PASS_MIN_DAYS: Son los días que tiene que pasar de un cambio de contraseña a otro
  • PASS_WARN_AGE: Son los días que nos avisara antes de que caduque la contraseña

Ahora editaremos el fichero más sensible, un archivo de la carpeta pam:
# vi /etc/pam.d/system-auth
Las lineas en negrita son las que he modificado o añadido, mas abajo paso a explicar las opciones.
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_tally.so onerr=fail per_user deny=3 unlock_time=180
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_tally.so reset
account     required      pam_permit.so

password    requisite     pam_cracklib.so retry=3 minlen=8 difok=3
password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=8 lcredit=1 ucredit=1 dcredit=1 ocredit=0
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
Explicación de las opciones
  • per_user deny=3 Intensos antes de bloqueo
  • unlock_time=180: bloquea el usuario durante 180 segundos
  • retry=3 : Veces que se muestra el promtp sin mostrar error
  • minlen=8 : Minimo de caracteres de la contraseña
  • difok=6: El número de caracteres iguales en la nueva contraseña con relación a la antigua.
  • minlen=8 número mínimo de caracteres
  • lcredit=1 número mínimo de letras minúsculas
  • ucredit=1 número mínimo de letras mayúsculas
  • dcredit=1 número mínimo de caracteres numéricos
  • ocredit=0 número mínimo de caracteres especiales (#~|@$ ...)

Con esto lo tenemos configurado, ahora podemos gestionarlo con comandos. Para ver los intentos de entrada de un usuario:
# faillog -u user
Login       Failures Maximum Latest                   On

user           15        0   11/05/12 13:05:36 +0100  pc-linux
Para ver las políticas de un usuario.
# chage -l user
 Last password change                                    : Nov 05, 2012
Password expires                                        : Feb 03, 2013
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7
Los logs se almacenan en:
/var/log/secure
En el caso que un usuario tenga demasiados intentos fallidos, podemos resetear el numero de intentos otra vez a 0:
# pam_tally --user user --reset
Podemos comprobarlo ahora con el comando faillog

Los usuarios ya creados no heredan estas políticas.