Introducción
Conforme estaba escribiendo esta entrada me estaba dando cuenta de que para muchos casos esto puede ser matar moscas a cañonazos, por eso he creído conveniente poner esta introducción inicial.
Si en algún momento del espacio-tiempo alguien, aparte de mí mismo, lee estas entradas y decide poner en marcha un sistema como este, es muy posible que lo que a continuación se detalla no le sea necesario. Si alguien pretende ponerse una tele en el escaparate de su tienda y manejarla él mismo, puede tranquilamente saltarse este apartado, pues podrá poner los ficheros a reproducir subiéndolos por ftp como se ha estado haciendo hasta ahora para las pruebas.
En nuestro caso concreto, y hablo del montaje que se está realizando, esto no va a ser así. Al cargo de la actualización de los archivos podrá haber personas con unos conocimientos de informática a nivel ofimático y de usuario, que a lo mejor lo de combinar correspondencia en Word lo manejan con la habilidad de un prestidigitador, pero que lo del manejo del FTP y demás les sobrepasa un poco, por tanto hay que diseñar un sistema fácil y seguro.
Desarrollo
Al usuario hay que ponérselo fácil, lo más fácil posible, como un juego de niños. Siempre he dicho que hay que considerar al usuario como un completo ignorante en temas informáticos, pero no en modo despectivo en absoluto, sino porque tiene, tenemos, todo el derecho del mundo a serlo, y porque cuando yo mismo uso alguna nueva aplicación agradezco si su creador ha seguido esta misma filosofía y no me obliga a invocar a los arcanos mayores para hacer cosas de lo más simples.
Así pues, para copiar un archivo ¿Qué hay más simple para un usuario que arrastrar un icono de una carpeta a otra? Eso lo haremos con Samba.
Pero también habrá que configurar esos otros archivos del calendario, una tarea que haremos de ciento a viento. Eso lo haremos por FTP «enjaulando» a los usuarios. Se podría hacer tranquilamente por Samba, con otro usuario y otra configuración, de forma muy fácil, pero para qué engañarnos, también me apetecía probar esta configuración a ver qué pasaba, así hay donde elegir.
Y a la vez, todo esto lo haremos evitando conectarnos al servidor como «pi», eso lo dejaremos para el maestro de ceremonias, es decir, nosotros mismos, preservando todos los ficheros de configuración de cualquier mal uso.
Comenzamos.
Samba
Con Samba vamos a crear un usuario en el servidor que tenga acceso «sólo» a la carpeta de los archivos que han de reproducir la pantallas, luego conectaremos esa carpeta en un ordenador con Windows para tenerla siempre disponible y después sólo será necesario tratarla como una carpeta más de nuestro ordenador: abrimos con doble clic, arrastramos un fichero, borramos el que ya no necesitemos, etc. Más fácil imposible.
Bien, en el servidor tenemos al usuario pi y en su home tenemos el directorio datos y sus subdirectorios dias y pantallas. Va a ser el subdirectorio pantallas el que compartamos con Samba.
Como root, vamos a crear en primer lugar un usuario con home pero sin acceso a la shell, le asignaremos una contraseña y lo meteremos en el grupo de pi, lo vamos a llamar «userpantallas«:
useradd -g pi -m -s /usr/sbin/nologin userpantallas
Le configuramos un pass
passwd userpantallas
Y aquí le colocamos el que queramos, pero lo apuntamos para que no se nos olvide porque lo usaremos más adelante con FTP, ahora confirmamos y seguimos.
Nos metemos en el home de userpantallas y vamos a crear aquí un enlace simbólico a la carpeta datos de pi, así:
ln -s /home/pi/datos ftp
Como estamos como root, vamos a asignarle a ese enlace el propietario userpantallas y el grupo pi. Ojo, que la instrucción chown con los enlaces no se puede usar tal cual, o cambiará el propietario de las carpetas de destino, y eso no es lo que nos interesa, hay que poner la opción -h
chown -h userpantallas:pi ftp
Bien, si ahora entramos en ftp veremos que dentro encontramos los subdirectorios dias y pantallas ¡¡¡Magia!!! No, no es magia, es… un enlace simbólico.
Comprobamos que Samba está instalado en el ordenador con Ubuntu, nuestro servidor, y si no procedemos a ello como con cualquier aplicación, no tiene misterio.
Ahora tenemos que seguir con el usuario userpantallas y crearlo en Samba, para ello:
smbpasswd -a userpantallas
Nos pedirá un pass, así que le asignamos uno que no tiene que ser el mismo que hemos puesto en Ubuntu, y seguimos.
Ahora toca configurar Samba, para ello editamos el fichero smb.conf que se encuentra en la ruta /etc/samba
El fichero es bastante extenso porque vienen comentadas las opciones de configuración. Sobre esto, como soy bastante profano en la materia, se recomienda tirar de manual para hacer una configuración correcta y segura. No obstante, la que he llevado a cabo y funciona es la siguiente, que pego sin comentarios:
[global] workgroup = NUESTRO_GRUPO_DE_TRABAJO server string = %h server (Samba, Ubuntu) dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d server role = standalone server passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user # Desactivamos impresion en samba load printers = no printing = bsd printcap name = /dev/null disable spoolss = yes [printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes guest ok = no read only = yes create mask = 0700 [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no [pantallas] path = /home/userpantallas/ftp/pantallas browseable = no writeable = yes valid users = userpantallas directory mask = 0775 guest ok = no
Al principio del fichero de configuración hay que poner el grupo de trabajo que tengamos configurado en nuestra red, y al final, como valid users, está el usuario que hemos creado para este fin y el path un tanto extraño que nos enlaza con la carpeta que contiene los ficheros a reproducir, ya que recordamos que la carpeta ftp de userpantallas es un enlace simbólico a la carpeta datos de pi, con todo su contenido.
El resto de opciones de global son las que vienen por defecto, aunque se han borrado algunas que contenía el fichero original. Las opciones de impresión no las vamos a usar, así que no sé si están correctamente configuradas ni para usarlas ni para dejar de hacerlo.
Y llegados a este punto guardamos el fichero con esta configuración y reiniciamos Samba.
samba restart
Vale, pues vamos a probar la conexión desde un equipo con Windows. En este caso va a ser un equipo con Windows 10 pero el proceso es similar en otras versiones de Windows.
Pinchamos con el botón derecho del ratón sobre el icono de Red y seleccionamos «conectar a unidad de red».
Nos saldrá una ventana como esta:
Ponemos la IP del equipo y el nombre de la carpeta que hemos compartido en Samba. Ojo que ya se puede ver que no es la trayectoria completa, sólo \\IP\nombre_carpeta_samba. Marcamos también la casilla «Conectar con otras credenciales» y si quisiéramos tenerla siempre disponible marcaríamos también «Conectar de nuevo al iniciar sesión», como es una prueba, de momento esa la dejamos en blanco. Pinchamos en «Finalizar» y pasamos a la siguiente ventana:
Aquí ponemos el nombre de usuario de Samba, según el ejemplo que estamos siguiendo en esta entrada será userpantallas y el pass que le hemos puesto en Samba. Y lo mismo, si quisiéramos tener siempre accesible esta carpeta marcaríamos «Recordar mis credenciales«, en este caso lo dejamos en blanco y pulsamos «Aceptar«.
Y listo. Si todo ha ido bien y no hemos metido la pata en la configuración deberíamos estar viendo el contenido de la carpeta pantallas y podríamos trabajar con ella como si fuera una carpeta más de nuestro propio equipo.
Ahora, viendo que todo funciona, sería cuestión de realizar esta conexión en el equipo, o equipos, que se encarguen de actualizar la información que muestren las pantallas, y en estos casos sí que marcaríamos las casillas que antes hemos dejado en blanco, tanto la de «conectar de nuevo al iniciar sesión» como la de «recordar mis credenciales«, con ello esta carpeta aparecería siempre como si fuera una unidad más de disco.
Llegados a este punto sería muy fácil crear otro usuario en Samba y que se conectara a la carpeta /datos/dias para actualizarla cuando fuera preciso, pero la ventaja que tiene Samba es que permite tener la carpeta siempre accesible y eso es precisamente lo que no queremos para la carpeta dias, y como además nos gusta probar cosas, pues vamos a hacer que esa actualización sea por FTP.
VSFTPD
Como ya hemos dicho, queda una parte que también ha de actualizar de vez en cuando el usuario y que no nos interesa que sea «tan» fácil, y es la actualización de los archivos con los listados de fechas. Estas actualizaciones se harán una vez al año o poco más si sale alguna incidencia, y es por ello que no interesa que esa carpeta esté ahí todo el tiempo siendo candidata a un «¡Ay! Es que la he borrado sin darme cuenta». Subimos un poco el nivel y para actualizar ese directorio habrá que usar el FTP. ¡Un drama!
Pues no, nada de drama. Vamos a instalar VSFTPD en nuestro particular servidor y vamos a «enjaular» a los usuarios, de tal modo que cuando el usuario se conecte por FTP sólo tenga acceso a la carpeta que nos interese pero sin que pueda navegar por otros directorios del sistema o de otros usuarios, ni siquiera por el resto de subdirectorios de su home, preservando así, por ejemplo, la clave pública para la conexión de la Raspberry y otros archivos de configuración.
Como puede verse, dificultad mínima, tan sólo se trata de instalar un programa de FTP y conectarse a una IP con un pass. Punto pelota.

Vamos al tajo. Comenzamos instalando vsftpd en el servidor con Ubuntu:
sudo apt-get install vsftpd
Y lo activamos
sudo systemctl start vsftpd sudo systemctl enable vsftpd
Hacemos una copia del fichero de configuración
sudo cp /etc/vsftpd.conf /etc/vsftpd_conf.bak
Y ahora editamos el fichero de configuración vsftpd.conf para adaptarlo a nuestros propósitos. El fichero viene bastante comentado y hay páginas por Internet que nos pueden ayudar a su comprensión.
La instrucción clave es allow_writeable_chroot=YES esto es lo que permite enjaular a los usuarios en el local root que les definamos, que será ftp con esta instrucción: local_root=/home/$USER/ftp
Además crearemos una lista de usuarios capaces de usar este servicio, no valdrá sólo con crear un usuario y agregarle un directorio ftp, deberá estar también en la lista: vsftpd.userlist
Pero pese a todo he de reconocer que un par de veces que lo he configurado en distintos equipos, un par de veces que he tenido que pelear con él. Así pues, a continuación pongo el fichero de configuración que está probado y funcionando, aunque posiblemente se pueda afinar algo más.
En la línea 10 tenemos el «enjaulamiento», en la 20 el directorio, que en este caso es un enlace simbólico pero funciona exactamente igual que si fuera un directorio y en la 22 la ubicación y nombre del archivo de los usuarios autorizados. Deberemos pues crear este fichero y colocar allí a userpantallas
sudo nano /etc/vsftpd.userlist
Guardamos, salimos y reiniciamos el servicio
systemctl restart vsftpd
Y para saber si todo está funcionando bien podemos probar:
service vsftpd status
Deberíamos ver «algo verde», si vemos «algo rojo» es que «algo» no va bien. Muy posiblemente un triste error sintáctico en el fichero de configuración, cuestión de repasarlo (nada que no consigamos tras toda una tarde tirándonos de los pelos, lo normal…)
Por último, si recordamos, hemos creado al usuario userpantallas sin shell, indicando que usara /usr/sbin/nologin Bien, pues ahora toca añadir esto en el archivo /etc/shells porque si no no podremos conectarnos por ftp, así que nos situamos en etc y:
sudo nano shells
Y añadimos al final la línea indicada. El fichero quedará más o menos así:
Y llegados a este punto toca probar. Vamos a probar con WinSCP:
En protocolo seleccionamos FTP sin cifrado, colocamos la IP del ordenador al que queremos conectarnos, el que hace de nuestro servidor y colocamos el nombre de usuario del usuario que tenemos creado userpantallas y el pass que le hemos dado a la hora de crearlo en Ubuntu, no el de Samba, VSFTPD funcionará con el pass que tenga el usuario en el sistema.
Y ahí están las carpetas dias y pantallas accesibles.
Ha sido un trabajo un poquito laborioso, pero hemos conseguido dejarlo fácil para el usuario, que es de lo que se trataba.
El código de fsftpd.conf para copy&paste, aquí:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO pasv_enable=YES pasv_min_port=10000 pasv_max_port=11000 user_sub_token=$USER local_root=/home/$USER/ftp userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO allow_writeable_chroot=YES check_shell=NO