Crea tu Servidor FTP en Minutos - Script Automático para Instalar FTP, Crear usuarios y asignar permisos en Ubuntu 20.04

Instalación_FTP.sh

 

#!/bin/bash

 

# Actualiza los repositorios e instala vsftpd

echo "Actualizando repositorios e instalando vsftpd..."

sudo apt update -y

sudo apt install -y vsftpd

 

# Configura vsftpd

echo "Configurando vsftpd..."

sudo bash -c "cat > /etc/vsftpd.conf <<EOF

# Configuración básica de vsftpd

listen=YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

chroot_local_user=YES

allow_writeable_chroot=YES

pasv_enable=YES

pasv_min_port=10000

pasv_max_port=10100

user_sub_token=\$USER

local_root=/home/\$USER/ftp

EOF"

 

# Inicia y habilita el servicio vsftpd

echo "Iniciando y habilitando el servicio vsftpd..."

sudo systemctl start vsftpd

sudo systemctl enable vsftpd

 

# Habilita el puerto FTP en el firewall

echo "Habilitando el puerto FTP en el firewall..."

sudo ufw allow 20/tcp

sudo ufw allow 21/tcp

sudo ufw allow 10000:10100/tcp

 

echo "Servidor FTP instalado y configurado correctamente."



_________________________________________________________________

Creación de usuario

usuario_FTP.sh


#!/bin/bash

 

# Solicitar el nombre del usuario para el FTP

read -p "Introduce el nombre de usuario para el FTP: " FTP_USER

 

# Verificar si el usuario ya existe en el sistema

USER_CHECK=$(getent passwd "$FTP_USER")

 

if [ -z "$USER_CHECK" ]; then

    echo "El usuario $FTP_USER no existe. Creando el usuario..."

    sudo useradd -m -s /bin/bash "$FTP_USER"  # Crear el usuario con su directorio home

    echo "Introduce la contraseña para el usuario $FTP_USER:"

    sudo passwd "$FTP_USER"  # Pedir la contraseña de manera segura

else

    echo "El usuario $FTP_USER ya existe."

fi

 

# Preguntar por el directorio FTP

read -p "Introduce la ruta para el directorio FTP de $FTP_USER (por defecto: /home/$FTP_USER/ftp): " FTP_DIR

FTP_DIR=${FTP_DIR:-"/home/$FTP_USER/ftp"}

 

# Crear el directorio FTP

echo "Creando el directorio FTP para $FTP_USER..."

sudo mkdir -p "$FTP_DIR/upload"

 

# Asignar los permisos de la carpeta

echo "¿Quieres dar permisos de escritura para el usuario en el directorio FTP? (S/N)"

read PERM_WRITABLE

 

if [ "$PERM_WRITABLE" = "S" ] || [ "$PERM_WRITABLE" = "s" ]; then

    sudo chmod -R 755 "$FTP_DIR"

else

    sudo chmod -R 755 "$FTP_DIR" && sudo chmod 700 "$FTP_DIR/upload"

fi

 

# Asignar permisos al directorio y su subcarpeta

echo "Asignando permisos al directorio FTP..."

sudo chown -R "$FTP_USER:$FTP_USER" "$FTP_DIR"

 

# Verificación de configuración del directorio

if [ -d "$FTP_DIR" ]; then

    echo "Directorio FTP configurado correctamente en: $FTP_DIR"

else

    echo "Error: El directorio FTP no se creó correctamente."

    exit 1

fi

 

# Información adicional sobre el servidor

echo "El usuario $FTP_USER ha sido configurado correctamente."

echo "Para conectarte, usa tu cliente FTP favorito apuntando a la IP del servidor."

 

# Configuración del firewall si aún no se ha hecho

echo "¿Quieres configurar el firewall para permitir FTP? (S/N)"

read FIREWALL_CONFIG

 

if [ "$FIREWALL_CONFIG" = "S" ] || [ "$FIREWALL_CONFIG" = "s" ]; then

    sudo ufw allow 20/tcp

    sudo ufw allow 21/tcp

    sudo ufw allow 10000:10100/tcp

    echo "El firewall ha sido configurado correctamente para FTP."

else

    echo "El firewall no se ha modificado."

fi


__________________________________________________________


Asignar permisos de un usuario a otra carpeta 

permisos_FTP.sh


#!/bin/bash

 

# Verificar si se ejecuta como root

if [ "$(id -u)" -ne 0 ]; then

    echo "Debes ejecutar este script como root o con sudo."

    exit 1

fi

 

# Pedir el nombre del usuario

echo -n "Introduce el nombre del usuario al que deseas asignar permisos: "

read FTP_USER

 

# Verificar si el usuario existe

if ! id "$FTP_USER" > /dev/null 2>&1; then

    echo "Error: El usuario $FTP_USER no existe en el sistema."

    exit 1

fi

 

# Listar todas las carpetas en /home

echo "Carpetas disponibles en /home:"

i=1

for dir in /home/*; do

    if [ -d "$dir" ] && [ "$(basename "$dir")" != "ftp" ]; then  # Ignorar directorios FTP predeterminados

        echo "$i) $dir"

        eval "FOLDER_$i=$dir"

        i=$((i+1))

    fi

done

 

# Pedir selección de carpeta

echo -n "Selecciona el número de la carpeta a la que deseas asignar permisos: "

read selection

 

eval "SELECTED_FOLDER=\$FOLDER_$selection"

 

if [ -z "$SELECTED_FOLDER" ]; then

    echo "Selección inválida."

    exit 1

fi

 

# Preguntar por permisos específicos

echo "Selecciona los permisos que deseas asignar:"

echo "1. Solo lectura"

echo "2. Lectura y escritura"

echo "3. Propietario total"

echo -n "Introduce el número de la opción deseada: "

read perm_selection

 

# Asignar los permisos según la selección

case "$perm_selection" in

    1) chmod 755 "$SELECTED_FOLDER"; chown root:"$FTP_USER" "$SELECTED_FOLDER" ;;

    2) chmod 775 "$SELECTED_FOLDER"; chown "$FTP_USER":"$FTP_USER" "$SELECTED_FOLDER" ;;

    3) chmod 700 "$SELECTED_FOLDER"; chown "$FTP_USER":"$FTP_USER" "$SELECTED_FOLDER" ;;

    *) echo "Selección inválida, no se han cambiado permisos." && exit 1 ;;

esac

 

# Aplicar restricción de acceso al usuario (cambio de directorio home)

usermod -d "$SELECTED_FOLDER" "$FTP_USER"

 

# Cambiar permisos de las carpetas para restringir el acceso a otros usuarios

echo "Restringiendo la visibilidad de otras carpetas para el usuario $FTP_USER..."

 

for dir in /home/*; do

    if [ -d "$dir" ] && [ "$(basename "$dir")" != "$(basename "$SELECTED_FOLDER")" ]; then

        chmod 700 "$dir"  # Evita que otros usuarios puedan ver estas carpetas

    fi

done

 

# Configurar el chroot para que el usuario solo vea su carpeta

echo "Configurando el acceso FTP restringido..."

 

# Configuración de chroot en vsftpd

# Asegurarse de que el archivo de configuración de vsftpd tenga el chroot activado

echo "chroot_local_user=YES" >> /etc/vsftpd.conf

echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf

 

# Reiniciar el servicio de vsftpd

systemctl restart vsftpd

 

echo "Permisos asignados correctamente a $FTP_USER en $SELECTED_FOLDER."

echo "El usuario $FTP_USER ahora está restringido a la carpeta asignada."

 

# Preguntar si quiere configurar el firewall para permitir FTP

echo -n "¿Quieres configurar el firewall para permitir FTP? (S/N): "

read firewall_answer

 

if [ "$firewall_answer" = "S" ] || [ "$firewall_answer" = "s" ]; then

    ufw allow ftp

    ufw allow 20/tcp

    ufw allow 21/tcp

    ufw reload

    echo "El firewall ha sido configurado para permitir FTP."

fi

 

echo "Proceso completado. El usuario ahora solo puede acceder a la carpeta asignada."



Comentarios

Entradas populares de este blog

Recupera archivos borrados de tu Pendrive con este script para Windows

"¡Crea tu Servidor Web en Minutos! Script Automático para Instalar LAMP en Ubuntu 20.04"