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