Configuration d'un Point d'Accés Public au Web

Objectifs

Mettre à la disposition du public des lieux publics (MPT, MJC, Associations, etc…) des bornes d'accès au web Recycler des ordinateurs anciens en installant une distribution légère de GNU/Linux qui proposera aux utilisateurs un seul logiciel : le navigateur Web1)

Installation de l'OS

Comme OS on part sur une base de Debian/Squeeze que l'on installera seulement avec le système de base et openssh.

On fera 4 partitions2):

On peut créer ou pas l'utilisateur à ce moment mais faudra penser à restreindre ses droits dans le fichier /etc/group.

Configuration de l'OS

# mkdir /data/log
# echo "/data/log /var/log none bind 0 0" >> /etc/fstab
# mkdir /root/.ssh && chmod 700 /root/.ssh
# touch /root/.ssh/authorized_keys

Copiez vos clés id_rsa.pub dans le fichier /root/.ssh/authorized_keys puis éditez le fichier /etc/ssh/sshd_config pour enlever les authentification par mot de passe et n'autoriser que l'ulisateur root à se connecter:

PasswordAuthentication no
AllowUsers root

Puis on verrouille le compte root. Tous les accés suivants au compte root se faisant par ssh.

# passwd -l

On vérifie le fichier /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

Attention au fichier /etc/resolv.conf. Il doit contenir la même liste de nameserver que l'endroit ou sera placer la machine ou utiliser un serveur DNS public comme 8.8.8.8.

On complète le fichier /etc/apt/sources.list

deb http://ftp.fr.debian.org/debian squeeze main contrib non-free

deb http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free

# Pour avoir xulrunner-2.0 et iceweasel-4.0 sur squeeze
deb http://mozilla.debian.net/ squeeze-backports iceweasel-4.0

En fonction du matériel présent dans la machine, il peut être nécessaire d'avoir les firmwares:

# apt-get install firmware-linux

Si d'autre firmware doivent être installé, on a la liste avec:

# apt-cache search --names-only firmware

On ajoute le support acpi et la gestion du son avec alsa3)

# apt-get install acpi acpi-support acpitool alsa-base alsa-firmware-loaders alsa-tools alsa-utils

Editez le fichier /etc/modprobe.d/alsa-base-blacklist.conf pour backlister les modules snd-pcsp et pcspkr pour arreter les BEEPs.

installation du proxy

Le proxy ainsi que l'écriture des logs ne devrait pas être sur ce type machine mais placé sur un serveur différent. Le choix du proxy et de ses modules complémentaires dépend de ce qui doit être filtré. Là on va juste installer squid et adzapper pour filtrer la pub:

# apt-get install squid adzapper

Puis il faut ajouter la ligne

redirect_program /usr/bin/adzapper

au fichier /etc/squid/squid.conf

Configuration de l'espace utilisateur

Créez l'utilisateur si il n'a pas été créé lors de l'installation. On va l'appeler linuxquimper. Il doit appartenir aux groupes video et audio (voir /etc/group). Puis il faut faire une sauvegarde du compte et on le verouille:

# rsync -av /home/linuxquimper /opt/
# passwd -l linuxquimper

On ajoute le serveur X et le gestionnaire de connection automatique nodm:

# apt-get install xorg nodm

Choix du navigateur

C'est ce qui pose le plus problème car on ne peut pas installer n'mporte quel navigateur. Celui-ci doit avoir les fonctionnalités suivantes:

Actuellement, il n'existe pas de navigateur installable qui porpose directement tout ça, il faut le développer. Le développement peut être basé sur xulrunner-2.0 ou sur webkit en gtk ou qt.

Pour faire une démo de l'installation je suis allez au plus simple même si il ne répond pas à tous les besoins en me basant sur le programme de démo GTkLauncher de webkit. Pour le faire fonctionner on aura besoin de libwebkit-1.0-2. Donc

# apt-get install libwebkit-1.0-2

En principe la compilation du programme doit ce faire sur une autre machine et on a besoin des paquets suivants

# apt-get install build-essential libwebkit-dev

et du code source de GtkLauncher et du Makefile.

que l'on installe avec la commande

# make install

configuration de la session

On configure nodm pour se connecter directement sur le compte linuxquimper en éditant le fichier /etc/default/nodm

# nodm configuration

# Set NODM_ENABLED to something different than 'false' to enable nodm
NODM_ENABLED=true

# User to autologin for
NODM_USER=linuxquimper

# xinit program
NODM_XINIT=/usr/local/bin/xinit

# First vt to try when looking for free VTs
NODM_FIRST_VT=7

# X session
NODM_XSESSION=/etc/X11/Xsession

# Options for the X server
NODM_X_OPTIONS='vt7 -nolisten tcp'

# If an X session will run for less than this time in seconds, nodm will wait an
# increasing bit of time before restarting the session.
NODM_MIN_SESSION_TIME=120

On créer le fichier /usr/local/bin/xinit que l'on rend exécutable:

#!/bin/sh
 
rsync -a --delete /opt/linuxquimper /home/
 
exec /usr/bin/xinit "$@"

et on créer le ficher /etc/X11/Xsession.d/98_linuxquimper pour lancer la session. ON ne peut pas utiliser de fichier $HOME/.xsession car on va passer la partition /home en noexec.

# This file is sourced by Xsession(5), not executed.
 
if [ "$USER" = "linuxquimper" ] ; then
 
  export LANG=fr_FR.UTF-8
  // exec xulrunner-2.0 /opt/conkeror/application.ini
  exec /opt/GtkLauncher
 
  # Reset default startup
  STARTUP=/bin/false
fi
 
# vim:set ai et sts=2 sw=2 tw=80:

Puis on peut lancer la session utilisateur avec /etc/init.d/nodm start.

fin de la configuration

Il faut sécuriser l'accés au shell grub en lui métant un mot de passe. On obtient un mot de passe chiffré pour grub avec la commande grub-mkpasswd-pbkdf2. On recupére le résultat de cette commande que l'on met dans un fichier /etc/grub/01_password que l'on rend éxécutable:

#!/bin/sh
set -e
 
cat <<EOF
 
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.64.2D0F37B9.37B35EF82745CEA0B146C451BD90BDC12DAB53EF29919FA888C7FA5E6417EBD0072FF9D0DC917D69E68046ECA991C799687849A1D012B2057AE82E9A2688DA83
 
EOF

Pour avoir un boot graphique on peut installer plymouth et ajouter «splash» à la ligne de commande linux

# apt-get install plymouth plymouth-themes-solar

et on édite le fichier /etc/default/grub

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

ensuite on peut mettre le fichier grub.cfg à jour

# update-grub

on termine on mettant toutes les partitions sauf / en noexec et / en read-only dans le fichier /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=d240c895-f500-42fb-b34a-1335cf861c1b /               ext4    errors=remount-ro,ro 0       1
UUID=0ffae1e9-f09a-4aa5-a8d0-7a681304e8d9 none	swap	sw	 0       0
UUID=cb7b0fac-b92c-4c8c-9792-5a2ea4e1032b /home           ext4	defaults,noexec	0       2
UUID=5fe5af3f-f3a8-479e-bd43-e8a77f2df74b /data           ext4	defaults,noexec	0       2

/data/log /var/log none bind 0 0
/data/squid /var/spool/squid none bind 0 0

tmpfs           /tmp            tmpfs   defaults,noexec        0       0
tmpfs           /var/tmp        tmpfs   defaults,noexec        0       0
tmpfs           /var/run        tmpfs   defaults,noexec        0       0

## Pas de device externes
#/dev/fd0        /media/floppy0  auto    rw,user,noauto,noexec,utf8 0       0

Maintenant on peut rebooter4) pour voir si tout fonctionne correctement.

1)
le web n'est pas Internet
2)
en principe 3 devrait suffire si on externalise le proxy et les logs
3)
ou pulseaudio
4)
C'est le premier reboot après l'installation de la base