Introducion:
Instalar VSFTPD en FreeBSD
En nuestro caso el servicio permitira subir archivos mediante un usuario y clave, pero no permitira conexiones anonimas.
Requerimientos:
* Conexion a Internet
* FreeBSD instalado
* Leer este manual
El proceso:
Actualizar el arbol de ports
(ya se debe hacer mediante portsnap)
Instalar el port de VSFTPD
# whereis vsftpd
vsftpd: /usr/ports/ftp/vsftpd
# cd /usr/ports/ftp/vsftpd
# make install clean
...
===> Registering installation for vsftpd-3.0.2
El contenidos de los archivos es:
# egrep -v '#|^ *$' /usr/local/etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to Alpha FTP service.
chroot_local_user=YES
listen=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty
background=YES
pasv_min_port=49152
pasv_max_port=65535
Para que el servicio inicie con el servidor
# edit /etc/rc.conf
Agregar
vsftpd_enable="YES"
Iniciar el servicio
# /usr/local/etc/rc.d/vsftpd start
Crear el usuario para las transferencias
# adduser
Username: invitadoftp
Full name: invitadoftp
Uid (Leave empty for default):
Login group [invitadoftp]:
Login group is invitadoftp. Invite invitadoftp into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: nologin
Home directory [/home/invitadoftp]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : invitadoftp
Password : laclavesecreta
Full Name : invitadoftp
Uid : 1120
Class :
Groups : invitadoftp
Home : /home/invitadoftp
Home Mode :
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (invitadoftp) to the user database.
Add another user? (yes/no): no
Goodbye!
Asignar el directorio creado al usuario root
# chown root /home/invitadoftp
Quitarle el permiso de escribir al usuario
# chmod -w /home/invitadoftp
Crear un directorio llamado pub dentro
# mkdir /home/invitadoftp/pub
Darle permisos de escritura en el directorio pub
# chmod -R 777 /home/invitadoftp/pub
En el firewall hay que abrir los puertos necesarios, un ejemplo para PF (en nuestro caso estamos abriendo el puerto 21 y un rango desde 49152 hasta 65535)
# PF "Self-Protecting" an FTP Server (passive)
pass in on $ext_if proto tcp from any to any port { ftp, > 49151 } \
keep state
Para verificar que nuestro servidor ftp funciona, lo podemos hacer de dos formas:
Ejemplo 1
En el mismo servidor usando el Shell Unix
$ ftp invitadoftp@localhost
...
Ejemplo 2
Desde otro equipo hacia el servidor por Internet, ejemplo desde un Shell Unix (en el caso de que tenga algun *unix)
$ ftp invitadoftp@IPDELSERVIDOR
Connected to IPDELSERVIDOR.
220 Welcome to Alpha FTP service.
331 Please specify the password.
Password: laclavesecreta
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||54611|).
150 Here comes the directory listing.
drwxrwxrwx 2 1010 1010 97 Oct 21 15:50 pub
226 Directory send OK.
ftp> quit
221 Goodbye.
$
Continuando con el ejemplo 2, si este equipo tiene un Windows, desde el DOS
C:\>ftp IPDELSERVIDOR
Si queremos que el directorio no tenga archivos o carpetas con mas de 7 dias
Creamos un script
# edit /usr/home/backups/scripts/script-del-old.sh
que se veria asi, use este comando para verlo # cat /usr/home/backups/scripts/script-del-old.sh
#! /bin/sh
# Archivos
find /usr/home/invitadoftp/pub -type f -mtime +1w -exec rm {} \;
# Carpetas (indispensable la opcion "-depth 1" o borrara pub si esta vacia)
find /usr/home/invitadoftp/pub -depth 1 -type d -empty -mtime +1w -exec rmdir {} \;
Le damos permisos de ejecucion
# chmod +x /usr/home/backups/scripts/script-del-old.sh
Y en cron ponemos la linea
00 01 * * * root /usr/home/backups/scripts/script-del-old.sh
Con esto ejecutamos diariamente una busqueda todos los dias a las 01 de la manana de los
archivos y carpetas vacias de mas de una semana o 7 dias y los borramos.
Otro ejemplo aun mas elaborado del script seria asi, use este comando para verlo # cat /usr/home/backups/scripts/script-del-old.sh
#! /bin/sh
# Archivos
find /usr/home/invitadoftp/pub -type f -mtime +1w > /tmp/listfiles.txt
rm `cat /tmp/listfiles.txt`
mail -s "Archivos borrados del FTP" login@gmail.com < /tmp/listfiles.txt
rm /tmp/listfiles.txt
# Carpetas
find /usr/home/invitadoftp/pub -depth 1 -type d -empty -mtime +1w > /tmp/listdirectories.txt
rmdir `cat /tmp/listdiries.txt`
mail -s "Carpetas borradas del FTP" login@gmail.com < /tmp/listdiries.txt
rm /tmp/listdiries.txt