Misfu, le site des cours Informatique/Bureautique/Mathematiques


 

Gestion des services et des daemons sous Linux

Gestion des services


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/ start

/etc/rc.d/init.d/ stop

/etc/rc.d/init.d/ restart

/etc/rc.d/init.d/ status


ou plus simplement en tapant :


service start ou stop...


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.


Notion de runlevel ou niveau d'exécution


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/ S##


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.


Utilisation de chkconfig


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 on/off


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 ;-)


Un exemple de daemon : /etc/rc.d/init.d/crond


#! /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 $?



Faire du ménage


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)



Bibliographie


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



Par l'équipe technique A.N.F.A