Une machine ayant vocation à offrir un service donné ne devrait contenir que les éléments logiciels nécessaires à la fourniture de ce service. Quel est l'intérêt d'avoir le compilateur gcc sur un serveur Web ? Pourquoi démarrer portmap si aucun service n'a besoin du portmapper ?
Effectuer un nettoyage en règle du système ne permet pas
seulement un gain de place. Les réèls interêts sont
ailleurs.
Supprimer les services inutiles c'est d'abord suprimer le risque que la
machine soit compromise grâce à ce
service. Même si le service exécuté est exempt de bugs
et de failles de sécurité le jour J, il ne le sera peut
être pas le jour J+1. Grâce au « banner
fingerprinting » (détermination de logiciel et de version
grâce aux bannières), les délinquants informatiques
scannent massivement des blocs d'adresses à la découverte des
services situés sur les machines. Ces services sont ensuite
identifiés si possible grâce à
leur bannière d'accueil. Ils peuvent ainsi se constituer une base de
données des logiciels/versions en fonctionnement sur une des
machines données. Si, le jour J+1, une vulnérabilité
exploitable est découverte dans version X
du
logiciel L
, il ne reste
qu'a rechercher dans la base de données la liste des machines
immédiatement vulnérables.
Ces machines n'ont alors aucune chance de mettre en place un correctif
avant d'être attaqués.
Enfin, supprimer les services inutiles permet une économie de stockage, de RAM et de CPU.
Même si sur les distributions Ubuntu serveur sont très propres à l'installation, il convient de savoir effectuer ce nettoyage. Ce pourra être utile sur d'autres distributions, ou sur des version d'Ubuntu serveur peut être moins abouties.
Lorsque l'on cherche des services inutiles sur un système, il est souvent plus simple de regarder quelles sont les socket ouvertes en écoute. Cela ne garantit pas de trouver tous les services (dæmons) qui tournent sur la machine (tous n'ont pas vocation à écouter sur des ports) mais permet d'éliminer les plus importants en premier lieu. On pourra s'attacher à éliminer le reste ensuite.
netstat permet d'afficher la liste des sockets
ouvertes sur le système. Nous ne sommes intéressés que par les socket TCP
en écoute (LISTEN
) et par les sockets UDP.
La sortie de netstat sera donc filtrée par un
egrep "LISTEN|udp"
:
oper@ubuntu:~$ sudo netstat -tunap | egrep "LISTEN|udp"
udp 0 0 0.0.0.0:69 0.0.0.0:* 3745/dhclient3
oper@ubuntu:~$
Le seul démon (réseau) en cours de fonctionnement semble être le client dhcp. Lorsque l'adressage IP sera correctement configuré (Section 2.4.1, « Adressage »), ce démon ne sera plus démarré au boot.
Sous Ubuntu serveur, seule une poignée de packages peut être
supprimée. Ces packages sont installés grâce au
« méta-package »
ubuntu-standard
. Un méta-package est une
package « virtuel » vide, qui, grâce à ses dépendances, implique
l'installation (ou la désinstallation) d'autres packages.
Tous les paquetages dont dépend
ubuntu-standard
sont optionnels.
en désinstallant l'un d'entre eux, on forcera aussi la désinstallation du
package ubuntu-standard
. Réinstaller ce
dernier forcera la réinstallation de toutes ses dépendances.
Pour connaître les paquets installés comme dépendance d'
ubuntu-standard
, on peut faire appel à la
commande apt-cache show ubuntu-standard :
oper@ubuntu:~$ apt-cache show ubuntu-standard
Package: ubuntu-standard
Priority: standard
Section: metapackages
Installed-Size: 44
Maintainer: Matt Zimmerman <mdz@ubuntu.com>
Architecture: i386
Source: ubuntu-meta
Version: 1.43
Depends: at, cpio, cron, dmidecode, dnsutils, dosfstools, dselect, ed, fdutils, file, ftp, hdparm, info, inputattach, iptables, iputils-arping, iputils-tracepath,logrotate, lshw, lsof, ltrace, man-db, manpages, memtest86+, mime-support, nano, parted, popularity-contest, ppp, pppconfig, pppoeconf, psmisc, reiserfsprogs, rsync, strace, tcpdump, telnet, time, w3m, wget
Recommends: command-not-found, mtr-tiny, openssh-client, update-manager-core
Filename: pool/main/u/ubuntu-meta/ubuntu-standard_1.43_i386.deb
Size: 17158
MD5Sum: 4b9cfdce3972c9d6e4752d1fc4bd42ff
Description: The Ubuntu standard system
This package depends on all of the packages in the Ubuntu standard system.
This set of packages provides a comfortable command-line Unix-like
environment.
.
It is also used to help ensure proper upgrades, so it is recommended that
it not be removed.
Bugs: mailto:ubuntu-users@lists.ubuntu.com
Origin: Ubuntu
Task: ubuntu-standard
oper@ubuntu:~$
Cette commande renvoie, à la suite du paramètre
Depends:
, une liste des paquetages
dont dépend
ubuntu-standard
et qui sont supprimables.
Par exemple, si le serveur n'a pas vocation à utiliser ppp
ou pppoe, il est
possible de supprimer les packages
ppp
,
pppconfig
et
pppoeconf
.
oper@ubuntu:~$sudo apt-get remove --purge ppp pppconfig pppoeconf
Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Reading state information... Fait Les paquets suivants seront ENLEVÉS : ppp* pppconfig* pppoeconf* ubuntu-standard* 0 mis à jour, 0 nouvellement installés, 4 à enlever et 4 non mis à jour. Il est nécessaire de prendre 0o dans les archives. Après dépaquetage, 2339ko d'espace disque seront libérés. Souhaitez-vous continuer [O/n] ?O
(Lecture de la base de données... 14372 fichiers et répertoires déjà installés.) Suppression de ubuntu-standard ... Suppression de pppoeconf ... Purge des fichiers de configuration de pppoeconf ... Suppression de pppconfig ... Purge des fichiers de configuration de pppconfig ... rmdir: /var/cache/pppconfig: No such file or directory Suppression de ppp ... Stopping all PPP connections...done. Purge des fichiers de configuration de ppp ... oper@ubuntu:~$
On remarquera, au passage, que le package
ubuntu-standard
est désinstallé comme
prévu.