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
Publicar un comentario