Robustes de las contrasenas, Como

Tejedor tejedor en telecable.es
Dom Mar 9 05:52:57 CLST 2008


El vie, 07-03-2008 a las 14:50 -0500, luisito escribió:
> No soy muy ducho en linux
> 
> Como hago esto???
> 
> 
> disculpa la ignorancia

hace tiempo encontre en la red (no recuerdo donde) un script que te
puede servir de ayuda, aunque con alguna modificacion.

el nombre del autor va con el script, de todos modos hay buenos artistas
del bash en la lista que seguro pueden completarlo(si quieren).

en el manual de bash puedes ver las expresiones regulares que puedes
usar para lo que tu querias.

//--------------comienzo del script --------------------------//
#!/bin/sh
#
# @(#) Macrobit Software, SL
# Copyright (C) 1998 by Jordi Sanfeliu <admin en fibranet.com>
#
# Sintaxis:  altas username 
#
# Restricciones: no contempla las "shadow passwds"
#
# Este script genera el alta automatica para empresas y usuarios
particulares:
# Seguidamente se detallan todos los procesos que realiza al final del
alta:
#
#       - varias rutinas de validacion
#       - añade el username al /etc/passwd (uid++, gid=600 o gid=700)
#       - añade el username al /etc/group
#       - crea el directorio correspondiente en /mnt/usuarios o
en /mnt/empresas
#       - crea el mailbox del username (/var/spool/mail/????????)
#       - envia el mail de bienvenida
#

TIPO=
PASSWD="/etc/passwd"
PASSWDBAK="/etc/passwd-"
PASSWDNEW="/etc/passwd.new"
GROUP="/etc/group"
GROUPBAK="/etc/group-"
GROUPNEW="/etc/group.new"

NUID=
NGID=
SSHELL="/bin/false"

ZHOME=
UHOME="/mnt/usuarios/"
EHOME="/mnt/empresas/"
HOMEMASK=755

SPOOLMAIL="/var/spool/mail/"
MAILMASK=660


# Soy el root?
if [ `id -u` != 0 ] ; then
   echo "Solo el root puede añadir usuarios al sistema!"
   exit 1
fi

# Existe el parametro "username" ?
if [ $# != 1 ] ; then
   echo "Falta especificar el username"
   exit 1
fi

# Comprobacion de si el usuario ya existe
if id $1 >/dev/null 2>/dev/null ; then
   echo "El usuario $1 ya existe en el sistema."
   exit 1
fi

# Comprobacion de la longitud del username ( <=8 )
if [ $(echo $1 | wc -c | tr -d ' ') -gt 9 ] ; then
        echo "El nombre del usuario es mas largo de 8 caracteres."
        exit 1
fi

# Main del programa
clear
echo "Alta de una empresa o de un usuario particular al sistema   altas
v1.1"
echo
"----------------------------------------------------------------------"
echo "Copyright (C) 1998                 Jordi Sanfeliu
<admin en fibranet.com>"
echo
"----------------------------------------------------------------------"
echo
echo "Usuario = $1"
echo
echo -n "Empresa o Usuario particular (E/U): "
read TIPO
if [ ${TIPO} = "E" ] ; then
   NGID=600
   ZHOME=${EHOME}
else
   NGID=700
   ZHOME=${UHOME}
fi
echo
echo -n "Nombre real: "
read REALNAME
echo
echo -n "Bienvenida en Español o en Català (E/C): "
read LANG

# Calcula el primer UID libre
uid=`cut -f 3 -d ":" ${PASSWD} | sort -n | tail -1`
NUID=`expr ${uid} + 1`

# Presentacion de los datos antes de validar
echo
echo "------------------------------------------"
echo "login .....: $1"
echo "Nombre real: ${REALNAME}"
echo "uid .......: ${NUID}"
echo "gid .......: ${NGID}"
echo "Shell .....: ${SSHELL}"
echo "Directorio : ${ZHOME}$1"
echo "Mailbox ...: ${SPOOLMAIL}$1"
echo "Language ..: ${LANG}"
echo "------------------------------------------"
echo
echo -n "Es correcto? (s/n): "
read FINAL
echo
if [ ${FINAL} != "s" ] ; then
   exit 0
fi

# Añade el usuario al fichero "/etc/passwd"
echo "Añadiendo el usuario al fichero ${PASSWD} ..."
cp ${PASSWD} ${PASSWDBAK}
cp ${PASSWD} ${PASSWDNEW}
echo "$1:*:${NUID}:${NGID}:${REALNAME},,,,:${ZHOME}./$1:${SSHELL}"
  >> ${PASSWDNEW}

# Añade el usuario al fichero "/etc/group"
echo "Añadiendo el usuario al fichero ${GROUP} ..."
cp ${GROUP} ${GROUPBAK}
cp ${GROUP} ${GROUPNEW}
sed "s/^\(users:.*[^:]\)\$/\1,$1/"'
   '"s/^\(users:.*:\)\$/\1$1/" < $GROUPBAK > $GROUPNEW
cp ${GROUPNEW} ${GROUPBAK}
if [ ${TIPO} = "E" ] ; then
   sed "s/^\(empresas:.*[^:]\)\$/\1,$1/"'
      '"s/^\(empresas:.*:\)\$/\1$1/" < $GROUPBAK > $GROUPNEW
else
   sed "s/^\(usuarios:.*[^:]\)\$/\1,$1/"'
      '"s/^\(usuarios:.*:\)\$/\1$1/" < $GROUPBAK > $GROUPNEW
fi

# Activa estos dos ficheros criticos
mv ${PASSWDNEW} ${PASSWD}
mv ${GROUPNEW} ${GROUP}

# Crea el directorio del usuario
echo "Creando el directorio ${ZHOME}$1 ..."
mkdir ${ZHOME}$1
chmod ${HOMEMASK} ${ZHOME}$1
chown -R $1:${NGID} ${ZHOME}$1

# Crea el mailbox del usuario
echo "Creando el mailbox ${SPOOLMAIL}$1 ..."
touch ${SPOOLMAIL}$1
chmod 660 ${SPOOLMAIL}$1
chown $1:mail ${SPOOLMAIL}$1

# Finalmente, envia el mail de bienvenida
echo "Enviando el mail de bienvenida a <$1 en fibranet.com> ..."
if [ ${LANG} = "E" ] ; then
   cat /root/welcome.spa | mail -s "Bienvenido a FibraNet" $1
else
   cat /root/welcome.cat | mail -s "Benvingut a FibraNet" $1
fi
echo
passwd $1
exit 0
//--------------fin del script --------------------------//



Más información sobre la lista de distribución Linux