Administration & Sécurité des Systèmes d Exploitation 1
Chapitre 5 Administration & Sécurité des Systèmes d Exploitation Tâches d administration Syslog 2
3 Syslog: Pour quoi faire Syslogd est un daemon qui journalise les événements du système. Il faut avoir le daemon syslogd qui tourne sur votre machine pour que cela marche. Lorsque vous lancez syslog sur votre machine vous démarrez en fait le daemon syslogd et klogd, qui logue plus précisément les messages d'erreur du noyau. Vous avez donc en fait deux daemon qui tournent sur votre machine. Tous les programmes tournant sur votre machine n'utilisent pas syslog. Par exemple Squid qui place ses logs dans access.log, mais aussi le serveur apache.
4 Le principe Par défaut les fichiers de log se trouvent dans /var/log. Le fichier de configuration de syslog est dans /etc/syslog.conf. Par mesure de sécurité, il est d'usage de mettre le répertoire /var/log dans une partition propre (afin d'éviter qu'une saturation de ce répertoire n'entraîne un arrêt du système tout entier). Les fichiers de log sont les suivants : /var/log/messages est le fichier système qui récupère tout. On trouve aussi les messages des programmes qui utilisent syslog, à savoir par exemple named, sendmail. /var/log/secure Contient les informations de connexions. Chaque login y est enregistré. /var/log/maillog Contient un enregistrement du trafic de courrier entrant et sortant. /var/log/spooler Contient les messages d'erreur des daemons uucp et innd (news).
Schéma descriptif 5
L'installation Par défaut il est installé avec la plupart des distributions, mais au cas ou, peut probable ou il faut l'installer : rpm -ivh sysklogd-...rpm ( utilisez la dernière version). Normalement il est lancé au démarrage de la machine. Si cela n'est pas le cas vous pouvez le lancer avec la commande /etc/rc.d/init.d/syslog start. 6
Configuration La configuration de syslog se fait dans le fichier /etc/syslog.conf. Pensez après toute modification à faire relire ce fichier de conf (killall -HUP syslogd). Dans le fichier syslog.conf vous devez donc indiquer sur une ligne : le service le niveau de gravité et le fichier vers lequel Exemple: diriger les logs (cela peut être la console). mail.=info /var/log/messages 7
Les différentes catégories de service sont : auth ou security authpriv cron daemon ftp kern lpr mail news syslog user uucp Messages de sécurité et d'authentification. La même chose que précédemment, mais logs plus privés Messages de crontab et de at Messages systémes générés par le daemon Messages du serveur ftp Messages du noyau Messages du serveur d'impression Messages du serveur de messagerie Messages du serveur de news Messages de syslog lui-même Messages générés par le programme en cours d'un utilisateur Messages UUCP 8
le niveau de gravité du message Puis la liste de sévérité du message, classée de la moins grave à la plus grave. 7 debug Messages de debogage 6 info Messages d'information 5 notice 4 warning ou warn Messages un peu plus importants que les messages info Messages d'avertissement 3 err Messages d'erreur 2 crit Situation critique 1 alert Situation critique nécessitant une intervention immédiate 0 emerg ou panic Système inutilisable 9
Liste des priorités (par ordre décroissant) Priorité emerg Signification (emergency) : Message urgent. Le système est inutilisable ou risque de le devenir à très cours terme. alert (alerte) : Message alertant l> crit err warning (critique) : Message critique. (erreur) : Message d'erreur. (ou warn)(avertissement) : Message d'avertissement. (alerte) : Message alertant l'administrateur système qu'une action de sa part est requise. notice info debug (note) : Message de fonctionnement normal, sans gravité particulière. (information) : Message à titre informatif. (debogage) : Message de débogage. 10
Une ligne de /etc/syslog.conf se compose comme suit : facility.level<tabs> destination facility: peut prendre les valeurs suivantes : auth, authpriv, security (same as auth) cron, daemon, kern, lpr, mail, mark, news, syslog, user, uucp et local0 à local7. Level: peut prendre les valeurs suivantes debug, info, notice, warning, warn (same as warning), err, error (same as err), crit, alert, emerg, panic (same as emerg). Destination: peut prendre les valeurs suivantes : <nom de fichier absolu> : un fichier de log <nom de fichier fifo> : un programme «filtre» de logs <nom de console ou de tty> : un terminal ou une console <nom d utilisateur(s)> : toutes les consoles d'un utilisateur @nom_de_machine : une machine serveur de log * : toute personne loguée 11
On peut combiner plusieurs facility pour un même level avec la syntaxe : facility1,facility2,...,facilityn.level On peut mettre plusieurs facility.level pour une même destination en les séparant par ; facility et level peuvent être remplacé par * pour dire toutes les valeurs possibles de level ou de facility level peut être none pour indiquer que l on ne veut pas de logs de la facility qui précède. (par ex : *.crit;kern.none : tous les crit sauf ceux du kernel) Par exemple, pour que tous les messages d erreur s affichent sur le terminal 12 (console virtuelle 12), on peut inscrire : *.err /dev/tty12 12
mail.info désigne les messages issus du système de mail ayant une priorité supérieure ou égale à info, mail.=info désigne seulement les messages dont la priorité est exactement info. Inversement, mail.!=info désigne tous les messages venant du système du mail à l'exception de ceux ayant la priorité info. mail.!info désigne les messages dont la priorité est strictement inférieure à info. Les lignes suivantes représentent un bon compromis pour stocker les messages du noyau : tous les messages sont stockés dans le fichier /var/log/kernel. Les messages de priorité critique sont envoyés sur la console ainsi que sur la machine `serveur'. D'autre part, les messages d'information sont stockés à part dans le fichier /var/log/kernel-info. kern.* kern.crit kern.crit kern.=info /var/log/kernel @serveur /dev/console /var/log/kernel-info La ligne qui suit permet de stocker des messages d'information à l'exception de ceux venant du mail et des news dans le fichier /var/log/messages : *.=info;mail,news.none /var/log/messages 13
Exemple # Log tous les messages du noyau vers la console. # En plus de les envoyer sur la console on les dirige vers le fichier /var/log/kernel kern.* kern.* /dev/console /var/log/kernel # Log tous les messages dans le fichier messages à partir du niveau info # (il ne manque donc que debug par rapport au tableau précédent) *.info /var/log/messages # authpriv donne les connexions infructueuses, les connexions avec la commande su. authpriv.* /var/log/secure # Log tous les messages de mail et les place dans le fichier maillog.. mail.* /var/log/maillog 14
Autre Exemples # Log tous les messages d'urgence rendant le système instable dans tous les fichiers. *.emerg * # Log les messages uucp et news dans un fichier spécial uucp,news.crit /var/log/spooler # Dirige tous les messages vers la console 12. *.* /dev/tty12 15
Remarques divers - Si vous indiquez un fichier qui n'existe pas, syslog ne sera pas en mesure de le créer. Faites un touch /var/log/mon_fichier pour créer le fichier avant. - N'hésitez pas à utiliser plusieurs fichiers pour bien isoler les messages importants des messages normaux. - Pensez à utiliser une partition spéciale pour placer vos fichiers de log, afin d'éviter de voir votre système s'arrêter en raison d'une saturation du disque. - Pensez à vérifier que vos fichiers ne deviennent pas trop volumineux. Faites les tourner (logrotate) réguliérement. 16
Tester votre configuration Une fois votre fichier syslog.conf configuré, vous pouvez le tester en utilisant la commande logger. Logger est un utilitaire fourni avec syslog, qui vous permet d'envoyer des messages directement à syslog. logger -p ftp.info "Message pour voir". L'option -p permet d'indiquer le niveau de priorité. Par défaut user.notice Pour afficher le message envoyé par logger, on utilise: tail f /var/log/messages 17
Exporter vos logs sur une autre machine Si vous souhaitez avertir les personnes connectées via un terminal (root, user1.) sur votre serveur linux, sur les messages d'erreur du noyau, vous pouvez mettre dans le fichier /etc/syslog.conf : kern.crit root, toto, moi L'autre possibilité, et de loin la plus intéressante, est de pouvoir centraliser tous les messages de vos serveurs linux sur une seule machine. Sur la machine qui doit envoyer les messages, indiquer dans le fichier /etc/syslog.conf : kern.crit @adresse_ip_de_l autre_machine. 18
La Rotation du log : Le fichier de configuration par défaut est /etc/logrotate.conf Nous retrouvons le script de lancement automatique dans : /etc/cron.daily/logrotate Les fichiers particuliers se trouvent dans /etc/logrotate.d/ 19
La Rotation du log : Voici le contenu de mon fichier de configuration /etc/logrotate.conf : # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed compress # postfix we ll rotate here /var/log/maillog { monthly create 0664 root rotate 12 } 20