juliobm algunos videos algunas notas algunos scripts aprendiendo

Vsftpd con FreeBSD para clientes como usuarios virtuales

REPOSITORIO DE FACTURAS Y DOCUMENTOS PARA SOCIOS

Se trata de que el socio pueda acceder a través de la página web de la empresa a una carpeta personal donde poder descargar sus facturas electrónicas, hojas de cálculo con sus datos relevantes, etc..
El socio ya tenía hasta desde hace años la posibilidad de obtener todo ello mediante emails automáticos o consultas solicitadas en la web con respuesta de datos en tiempo real, y lo que se aporta ahora es un repositorio privado donde almacenar todos esos datos.
No se le obligará a instalar ningún software ftp cliente sino que accederá siempre mediante el navegador, desde la propia página de web.

iconolink

.

Ejemplo proceso generación .zip de todas las facturas de un año

.

resultado

Retos a solucionar

.

Cada punto tuvo su rato divertido ;-)

INSTALACION VSFTPD CON USUARIOS VIRTUALES SIN PERMISO DE ESCRITURA Y UNO CON ÉL

Instalaremos vsftpd sobre FreeBsd y utilizaremos usuarios virtuales no locales, pues no hay necesidad de crear a todos los socios como usuarios del servidor, tal solo de usuarios de ftp.

Pero daremos de alta al menos un usuario con permiso de escritura que será el que suba los ficheros.
El proceso de instalar el servidor vsftpd en freeBsd no tiene mucho misterio, si se está acostumbrado a instalar software en equipos linux o BSD, y yo seguí prácticamente esta guia:

http://www.gocit.vn/bai-viet/installing-and-configuring-vsftpd-under-freebsd

El verdadero misterio radica en qué parámetros poner en el fichero de configuración, pues hay varios posts que cuentan la creación de usuarios virtuales (aun así son los que menos circulan por internet) pero todos los usuarios con los mismos permisos (o pueden leer o pueden escribir todos).
Si se lee TODA la documentación de la página de vsftpd entendiendo TODOS los parámetros se puede llegar a deducir la solución correcta al problema de añadir un usuario virtual con permisos distintos. El resumen de mis parámetros son estos:

/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
nopriv_user=virtual
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/usr/local/etc/vsftpd.chroot_list
guest_enable=YES
guest_username=virtual
user_sub_token=$USER
local_root=/home/virtual/$USER
hide_ids=YES
user_config_dir=/usr/home/virtual/userconfs
ls_recurse_enable=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty
listen=YES
background=YES
pam_service_name=vsftpd
virtual_use_local_privs=YES

para el usuario con permiso escritura /usr/home/virtual/userconfs/usuarioescritura

local_root=/usr/home/virtual
guest_username=usuarioescritura

/usr/local/etc/vsftpd.chroot_list

usuarioescritura

Estas referencias pueden ser de utilidad para instalar vsftpd en sistemas linux: http://www.sigerr.org/linux/setup-vsftpd-custom-multiple-directories-users-accounts-ubuntu-step-by-step
https://help.ubuntu.com/community/vsftpd
https://ubuntuforums.org/showthread.php?t=518293&p=3138955

Script para dar de alta los usuarios virtuales y crear sus carpetas

creamd5.sh recibe como parámetro un código de cliente y lo da de alta como usuario virtual del ftp además de crear su carpeta personal en el servidor. Guardo todo en un fichero log.

#!/usr/bin/env sh
# hay que correr con sudo
#
# si queremos crear por primera vez la tabla
#/usr/local/bin/htpasswd.py -c -d /usr/local/etc/vsftpd_login.db virtual tupassword
# permisos si la acabamos de crear
# chmod 0600 /usr/local/etc/vsftpd_login.db
#
# damos de alta usuario para virtual users de vsftpd
echo socio=$1 >>./logcreamd5.txt
newplain=$1$(date +%-m)ponclavecomplejaquitambien
echo plain=$newplain>>./logcreamd5.txt
newpass=`md5 -q -s $newplain`
echo passw=$newpass>>./logcreamd5.txt
/usr/local/bin/htpasswd.py -b /usr/local/etc/vsftpd_login.db $1 $newpass
#
# creamos carpeta de usuario
if [ ! -d "/usr/home/virtual/$1/FACTURACION" ]; then
    echo creamos carpeta socio $1>>./logcreamd5.txt
    mkdir -p /usr/home/virtual/$1
    chown -R virtual:nogroup /usr/home/virtual/$1
    chmod -w /usr/home/virtual/$1
    # creamos carpeta FACTURACION para usuarioescritura poder subir
    mkdir -p /usr/home/virtual/$1/FACTURACION
    chown -R usuarioescritura:nogroup /usr/home/virtual/$1/FACTURACION
    chmod 755 /usr/home/virtual/$1/FACTURACION
fi

Y otro script que recorre un fichero con los códigos de socio a crear como usuarios virtuales y que ejecuta por cada uno de ellos el script anterior, pues para crear cientos de clientes es recomendable. Cuidado, con esta forma de correrlo el separador de códigos de cliente es el espacio además del \n.
loopcreamd5.sh

#!/usr/bin/env sh
echo "+++++" $(date) "*****" > ./logcreamd5.txt
while read -r socio; do
    ./creamd5.sh $socio
done < ./socioscreamd5.txt

Para la creación de la contraseña utilizamos salt y MD5. Cierto que MD5 ya no debería utilizarse pero menos seguridad tiene la página web con la que los socios entran … merde!
Este script habrá que ponerlo en tareas crontab para que se ejecute el dia 1 de cada mes.
** Hasta aquí lo que tiene que ver con el servidor ftp bajo freeBsd. **

Rutina MUMPS que realiza todo hasta el .zip

ZVZFACFTP hace

¿quieres un poco de código MUMPS? pues aquí las líneas principales

ZVZFACFTP ;  
         ; creamos facturas en xml  
         ; luego a html  
         ; comprimimos a zip  
         ; subimos a servidor ftp  
         ; borramos xmls y html  
INI      ;  
         D VARIABLES  
         D XML  
         I COMPRIME=1 D COMPRIME  
         I GENERAEXCEL=1 D EXCEL  
         I FTP=1 D FTP  
         I BORRAMOSTEMP=1 D BORRAMOS  
         Q     

del tipo ftp://usuario:ecbff5285009900b87058fa2b9dbe0f6@direccionftp.com

Y hasta aquí sería un resumen.
Demasiado código para un post por lo que no pongo ni el programa en java ni el de python ni otros shell o bash ni el resto de rutinas MUMPS.