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
.
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.pemModo de ejecución
root:~# chmod +x nombre_del_script.sh
root:~# ./nombre_del_script.sh
Una idea que se me ocurre es preguntar la ruta donde esta guardado el vsftpd.conf para hace el script mas dinamico
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 :(
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
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.confhasta donde dice
echoes eso??
Saludos
Esa es la idea, asi no se obliga a tener una ruta fija
