Sous Linux en général, la gestion des services se fait par des scripts situés dans le répertoire /etc/init.d. Pour gérer ces services il existe des répertoires /etc/rcX.d, qui permettent de lancer ou d’arrêter les scripts en fonction du runlevel de la machine.
Avant de poursuivre, il est important de comprendre la notion de runlevel. Le runlevel est un niveau représentant l’état du système dans lequel tourne votre linux (Notamment les services comme SSH, HTTP, MYSQL, NTP, …). Ce niveau porte un nom et surtout un numéro et il définit un ensemble de programmes (=services) qui doivent être lancés ou arrêtés.
Les runlevel portent des numéros, bien que cela soit totalement arbitraire et n’impliquent pas de notion d’ordre. 3 niveaux sont clairement définis:
- 0 : arrêt de la machine
- 1 : mode mono utilisateur (en général sans réseau)
- 6 : reboot de la machine
Les niveaux 2 à 5 sont laissés à la discrétion des distributions. Pour Debian ils sont tous identiques, 2 étant le niveau par défaut. Sous Redhat/CentOS, seuls le 3 (sans interface graphique) et le 5 (avec interface graphique) sont définis, celui par défaut étant le 5.
De plus un autre niveau existe, nommé S, il s’agit d’un niveau lancé lors du lancement de la machine avant les autres, quel que soit le runlevel.
La définition du niveau par défaut se fait à deux endroits. Tout d’abord dans la configuration de init, c’est-à-dire dans /etc/inittab. C’est ici qu’on trouve les commandes qui doivent être lancées à chacun des runlevel.
L’autre partie se situe dans /etc/rcX.d (où X représente le niveau) ou /etc/rc.d/rcX.d selon votre distribution.
Ceux qui commencent par un K ont le paramètre stop et ceux qui commencent par un S ont le paramètre start. Attention, toutefois, il ne prend en compte que les scripts dont le nom commencent par K ou S suivi de 2 chiffres.
Pour savoir dans quel runlevel nous sommes il suffit d’utiliser la commande : runlevel. Nous voyons ici que nous sommes en runlevel 5.
Maintenant que nous savons ce qu’est un runlevel, nous pouvons continuer notre apprentissage de la commande chkconfig.
chkconfig est un utilitaire qui permet de gérer les services réseaux linux en ligne de commande. Il se révèle pratique dans le sens ou il permet par exemple de gérer des services dans un script ou d’ajouter un service dans certain runlevel.
Voici quelques exemples qui pourront vous servir à comprendre l’intérêt de cette commande.
- Comment obtenir des informations sur les services ?
chkconfig –list
Cette commande fournit la liste de tous les services reconnus et précise pour chaque runlevel si celui-ci est lancé au démarrage.
Si un service vous intéresse, par exemple SSHD, pour voir la configuration actuelle de celui-ci vous devez utiliser la commande suivante :
chkconfig –list sshd
- Comment activer ou désactiver un service ?
Pour cela on utilise la commande suivante pour activer un service :
chkconfig –level runlevel nom_service on chkconfig -level 3 ntpdate on
Cela aura pour conséquence, qu’au prochain reboot de la machine le service ntpdate sera lancé automatiquement.
- Comment désactiver un service ?
chkconfig –level runlevel nom_service off chkconfig -level 0123456 bluetooth off
Cette commande aura pour effet de désactiver le service dans tous les runlevel au prochain reboot.
Comme vous pouvez le constater vous pourrez arrêter tous les services inutiles, « sans risque » sur votre distribution pour optimiser celle-ci et gagner quelques méga-octets de mémoire et éviter des trous de sécurité.
Enfin pour être complet vous pouvez supprimer un service, celui-ci ne sera pas physiquement supprimé mais ne fera plus partie de la liste chkconfig –list. Le script de lancement dans init.d sera toujours présent.
Pour notre test nous allons manipuler le service Bluetooth.
- Comment supprimer un service ?
chkconfig –del bluetooth
- Comment ajouter un service ?
chkconfig –add bluetooth
# SAMPLE BASIC INIT SCRIPT
#
# Below is the chkconfig syntax for auto startup at different run levels
# Note runlevel 1 2 and 3, 69 is the Start order and 68 is the Stop order
# Make sure these are unique by looking into /etc/rc.d/*
# Also below is the description which is necessary.
#
# chkconfig: 123 69 68
# description: Description of the Service
#
# Below is the source function library
#
. /etc/init.d/functions
#
if [ -f /etc/sysconfig/BLAH ]; then
. /etc/sysconfig/BLAH
fi
#
# Below is the Script Goodness controlling the service
#
case "$1" in
start)
echo -n "Start service BLAH"
/usr/sbin/BLAH start
;;
stop)
echo -n "Stop service BLAH"
/usr/sbin/BLAH stop
;;
restart)
echo -n "Restart service BLAH"
/usr/sbin/BLAH restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
[/bash]
Les lignes importantes sont celles commençant par :
- chkconfig qui indique les runlevel ou le service doit être démarré, ensuite vient le numéro d’ordre de démarrage ici 69 puis celui de l’arrêt 68.
- description, une description du service est plus que conseillée.
Voici un exemple de fichier avec notre script bluetooth :
- 1: Ces informations sont obligatoires afin que votre script soit correctement interprété par l’utilitaire chkconfig.
Nous avons fait le tour des commandes les plus importantes de l’utilitaire chkconfig. Maintenant la gestion des services sous CentOS ne devrait plus trop vous posez de problème.
That’s All.