Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #
- #..Script para crear usuarios a pedal..
- #......Autor: Ángel T. Domínguez......
- #..Funcionamiento: Se pretende crear un script que
- #.tome como parámetros una lista de nombres de
- #.usuarios; y proceda a introducirlos en el fichero
- #./etc/passwd debidamente formateados
- #
- #La función ayuda va a ser simple:
- #será llamada cuando se use mal el script,
- #bien por falta de parámetros o por no ser root
- #Muestra unos mensajitos y finaliza
- #
- ayuda(){
- clear
- echo 'Scripts para crear usuarios, forma de uso:'
- echo
- echo "$0 Usuario[s]"
- echo -e "\nRecuerde que debe pasar al menos un usuario como parámetro."
- echo -n "Y que usted debe ser "
- echo 'root'
- echo
- echo 'Inténtelo de nuevo'
- exit
- }
- #
- #La función error se mostrará cuando no se pueda crear el usuario.
- #se encarga de finalizar el script mostrando un mensaje descrptivo."
- #
- function error(){
- clear
- echo "Se ha producido un error."
- echo "$1"
- echo "Pulse cualquier tecla para finalizar. "
- read -n1 -s NADA
- exit
- }
- #
- #La función nummasmas obtiene el número más alto de
- #un rango, y devuelve el número más uno.
- #
- nummasmas(){
- VALOR=`more $1 | cut -d: -f$2 | sort -n | tail -1`
- VALOR=`expr $VALOR + 1`
- }
- #
- #En primer lugar compruebo que se han pasado parámetros
- #y, de no ser así, muestro la ayuda y finalizo.
- #
- if [ -z $1 ]
- then
- ayuda
- fi
- #
- #Compruebo que el usuario es root y, si no lo es,
- #muestro la ayuda y finalizo.
- #
- if [ "$USER" != "root" ]
- then
- error "Se debe ejecutar el script con permisos de root"
- fi
- #
- #La comprobación anterior puede realizarse
- #también por medio de los permisos en /etc/passwd,
- #porque dicho fichero debe existir y quién ejecute
- #el script tiene que tener permisos de escritura
- #
- #Este if y el anterior hacen lo mismo.
- #
- if ! [ -w /etc/passwd ]
- then
- error "No se puede editar el fichero /etc/passwd"
- fi
- #
- #En este momento sé que han pasado al menos un
- #parámetro; y que quién ejecuta el script es
- #root (y tiene permisos de escritura en passwd.
- #
- #Comenzaré un bucle que iterará tantas veces como
- #parámetros se hayan introducido:
- #
- for USUARIO in $*
- do
- #
- # Lo primero será comprobar que el nombre de
- # usuario pasado no está en uso. Para ello
- # lo busco en el primer campo de /etc/passwd
- # Si ya existe lo indico y paso al siguiente
- # usuario (iteración.)
- #
- CADENA=`more etc/passwd | grep "^${USUARIO}:" | cut -d":" -f1`
- if [ "${CADENA}" == "${USUARIO}" ]
- then
- echo "$USUARIO ya existe en el sistema, será ignorado"
- sleep 3
- continue
- fi
- #
- # Si el usuario no existe obtengo los datos
- # necesarios para construir una línea para
- # añadirla al fichero /etc/passwd.
- # En primer lugar el UID, que no debe repetirse.
- #
- nummasmas /etc/passwd 3
- IDU=$VALOR
- #
- # En $IDU ya está el UID disponible gracias a la
- # función nummasmas. Ahora vamos a por el GID, para
- # lo cual preguntaremos al usuario por el grupo
- # al que va a pertenecer cada usuario. Como le puede
- # resultar tedioso, le damos la opción a que meta
- # en el mismo grupo a todos los usuarios. Eso sí,
- # sólo le vamos a permitir que indique nombres de grupo
- # que ya existen en el sistema.
- #
- # Primero compruebo que no haya fijado un grupo por defecto
- #
- if [ "${OPC}" != "s" ] && [ "${OPC}" != "S" ]
- then
- while [ -z $FLAG ]
- do
- clear
- read -p "Indique el grupo al que quiere que pertenezca $USUARIO: " GRUPO
- FLAG=`more /etc/group | grep ^${GRUPO}: | cut -d":" -f3`
- if [ -z $FLAG ]
- then
- echo -e "\nDebe introducir un grupo existente; y $GRUPO no lo és."
- sleep 2
- fi
- done
- IDG=$FLAG
- FLAG=""
- echo "$USUARIO va a formar parte del grupo $GRUPO."
- echo "¿Desea fijar $GRUPO como grupo por defecto para el resto de usuarios? "
- echo "Si pulsa "N" se le volverá a preguntar por el grupo."
- read -sn 1 -p "S/N " OPC
- clear
- fi
- #
- # Al salir del bucle sé que en $GRUPO hay un grupo
- # que existe; y, además, tengo en $IDG el GID de dicho grupo
- #
- # Ahora pediremos el nombre y apellido del usuario para
- # el campo comentarios de /etc/passwd. De igual forma
- # que con el grupo, daremos la opción de que tome el nombre
- # de usuario como valor para este campo, lo deje en blanco,
- # o le pida los datos cada vez.
- #
- if [ "${OPC2}" != "1" ] && [ "${OPC2}" != "2" ]
- then
- clear
- echo "Ahora podrá incluir el nombre y apellido de $USUARIO"
- echo "en el campo comentario de /etc/passwd; o, si lo prefiere,"
- echo "pulse 1 y todos los usuarios tendrán su nombre de usuario en "
- echo "este campo. Si pulsa 2 dejara el campo en blanco para todos."
- echo 'Pulsando culquier otra tecla se le pedirá el nombre y apellido'
- read -sn 1 -p "Pulse cualquier tecla, 1 o 2: " OPC2
- if [ "${OPC2}" != "1" ] && [ "${OPC2}" != "2" ]
- then
- echo -e "\nIndique ahora el nombre y apellido de $USUARIO"
- read COMENTARIO
- fi
- fi
- case $OPC2 in
- "1" )
- COMENTARIO=$USUARIO;;
- "2" )
- COMENTARIO="";;
- esac
- #
- # Le toca el turno al directorio home del usuario. Primero lo
- # crearé y, si todo ha ido bien, añadire su ruta a la variable
- # correspondiente.
- #
- mkdir -p /home/$USUARIO
- cp -Raf /etc/skel/* /home/${USUARIO}/
- if ! [ -d /home/$USUARIO ]
- then
- clear
- echo "Se produjo un error al crear el directorio home de $USUARIO"
- echo "Abortando la creación del usuario $USUARIO"
- sleep 2
- continue
- fi
- CASA="/home/${USUARIO}"
- #
- # Ya sólo queda construir de forma correcta la línea del nuevo
- # usuario e inyectarla en /etc/passwd (en este caso en la copia de etc/passwd)
- #
- echo "${USUARIO}:x:${IDU}:${IDG}:${COMENTARIO}:${CASA}:/bin/bash" >> /etc/passwd
- #
- # Ahora ya existe el usuario. Sólo resta cambiar el propietario de
- # su directorio home (que lo ha creado root) al nuevo usuario.
- #
- chown -R ${USUARIO}:${GRUPO} /home/$USUARIO
- #
- # Fin del bucle que se repetirá tantas veces como usuarios se hayan
- # pasado como parámetros.
- #
- done
- #
- #Muestro un resumen final
- #
- #clear
- echo "se han procesado todos los usuarios;"
- read -sn 1 -p "pulse culquier tecla para finalizar" BASURA
- clear
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement