\chapter{Action~: borne d'accès au numérique}
\label{chap:wifi_centres}

\large
\paragraph{} De plus en plus de démarches administratives se font en
ligne. Y avoir accès suppose non seulement d'avoir le materiel adapté, mais
surtout avoir un minimum de connaissance informatique. C'est parti de ce 
constat que la Caisse d'Allocations Familliales de la Gironde a lancé le projet
\textit{Point Numérique C@F}.

\normalsize \paragraph{} Il est question d'installer dans les structures
sociales des équipements informatiques afin de permettre aux usagers de se
connecter à leurs espaces en ligne. Pour accompagner les populations les plus en
difficulté, un \textit{facilitateur numérique} assure une permanence.

\section{La réponse de l'association}

\paragraph{} L'association s'est positionnée sur le projet fin 2019 et a choisi
8 structures pour accueillir le dispositif\footnote{Argonne, Benauge, Bordeaux
Sud, Monséjour, Saint-Michel, Saint-Pierre, Bordeaux-Sud et Bordeaux-Lac}. Un
facilitateur numérique a été recruté début 2020 afin d'assurer une demi-journée
de permanence dans chacune d'elles.  

\paragraph{} Nous sommes partis sur une idée de borne numérique intégrée en
métal contenant les éléments nécessaires (unité centrale, écran tactile,
clavier, touchpad, imprimante et scanner); le tout sécurisé et durci.

\paragraph{} Le service communication a eu en charge l'habillage graphique de la
borne et le service informatique la mise en place de l'ensemble logiciel.

\section{Concevoir un système sécurisé et simple}

\paragraph{} D'après les objectifs et le public cible, j'ai défini trois points
importants~:

\begin{itemize}

    \item \ul{garantir la confidentialité des données}~: cette borne va être
        utilisée pour accéder à des données sensibles. De plus le public cible
        n'est potentiellement pas à l'aise avec la manipulation d'un ordinateur
        et les enjeux de la vie privée sur Internet.
    
    \item \ul{être le plus simple possible}~: la borne doit pouvoir être
        utilisée par des personnes néophytes.
    
    \item \ul{empêcher d'en détourner l'usage}~: elle ne doit pas être utilisée
        pour aller sur Facebook, Youtube, \textellipsis

\end{itemize}

\paragraph{} Je suis donc parti sur l'installation d'un système basé sur
GNU/Linux. L'idée de base est de le rendre le plus minimal possible, de filtrer
l'accès à Internet via le DNS et de rendre le profil utilisateur temporaire.

\section{La conception du système}

\subsection{Les premiers essais}

\paragraph{} J'ai d'abord essayé d'utiliser \textit{Ubuntu}, cette distribution
offre de base un \textbf{compte invité}, très pratique pour assurer la non
persitance des données d'un utilisateur à l'autre. Mais deux problèmes sont
apparus, mettant sur la touche cette solution~:

\begin{itemize}

    \item il y a \textbf{beaucoup de travail pour personnaliser la distibution}
        et l'adapter à nos besoins. Et celle-ci entrainera beaucoup de tests, il
        est aisé de \textit{casser} le système en essayant d'enlever des
        paquets.

    \item La mise en place d'une connexion et déconnexion automatique pour le
        compte invité s'est révélée difficile, et n'a jamais  fonctionné 
        correctement.

\end{itemize}

\subsection{La mise en place du système de base}

\paragraph{} J'ai choisi de partir sur une base \textit{Debian} largement
personnalisée. L'idée retenue est donc un système contenant un bureau minimal
basé sur des éléments de \link{https://xfce.org}{XFCE}, un navigateur Internet
(\link{https://www.mozilla.org/fr/firefox/new/}{Mozilla Firefox}), un logiciel
de numérisation (\link{https://gitlab.gnome.org/GNOME/simple-scan}{Simple Scan})
et d'une suite bureautique (\link{https://libreoffice.org}{LibreOffice}).

\subsection{Assurer la volatilité des données}

\paragraph{} Le second objectif est d'assurer la confidentialité des données des
personnes utilisant la borne. J'ai utilisé les fonctionnalités offertes par
\link{https://github.com/canonical/lightdm}{Lightdm} d'exécuter de scripts
personnalisés à l'ouverture et fermeture d'une session utilisateur. Ces scripts
me permettent de mettre en place la volatilité des données.

\subsubsection{Le gestionnaire de session}
 
\paragraph{} Ainsi un utilisateur \textit{pointcaf} dispose d'une session
automatiquement connectée. Un script se lance au démarrage de la session et 
crée son répertoire personnel en RAM, utilisant un système de fichier de type
\textit{overlay}.

\paragraph{} Lorsque l'utilisateur a fini d'utiliser la borne, il dispose d'une
icône pour se déconnecter. Le gestionnaire de session lance alors un script qui
va se charger de détruire son dossier\footnote{Il se charge aussi de démonter
proprement les périphériques de stockages montés le cas échéant}.

\subsubsection{La mise en veille}

\paragraph{} Au bout de 10 minutes d'inactivité, un économieur d'écran est
lancé. Une simple image s'affiche avec un message demandant d'appuyer sur la
touche \textit{Entrée}. Lorsque l'usager le fait, un script se lance afin de
détruire la session en cours et d'en lancer une nouvelle.

\subsection{Empêcher d'en détourner l'usage}

\paragraph{} Ces bornes doivent être accessibles en libre service, il est donc
nécessaire de s'assurer qu'elles ne puissent pas servir à autre chose.

\subsubsection{Le choix déterminant d'un système GNU/Linux}

\paragraph{} Installer Debian a d'abord permis d'adapter la partie logicielle
au plus près des besoins. Mais ce système permet aussi de limiter l'installation
de logiciels par les tiers.

\subsubsection{Limiter les sites accessibles}

\paragraph{} Le risque est aussi de voir une borne utilisée pour naviguer sur
d'autres sites que ceux servant son objectif. Il ne serait pas surprenant par
exemple de voir un groupe d'adolescents "squatter" la bornes pour y visionner
des vidéos Youtube.

\paragraph{} Trois éléments ont été mis en place afin de limiter la
navigation sur le Web :

\begin{enumerate}

    \item \textbf{Limiter les domaines disponibles} par la mise en place d'un
        résolveur DNS\footnote{Domain Name System} local avec une liste
        explicite de domaines autorisés. Cette liste  est mise à jour 
        quotidiennement par un script. Le logiciel retenu est
        \link{https://nlnetlabs.nl/projects/unbound/about/}{Unbound}. La 
        configuration des serveurs DNS à uttiliser s'est faite au niveau du 
        service réseau et rendue inaccessible par les utilisateurs.

    \item \textbf{La mise en place d'un pare-feu local} permettant de limiter
        les flux réseaux au strict nécessaire. J'ai utilisé
        \link{https://www.nftables.org}{nftables} pour mettre en place ces
        règles. Seul les flux en HTTP, HTTPS sont autorisés en TCP et
        l'intérogation DNS en UDP\footnote{L'ouverture du port 53 est
        obligatoire pour le fonctionnement d'Unbound, mais la modification des
        serveurs utilisés par l'utilisateur est verrouillée.}. Le fichier de
        configuration est disponible annexe \ref{chap:nftables} (page
        \pageref{chap:nftables}).

    \item \textbf{Un réglage fin du navigateur} via un fichier de configuration
        au niveau du système. J'ai pu ainsi désactiver l'installation
        d'extentions ou le DNS over HTTPS\footnote{le navigateur contacte des
        serveurs de noms via HTTPS, passant outre les restrictions mises avec
        \textit{Unbound}}.

\end{enumerate}

\section{Installation des Bornes}

\paragraph{} Les bornes étant imposantes, elles ont été livrées sur chacune des
sturctures concernées. Pour l'installation de la partie logicielle, j'ai écrit
un script. Celui-ci nécessite une base \textit{Debian} minimale et \textit{git}
pour fonctionner.

\paragraph{} L'installation se fait en deux étapes~:

\begin{enumerate}

    \item \textbf{L'installation d'un système minimal} à l'aide d'une clé USB
        créée par un \link{https://git.epha.se/ephase/debian-usbcreator}{script
        maison}. Cette installation se fait de façon automatique par l'emploi de
        fichier \textit{preseed}\footnote{Un fichier preseed donne des
        instructions à \textit{Debian Installer} voir
        \link{https://wiki.debian.org/fr/DebianInstaller/Preseed}{sur la
        documentation} du projet Debian}

    \item \textbf{L'exécution du script d'installation} afin de paramétrer la
        machine. Lancé en \textit{super-utilisateur}, il installe les logiciels
        nécéssaires, les scripts, les utilisateurs et les fichiers de
        configuration.

\end{enumerate}

\section{Retour des usagers}

\paragraph{} La situation sanitaire exceptionnelle début 2020 a largement
impactée l'installation des bornes~: les structures étaient alors fermées au
public. Une fois le premier confinement levé, nous avons pu obtenir les
premiers retours par l'intermédiaire du facilitateur numérique. J'ai corrigé
certains défauts comme le temps d'inactivité trop long avant le verrouillage ou
l'ajout de sites supplémentaires dans la liste de ceux autorisés.

\section{Conclusion}

\paragraph{} Les 3 objectifs définis initialement pour la mise en place de
l'ensemble logiciel de ces bornes \textbf{ont tous été atteints}. Cependant le
travail de recherche a été long et parfois fastidieux. Ce n'en était pas pour
autant inintéressant, bien au contraire. J'ai pu toucher à beaucoup d'aspects
autour de l'environnement GNU/Linux de type \textit{"Bureau"}.

\paragraph{} Il m'a fallut batailler avec le bureau XFCE qui ne
voulait pas se lancer avec la session utilisateur en mémoire. J'ai donc écrit un
script spécifique pour lancer la session graphique, il est disponible en annexe
\ref{chap:startx_bornes} (page \pageref{chap:startx_bornes}).

\paragraph{} Toutefois beaucoup de points seraient à améliorer~: une
installation simplifiée, la mise en place d'une session non limitée pour le
facilitateur numérique et surtout \textbf{une diffusion sous licence open-source
du script d'installation} et des éléments associés afin que d'autres stuctures
puissent en béneficier.
