3.5. Administrer le nombre minimal de services nécessaires
Les services sont des programmes tels que les serveurs FTP et les serveurs web. Puisqu'ils doivent écouter les connexions entrantes qui demandent le service, des ordinateurs externes peuvent se connecter au vôtre. Les services sont parfois vulnérables (entendez par là qu'ils peuvent être compromis par certaines attaques) : ils créent des risques pour la sécurité.
Vous ne devriez pas installer les services dont vous n'avez pas besoin sur la machine. Chaque service installé peut introduire de nouveaux trous de sécurité, peu évidents ou inconnus, sur l'ordinateur.
Comme vous le savez sans doute déjà, lorsque vous installez un service, le comportement par défaut est de l'activer. Dans une installation Debian par défaut, sans service installé, le nombre de services actifs est assez faible et il est même plus faible quand on parle de services réseau. Dans une installation standard de Debian 3.1, les seuls services activés par défaut sont OpenSSH, Exim (selon la façon dont vous l'avez configuré) et le portmapper RPC comme services réseau
. Si vous n'avez pas choisi l'installation standard, mais que vous avez sélectionné l'installation en mode expert, vous obtiendrez une installation avec aucun service réseau actif. Le portmapper RPC est installé par défaut car il est nécessaire pour beaucoup de services, par exemple NFS. Cependant, il peut facilement être retiré, consultez
Section 5.13, « Sécurisation des services RPC » pour plus d'informations sur la façon de sécuriser ou de désactiver les services RPC.
Lorsque vous installez un nouveau service réseau (démon) sur le système Debian GNU/Linux, il peut être activé de deux façons : avec le superdémon inetd (une ligne sera ajoutée à /etc/inetd.conf
) ou par un programme qui s'attache lui-même aux interfaces réseau. Ces programmes sont contrôlés par les fichiers /etc/init.d
qui sont appelés lors du démarrage au moyen du mécanisme System V (ou un autre) en utilisant des liens symboliques dans /etc/rc?.d/*
(pour plus d'informations sur la manière dont cela est fait, consultez /usr/share/doc/sysvinit/README.runlevels.gz
).
Si vous voulez garder certains services tout en les utilisant rarement, utilisez les commandes
update-*
, par exemple
update-inetd
et
update-rc.d
pour les supprimer du processus de démarrage. Pour plus d'informations sur la façon de désactiver des services réseau, veuillez consulter
Section 3.5.1, « Désactivation de services démon ». Si vous voulez changer le comportement par défaut de démarrage des services à l'installation de leur paquet associé
, utilisez
policy-rc.d
, veuillez consulter
/usr/share/doc/sysv-rc/README.policy-rc.d.gz
pour obtenir plus de renseignements.
La prise en charge d'invoke-rc.d
est obligatoire dans Debian, ce qui veut dire que pour Debian 4.0 Etch et versions suivantes, vous pouvez écrire un fichier policy-rc.d qui interdit le démarrage des nouveaux démons avant de les avoir configurés. Même si aucun de ces scripts n'est encore empaqueté, ils sont plutôt faciles à écrire. Consultez policyrcd-script-zg2.
3.5.1. Désactivation de services démon
La désactivation d'un service démon est relativement simple. Vous pouvez soit supprimer le paquet fournissant le programme pour ce service, soit supprimer ou renommer les liens de démarrage sous
/etc/rc${runlevel}.d/
. Si vous les renommez, assurez-vous qu'ils ne commencent pas avec un « S » pour qu'ils ne soient pas démarrés par
/etc/init.d/rc
. Ne supprimez pas tous les liens disponibles ou le système de gestion des paquets les régénérera lors des mises à jour du paquet, assurez-vous de laisser au moins un lien (typiquement, un lien « K », « kill » pour tuer). Pour obtenir plus de renseignements, veuillez consulter la section
http://www.debian.org/doc/manuals/reference/ch-system#s-custombootscripts de la référence Debian (chapitre 2 - fondamentaux de Debian).
Vous pouvez supprimer ces liens manuellement ou en utilisant
update-rc.d
(consultez
update-rc.d(8)). Vous pouvez, par exemple, désactiver un service pour les niveaux d'exécution multiutilisateurs en faisant :
# update-rc.d nom
stop XX
2 3 4 5 .
Avec
XX un nombre qui détermine quand l'action d'arrêt pour ce service sera exécutée. Veuillez noter que, si vous
n'utilisez pas file-rc,
update-rc.d -f service
remove
ne fonctionnera pas correctement car
tous les liens sont supprimés, lors d'une réinstallation ou d'une mise à jour du paquet, ces liens seront régénérés (ce qui n'est probablement pas ce que vous voulez). Si vous pensez que cela n'est pas intuitif, vous avez probablement raison (consultez le
http://bugs.debian.org/67095). D'après les pages de manuel :
Si des fichiers /etc/rcrunlevel
.d/[SK]??nom existent déjà,
alors update-rc.d ne fait rien. C'est ainsi fait pour que
l'administrateur système puisse réarranger les liens — à condition
qu'il en reste au moins un — sans que sa configuration ne soit
réécrite.
Si vous utilisez file-rc, toutes les informations concernant le démarrage des services sont gérées par un fichier de configuration commun et sont conservées même si les paquets sont retirés du système.
Vous pouvez utiliser l'interface texte (TUI, Text User Interface) fournie par
sysv-rc-conf pour faire tous ces changements facilement (
sysv-rc-conf
fonctionne pour
file-rc ainsi que pour les niveaux d'exécution normaux de type System V). Vous pouvez également trouver des interfaces graphiques similaires pour les systèmes de bureau. Vous pouvez aussi utiliser l'interface en ligne de commande de
sysv-rc-conf :
# sysv-rc-conf bidule off
L'avantage, avec cet utilitaire, est que les liens rc.d sont remis dans l'état qu'ils avaient avant l'appel « off » si vous réactivez le service avec :
# sysv-rc-conf bidule on
D'autres méthodes (moins recommandées) pour désactiver les services sont :
suppression du script
/etc/init.d/nom_service
et suppression des liens de démarrage avec :
# update-rc.d nom
remove
déplacement du fichier script (/etc/init.d/nom_service
) vers un autre nom (par exemple /etc/init.d/OFF.nom_service
). Cela laissera des liens symboliques non valables sous /etc/rc${runlevel}.d/
et générera des messages d'erreur au démarrage du système ;
suppression du droit d'exécution du fichier /etc/init.d/nom_service
. Cela générera également des messages d'erreur au démarrage ;
édition du script /etc/init.d/nom_service
pour qu'il s'arrête immédiatement lorsqu'il est exécuté (en ajoutant une ligne exit 0
au début ou en commentant la partie start-stop-daemon
dans celui-ci). Si vous procédez de cette façon, vous ne pourrez plus utiliser le script pour démarrer le service vous-même plus tard.
Cependant, les fichiers sous /etc/init.d
sont des fichiers de configuration et ne devraient pas être écrasés lors des mises à jour de paquet si vous y avez fait des modifications locales.
Contrairement à d'autres systèmes d'exploitation (UNIX), les services dans Debian ne peuvent pas être désactivés en modifiant les fichiers dans /etc/default/nom_service
.
FIXME : Ajouter des informations sur la gestion des démons par file-rc.
3.5.2. Désactivation d'inetd ou de ses services
Vous devriez vérifier si vous avez vraiment besoin du démon inetd
de nos jours. inetd
a toujours été un moyen de compenser des déficiences du noyau, mais celles-ci ont été corrigées dans les noyaux Linux modernes. Des possibilités de déni de service existent avec inetd
(qui peut augmenter énormément la charge de la machine) et de nombreuses personnes préfèrent utiliser des démons indépendants au lieu d'appeler des services avec inetd
. Si vous voulez toujours exécuter un service du genre d'inetd
, tournez-vous plutôt vers un démon inetd plus configurable comme xinetd
, rlinetd
ou openbsd-inetd
.
Vous devriez arrêter tous les services inetd non nécessaires sur le système, comme echo
, chargen
, discard
, daytime
, time
, talk
, ntalk
et les r-services (services à distance) (rsh
, rlogin
et rcp
) qui sont considérés comme EXTRÊMEMENT dangereux (utilisez ssh
à la place).
Vous pouvez désactiver les services en modifiant directement
/etc/inetd.conf
, mais Debian offre un meilleur moyen :
update-inetd
(qui commente les services de manière à ce qu'ils puissent être facilement réactivés). Vous pouvez supprimer le démon
telnet
en exécutant cette commande pour changer le fichier de configuration et redémarrer le démon (dans ce cas le service est désactivé) :
/usr/sbin/update-inetd --disable telnet
Si vous désirez des services en attente, mais qui n'écoutent pas sur toutes les adresses IP de l'hôte, vous voudrez peut-être utiliser des fonctions non documentées de inetd
(remplacez des noms de service avec la syntaxe service@ip) ou utilisez un autre démon tel que xinetd
.