Dans le répertoire /etc/rc.d/init.d on trouve des scripts permettant de lancer des services. Ce sont les daemons. Dans chaque script il y a une petite description de ce que le daemon (ou service) est sensé faire. On peut activer ou désactiver ou redémarrer ou voir l'état d'un service de la façon suivante :
/etc/rc.d/init.d/
/etc/rc.d/init.d/
/etc/rc.d/init.d/
/etc/rc.d/init.d/
ou plus simplement en tapant :
service
Cela convient pour un service que l'on active ou désactive occasionnellement de façon manuelle ; dans ce cas on peut avoir besoin de le contrôler pour voir si le service donné tourne bien (son statut).
On peut charger également les services automatiquement à chaque démarrage et ce de deux façons :
- Soit en créant des liens dans le répertoire du runlevel correspondant
- Soit en utilisant la commande chkconfig.
Dans chaque distribution linux on trouve dans /etc/inittab les différents niveaux d'exécution (runlevel en anglais) et leurs utilités.
Par exemple sous une mandriva (c'est la même chose pour une redhat) on a, en regardant dans le fichier /etc/inittab :
...
# 0 - halt
# 1 - Single user mode
# 2 - Multiuser, without NFS
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot
...
Sous une slackware on trouve ceci:
...
# 0 - halt
# 1 - Single user mode
# 2 - Multiuser, without NFS
# 3 - Full multiuser mode
# 4 - X11
# 5 - unused
# 6 - reboot
...
Bref pour chaque distribution on trouve son système de runlevels.
En observant bien ces différents runlevels on peut dire que chaque runlevel correspond à un état de la machine. Pour la mandriva le runlevel 0 sert à arrêter la machine, le runlevel 1 est le mode de maintenance où seul le root peut se logger et un minimum de service tourne (attention à la sécurité), le runlevel 3 est destiné à une utilisation multi-utilisateur mais en mode texte, le runlevel 5 est la même chose que le runlevel 3 mais en mode graphique, le 6 pour rebooter la machine.
Ici les niveaux les plus utilisés sont le runlevel 3 et 5. En général il n'est pas intéressant de lancer des services aux runlevels 6 ou 0.
Dans le répertoire /etc/ se trouve les répertoires rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d. Ils correspondent chacun à un runlevel.
En listant le répertoires rc3.d : avec la commande ls on obtient :
K10webmin@
S10network@
S56xinetd@
S71sound@
S80postfix@
S92crond@
S99local@
S11portmap@
S55sshd@
S65dhcpd@
S75keytable@
S85numlock@
S91smb@
Cela représente les différents services lancés au runlevel 3. On peut remarquer qu'ils commencent tous par une lettre, elle détermine si le service ou daemon) est activé (S pour Start) ou non (K pour Kill). Le chiffre précise le niveau d'ordre d'exécution (ici par exemple le service network et activé avant portmap). À la fin de chaque service on remarque la présence de @ qui veut dire que c'est un lien qui pointe vers un autre fichier, dans notre cas le service pointe vers le script qui active le démon dans le répertoire /etc/rc.d/init.d
Pour mieux comprendre on peut taper ls -l et là on voit vers quoi pointent nos liens :
...
lrwxrwxrwx 1 root root 17 oct 3 21:58 S10network -> /etc/rc.d/init.d/network*
...
Dans le répertoire /etc/rc3.d/ (ou dans n'importe quel autre répertoire de runlevel) on peut créer de nouveaux services à lancer de la façon suivante : on se place dans le répertoire /etc/rc3.d puis on tape :
ln -s /etc/rc.d/init.d/
Attention, on écrit le nom du service sans les crochets<>
Ici ## représente l'ordre d'exécution.
Pour au contraire désactiver un service on remplace S par K.
Si on utilise la méthode précédente pour activer un démon nouvellement installé, il faudra passer par tous les runlevels utilisés et à chaque fois tout taper. C'est assez fastidieux.
Heureusement il y a la commande chckonfig qui s'utilise de la manière suivante :
chkconfig --add
Cela aura pour effet de rajouter le démon du service dans tous les runlevels.
On peut procéder de façon plus fine, on utilisant :
chkconfig --level 123456
Exemple : Nous voulons activer le démon samba (smb) au runlevel 3 et 5, dans les autres runlevels nous voulons qu'il soit désactivé. On tape :
# chkconfig --level 35 smb on
# chkconfig --level 01246 smb off
Dans le cas où on n'est plus très sûr de ce que l'on a fait on tape :
# chkconfig --list
Avec cette option la commande chkconfig liste tous les services avec leurs statuts à tous les runlevels.
Mais si on ne veut lister qu'un seul démon on tape :
# chkconfig --list
Pour plus d'info: man init, man chkconfig
Il va sans dire que la commande chkconfig facilite beaucoup la tâche. Cependant si on doit se taper tout ça à la main pour l'ensemble des services, on n'est pas sorti de l'ornière. Miracle ! Linux a pensé à nous, et pour se simplifier la tâche, on a plusieurs outils: Linuxconf via Panneau de configuration/gestion des services (qui stop ou arrete un deamon pour tous les runlevels), Runleveleditor (qui permet de choisir pour chaque runlevel les deamons à activer ou non), ntsysv, Ksys, etc...Bref on a l'embaras du choix ;-)
#! /bin/bash
#
# crond Start/Stop the cron clock daemon.
#
# chkconfig: 2345 90 60
# description: cron is a standard UNIX program that runs user-specified
# programs at periodic scheduled times. vixie cron adds a
# number of features to the basic UNIX cron, including better
# security and more powerful configuration options.
# processname: crond
# config: /etc/crontab
# pidfile: /var/run/crond.pid
# Source function library.
. /etc/init.d/functions
RETVAL=0
# See how we were called.
prog='crond'
start() {
gprintf 'Starting %s: ' '$prog'
daemon crond
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/crond
return $RETVAL
}
stop() {
gprintf 'Stopping %s: ' '$prog'
killproc crond
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/crond
return $RETVAL
}
rhstatus() {
status crond
}
restart() {
stop
start
}
reload() {
gprintf 'Reloading cron daemon configuration: '
killproc crond -HUP
retval=$?
echo
return $RETVAL
}
case '$1' in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
status)
rhstatus
;;
condrestart)
[ -f /var/lock/subsys/crond ] && restart || :
;;
*)
gprintf 'Usage: %s {start|stop|status|reload|restart|condrestart} ' '$0'
exit 1
esac
exit $?
A titre informatif, voici une liste (non exhaustive) de quelques daemons et de leurs fonctions.
Nom du service |
Commentaires |
apmd |
Nécessaire uniquement pour les ordinateurs portables |
xntpd |
Network time protocol |
portmap |
Nécessaire si vous utilisez un service rpc, comme NIS ou NFS |
sound |
Configuration des sons (la carte peut fonctionne r très bien sans si le fichier /etc/modules.conf est bien conçu |
netfs |
C'est le client nfs, utilisé pour mounter des filesystems depuis un serveur nfs |
rstatd , rusersd, rwhod, rwalld |
Ne pas exécuter tous les services car ils fournissent trop d'informations aux utilisateurs à distance |
bootparamd |
Utilisé par les clients sans lecteur de disquette (vulnérable) |
squid |
Serveur proxy |
yppasswdd |
Nécessaire si vous êtes un serveur NIS (extrêmement vulnérable) |
ypserv |
Nécessaire si vous êtes un serveur NIS (extrêmement vulnérable) |
dhcpd |
Démarre le daemon du serveur dhcp |
atd |
Utilisé pour le service at, similaire à cron, mais n'est pas nécessaire |
pcmcia |
Parle de lui-même |
snmpd |
Daemon SNMP, peut donner à des utilisateurs distants des informations détaillées sur votre système |
named |
Serveur DNS |
routed |
RIP, n'exécutez cela que si vous en avez vraiment besoin |
lpd |
Services d'impression |
mars-nwe |
Fichier Netware et serveur d'impression |
nfs |
Utilisé pour le serveur NFS, lancez le que si vous en avez absolument besoin |
amd |
Daemon AutoMount, sert à mounter les filesystems distants |
gated |
Sert à lancer d'autres protocoles de routage comme OSPF |
sendmail |
Vous pourrez toujours envoyer/recevoir des emails par Netscape (ou autre) sans lui. |
httpd |
Serveur web Apache |
ypbind |
Nécessaire si vous êtes un client NIS |
xfs |
Xfont server (indispensable si vous êtes sous X). |
innd |
Serveur de news |
arpwatch |
Off par défaut. Rapport d'activité de datagrammes IP via mail |
kudzu |
Détection des periphériques. A réactiver à l'occasion |
anacron |
Reprise de jobs de la crontab après un crash |
crond |
Si vous ne savez pas ce qu'est une crontab, désactivez-le. |
rawdevices |
Partitions spécifique sous ORACLE ou autre SGBD |
random |
Améliore la génération aléatoire de nombres (peut être utile pour les joueurs) |
rhnd |
Redhat network |
linuxconf |
On peut utiliser linuxconf sans ce daemon (peut être est-ce utile pour l'administration à distance ?) |
nfslock |
Si vous n'êtes pas serveur NFS, désactivez-le |
usb |
Parle de lui-même |
gpm |
Fournit des fonctions pour le support de la souris en mode texte (utile pour midnight commander) |
1 - Site Esprit-Libre - Les Runlevels sous Linux et utilisation de Chkconfig - Par Salim - http://www.esprit-libre.net/configuration/level.php3
2 - Site Linux Electronique Aide - Gestion des daemons - Par Philippe - http://www.lea-linux.org