Script de bash para automatizar creación de usuarios virtuales en servidor FTP con vsftpd

Enviado por Neo el 1 Febrero, 2010 - 06:22.

Este script lo hice inspirado por éste artículo. Dado la longitud de ciertos comandos por ejemplo: db4.7_load -T -t hash -f vsftpd_users /etc/vsftpd_users.db pensé que para los usuarios novatos algún script que le automatizara estos pasos sería útil, entonces pues sin más les dejo el código. Se que no es perfecto y que puede ser mejor o incluso tener errores y ese es otro motivo por el cual lo publico a fin de que lo analicen, lo utilicen aquellos que son nuevos en linux, y que lo critiquen aquellos que saben de bash más que yo smile .

Código

#!/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 decición correcta."
echo "Finalizando programa..."
echo
exit 1;
fi

Archivo de configuración (vsftpd.conf) básico
NOTA: este archivo debe guardarse en el mismo path que el script

listen=YES
anonymous_enable=NO
guest_enable=YES
guest_username=fantasma
local_enable=YES
user_config_dir=/etc/vsftpd/users
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to FTP service.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

Modo de ejecución

root:~# chmod +x nombre_del_script.sh
root:~# ./nombre_del_script.sh

Imagen de cnicolas
Enviado por cnicolas el 2 Febrero, 2010 - 14:18.

Una idea que se me ocurre es preguntar la ruta donde esta guardado el vsftpd.conf para hace el script mas dinamico

Imagen de Neo
Enviado por Neo el 3 Febrero, 2010 - 06:45.
cnicolas escribió:

Una idea que se me ocurre es preguntar la ruta donde esta guardado el vsftpd.conf para hace el script mas dinamico

No capto la idea, o sea a qué archivo vsftpd.conf te refieres, al que pongo como ejemplo o a alguno personalizado por el usuario, etc, no comprendí bien :(

Imagen de cnicolas
Enviado por cnicolas el 3 Febrero, 2010 - 09:40.
Neo escribió:
cnicolas escribió:

Una idea que se me ocurre es preguntar la ruta donde esta guardado el vsftpd.conf para hace el script mas dinamico

No capto la idea, o sea a qué archivo vsftpd.conf te refieres, al que pongo como ejemplo o a alguno personalizado por el usuario, etc, no comprendí bien :(

La idea es preguntar donde se encuentra el fichero vsftpd.conf en vez de 'obligar' a tenerlo en la misma ruta

Imagen de Neo
Enviado por Neo el 3 Febrero, 2010 - 23:24.
cnicolas escribió:
Neo escribió:
cnicolas escribió:

Una idea que se me ocurre es preguntar la ruta donde esta guardado el vsftpd.conf para hace el script mas dinamico

No capto la idea, o sea a qué archivo vsftpd.conf te refieres, al que pongo como ejemplo o a alguno personalizado por el usuario, etc, no comprendí bien :(

La idea es preguntar donde se encuentra el fichero vsftpd.conf en vez de 'obligar' a tenerlo en la misma ruta

Ya, echa un vistazo desde la linea que dice:

#configuracion del archivo vsftpd.conf

hasta donde dice

echo

es eso??
Saludos

Imagen de cnicolas
Enviado por cnicolas el 3 Febrero, 2010 - 23:29.

Esa es la idea, asi no se obliga a tener una ruta fija clap clap