Necesito ayuda con un script.

Iniciado por Iesedobleac, 21 Noviembre 2012, 15:57 PM

0 Miembros y 1 Visitante están viendo este tema.

Iesedobleac

Buenas, vereis, encontré por la web un script para VSFTPD que me creaba usuarios virtuales, el script es este:

#!/bin/bash
VERIFY=`id -u`;
if [ $VERIFY != 0 ]; then
echo "Usted debe ser root para ejecutar este script.";
exit 1;
fi

echo
echo "========================================================";
echo "           Servidor FTP con usuarios virtuales          ";
echo "========================================================";
echo

echo "1. Instalar servidor FTP - vsftpd - <i>"
read -p "2. Ya tengo instalado el servidor, sólo configurar usuario virtual <s>: " IC;

MAIN(){
echo
echo "Para la configuración de su usuario es necesario"
echo "tener instalado Berkeley Database. Si dispone de"
echo "una version ya instalada pulse <ENTER> para continuar"
read -p "de lo contrario pulse <i> para instalar: " BD
if [ "$BD" == "i" ]; then
apt-get install libdb4.7 libdb4.7-dev db4.7-util;
fi
echo
echo "-----------------------------------";
echo "|     Configuración de usuario    |";
echo "-----------------------------------";
echo
read -p "Nombre del usuario virtual: " USER;
stty -echo;
read -p "Contraseña: " PASS; echo
read -p "Confirme su contraseña: " PCONF; echo
stty echo;
while [ "$PASS" != "$PCONF" ]
do
echo "Las contraseñas no coinciden.";
stty -echo;
read -p "Contraseña: " PASS; echo
read -p "Confime su contraseña: " PCONF; echo
stty echo;
done;
echo "Las contraseñas coniciden.";
echo "Actualizando base de datos...";
echo $USER >> vsftpd_login;
echo $PASS >> vsftpd_login;
db4.7_load -T -t hash -f vsftpd_login /etc/vsftpd_login.db;
chmod 600 /etc/vsftpd_login.db;
rm vsftpd_login;
echo "Haciendo backup de /etc/pam.d/vsftpd en /etc/pam.d/vsftpd.bak ...";
mv /etc/pam.d/vsftpd vsftpd.bak;
echo "auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash" > /etc/pam.d/vsftpd;
echo "account required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash" >> /etc/pam.d/vsftpd;

# Configuración del archivo vsftpd.conf
echo "Introduzca la ruta del archivo vsftpd.conf a utilizar, ";
read -p "este reemplazará al original luego de hacer una copia: " FILE
echo "Haciendo backup de /etc/vsftpd.conf en /etc/vsftpd.conf.bak ..."
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
cp $FILE /etc
echo

mkdir /etc/vsftpd; mkdir /etc/vsftpd/users;
echo "dirlist_enable=YES" >> /etc/vsftpd/users/$USER;
echo "download_enable=YES" >> /etc/vsftpd/users/$USER;
read -p "Carpeta raíz para el usuario virtual (p.ej. /srv/ftp): " FOLDER;
useradd -d $FOLDER fantasma;
echo "Se ha añadido un usuario con el nombre 'fantasma' al dirctorio FTP."
echo "Si no está de acuerdo con este usuario puede modificarlo manualmente."
echo "local_root=$FOLDER" >> /etc/vsftpd/users/$USER;

# Denied users
cat /etc/passwd | cut -d ":" -f 1 | sort > /etc/vsftpd/denied_users
}

echo Inicializando el servidor FTP ...
invoke-rc.d vsftpd start;
echo "Servidor listo!"
echo "Para una configuración más personalizada edite"
echo "manualmente sus ficheros de configuración:"
echo "/etc/vsftpd.conf; /etc/vsftpd/users;";
echo "/etc/vsftpd/denied_users; /etc/pam.d/vsftpd"

if [ "$IC" == "i" ]; then
apt-get install vsftpd;
echo "Deteniendo servicio vsftpd..."
invoke-rc.d vsftpd stop 2&>/dev/null;
MAIN
elif [ "$IC" == "s" ]; then
MAIN
else
echo
echo "Usted debió haber tomado una decisión correcta."
echo "Finalizando programa..."
echo
exit 1;
fi


Bien, pues lo que me gustaría es introducir un bucle, para que me cree mas usuarios de una sola vez, no se si me entendéis...

Un saludo y gracias.

PD: No se si este tema va aquí, si no es así perdón.

adgellida

#1
Arriba del todo creas la variable para checar si quieres otro usuario o no:

OTROUSER=0;

Luego creas una función nuevouser donde debes meter TODO lo que requiera la creación del usuario.

Luego antes de salir de esa función debes poner esto:

read -p "Deseas agregar otro user? 0-no 1-si " OTROUSER;

Por último, debes realizar este bucle con llamada y sustituirlo donde antes se creaba el usuario y todo lo relacionado con él:

nuevouser

while [ "$OTROUSER" == 1 ] nuevouser


Es posible que no esté bien, todavía no domino al 100%. El concepto creo que es correcto, falta que compruebes en tu código si hay fallos y los depures, así aprenderás. Saludos

Iesedobleac

Pero no entiendo muy bien el funcionamiento, podrías explicármelo con algún ejemplo? Muchas gracias por responder :)

adgellida

#3
Crea un usuario nuevo si le has metido un 1 o finaliza el programa si le metes un 0. No es eso lo que querías? Alguna duda más? Lo único que se me ocurre es que no sepas que es una función, si lo sabes no debes tener ningún problema para procesar mi explicación. Expón tus dudas de la manera más exacta posible.

Otra opción que se me ocurre es que hagas un script con un bucle y ahi hagas x llamadas dependiendo de los usuarios que quieras.

Estilo así:

Cuantos usuarios quieres? 5
Creas un while con una variable contador que vaya creciendo o decreciendo
y en cada while se llame a tu script.

Puede que de esta forma lo entiendas mejor. Ahi tu script formaría el papel de "función".

La única dificultad que tiene este problema tuyo es crear una simple sentencia de bucle .

Te recomiendo que lo hagas de esta segunda forma y si lo entiendes pues te pones con la primera.

Si el código que nos has pasado lo entiendes en un 90% debes saber hacer lo que te digo sin pestañear.

Iesedobleac

Claro, la idea era que yo metiera un numero de usuarios a crear y que con el bucle, creara ese numero de usuarios las veces que yo especifique, por ejemplo si quiero que me cree 5 usuarios, especifico ese numero y me crearia usuarios por ejemplo de una vez:

Usuario1
Usuario2
Usuario3
Usuario4
Usuario5

Pero de una vez.

adgellida

#5
Vale, pues a parte de lo que te he dicho, debes de realizar otra modificación:

Debes poner en el nombre de usuario:

"Usuario" + i

Donde i sea la variable que crece, así se agregaría el número al nombre de usuario

i=1

Usuario1

i++

Usuario2

Todo esto debes de hacerlo con otro bucle dentro del bucle. Una vez que te funcione la segunda forma que te dije haz esto.

Hay varias formas de hacerlo.

-Otra forma es realizando el bucle 2 cada vez que te metas en el bucle asignar el nombre de Usuario+i


En resumen llama las veces que tú le digas a crear user, osea a tu script. mete a ese script en una función y pásale el argumento "i" de ese mismo instante y haces lo de "Usuario" + i. Sí asi estaría bien...ahora te lo escribo.


Crea una asignación a la variable "n" y un while que repita "i"
hasta que llegue a "n"
Cuantos users quieres? Lo guardas en "n"

i=1;

while (n<=i) nuevouser;

nuevouser (int i){
código
USER = "Usuario" + i
contraseña como tú quieras
i++
}


nuevouser es todo tu script

Ese es el concepto. Ahora te toca depurar y traducirlo a bash script. Puedes fijarte en tu script, ahi está todo lo que necesitas.

Eso te crea recursivamente usuarios hasta que llegue a n. Debes cuidar otros aspectos como la contraseña, la cual si la quieres en modo automático, ponérsela en el mismo script y no por entrada de teclado.

Ojo, lo que te paso es una idea mía y se puede realizar de otras formas.