PDA

Ver la Versión Completa : Problema con Shell Script para crear usuarios



woodstock
10/10/2006, 14:07
Hola,

Hoy tengo que entregar en el cole un shell script para el mismo propósito describido en el título.
El script está hecho y el usuario se crea, pero luego no me puedo logear con él.
Les dejo el código:


para ver el script lean más abajo

Alguna idea ?

P.D: me parece que me falta algo en el useradd pero no doy con que.

Running Bear
10/10/2006, 15:37
te sirve esto????
http://es.tldp.org/Tutoriales/NOVATO/novato-a-novato/novato-a-novato-9.html

http://www.ssl.ull.es/node/53

ashtophet
10/10/2006, 15:41
La definición de variables que van a surgir del STDIN no es necesaria.

Si vas a hacer que $HOME=/home/$nombre, mejor ya no utilices el switch -d, es lo que hace por defecto useradd. Lo mismo para -s si bash es la shell por defecto del sistema...

Me parece que el problema viene por "-p", que espera una password con formato especial:


-p, --password PASSWORD
The encrypted password, as returned by crypt(3). The default is to disable the account.


En vez de especificar la pass prueba, simplemente, añadir las lineas a tu script:



tput cup 8 0 ; echo "Ingrese una contraseña: "
tput cup 9 0 ; echo "---------------------------------------"
tput cup 8 38
passwd $nombre


Si quieres opciones adicionales (que expire en un tiempo determinado, que produzca advertencias para ser cambiada, etc...): man passwd

HTH

ashtophet
10/10/2006, 15:51
Ah, y no le podrás mostrar cual es la contraseña actual al usuario, GNU/Linux encripta las contraseñas (man shadow) y no hay un modo "fácil" de mostrarlas... :D

woodstock
10/10/2006, 17:29
Gracias por estar ahí :)

Running los links están muy buenos lastima que el segundo, los scripts están en perl y aca puedo usar solo el shell.

Voy a probar lo que dices ashtophet
Cuando quede terminado también lo subo por si a alguien le interesa :P

woodstock
10/10/2006, 21:37
Listo funcinó lo más bien, el problema era la contraseña.


La definición de variables que van a surgir del STDIN no es necesaria.
Tienes razón, es una costumbre que me quedó de programar en C


Lo mismo para -s si bash es la shell por defecto del sistema...
Lo dejo porque en vez de abrir un shell puedo hacer que abra un menu hecho a medida para el usuario y que nunca toque directamente un shell.
Como ejemplo puedes crear un usuario y ponerle en el home $HOME/crearusuario.sh
Obviamente nunca te logearas porque necesitas permisos de root para usar el script pero funciona :)


Si vas a hacer que $HOME=/home/$nombre, mejor ya no utilices el switch -d, es lo que hace por defecto useradd
Tal vez al administrador se le ocurra reubicar a los usuarios en otra carpeta X

Queda muy grosero si lo entrego bajo GPL?

woodstock
10/10/2006, 21:45
El script: (testeado en Ubuntu 6.06 (32 y 64 bits) y en SuSE 10.1)


#!/bin/bash

# crearusuarios v 0.1
# Script interactivo para crear usuarios en un sistema Unix

#Copyright (C) 2006 Woodstock preguntamealgo@gmail.com

#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
#as published by the Free Software Foundation; either version 2
#of the License, or (at your option) any later version.

#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.


# Limpio la pantalla
clear

# Imprimo el cartel en pantalla
tput cup 1 18 ; echo -n "***************************"
tput cup 2 18 ; echo -n "SCRIPT PARA CREAR USUARIOS"
tput cup 3 18 ; echo -n "***************************"


# Me fijo si mi id es 0 (correspondiente a root) de lo contrario salgo
# ya que necesito permisos de root para crear usuarios nuevos
if [ "`id -u`" != 0 ] ; then
echo -e "\n"
echo "Necesito tener permisos de root para ejecutar mis tareas,"
exit 1
fi

echo -e "\n"
echo -e "\n"
echo "Ingrese el nombre del nuevo usuario: "
read nombre

# Si el nombre del usuario está vacío entonces salgo del script
if [ "$nombre" == "" ] ; then
clear
echo -e "\n"
echo "El nombre no puede estar vacío"
echo -e "\n"
exit 1
fi

echo -e "\n"
echo "Ingrese el home directoy (default /home/$nombre): "
read home

# Si no ingreso ningún directorio home dejo el que viene por defecto
if [ "$home" == "" ] ; then
home="/home/$nombre"
fi

# Ingreso el grupo 1000 que generalmente es el de usuarios comunes por defecto
echo "Ingrese el grupo (default 1000): "
read grupo

if [ "$grupo" == "" ] ; then
grupo=1000
fi

echo "Ingrese el shell a utilizar (default /bin/bash): "
read shell

# Si no ingreso ningún shell como por ejemplo un menu, dejo con el shell por defecto
if [ "$shell" == "" ] ; then
shell="/bin/bash"
fi

# Limpio la pantalla
clear

# Hago un resumen de los datos ingresados
echo "Los datos ingresados son los siguientes:"
echo "****************************************"
echo -e "\n"
echo "Nombre del usuario: $nombre"
echo "Shell por defecto : $shell"
echo "Directorio home: $home"
echo "Grupo del usuario: $grupo"
echo "-------------------------------------------"
echo "Si los datos son correctos pulse una tecla,"
echo "de lo contrario pulse Ctrl+C para cancelar"
read

# Creo el usuario con las variables
useradd -d /home/$nombre -g $grupo -m -s $shell $nombre

# Si hay un error salgo del script
if [ "$?" != 0 ] ; then
echo -e "\n"
echo "Ha ocurrido un error, asegurese de que los datos ingresados son correctos."
exit 1
fi

# Por último pido la contraseña
echo -e "\n"
echo "Ingrese una contraseña para $nombre"
passwd $nombre

# Si la contraseña no dio ningún error y llegamos a este paso el usuario ya esta creado :)
echo -e "\n"
echo "El usuario fue creado satisfactoriamente"

ashtophet
11/10/2006, 00:26
Lamentablemente ahora mismo no puedo leer el script (por el tema del vBulletin y el navegador que utilizo --- emacs-w3m ---)... Debo entender que has solucionado el problema, era el switch '-p' el causante?

woodstock
11/10/2006, 05:18
Efectivamente, era el -p :)

Me salvaste la vida :ok

Ahora pego el script, la razón por la que lo quite fue por un tema de avitar plagios a la hora de la entrega.

ashtophet
11/10/2006, 12:36
Ahora sí la he visto... :ok: