les logiciels ont 2 manières de loguer : soit ils générent leurs journaux qui rendent compte de leurs activités, soit ils sous-traitent au démon syslog. Généralement les journaux sont enregistrés dans /var/log
-avec syslog sous traitant ligne par ligne qui permet d'enregistrer dans /var/syslog ou l'écrire dans un fichier spécifique ou les deux.
-sans syslog Le fichier journal est écrit directement.
Un fichier journal peut vite devenir très gros si le programme qui écrit est très actif. le programme utilisera toujours le même fichier journal, il peut être intérressant d'archiver par période ou par taille
Programme lancé quotidiennement par défaut qui permet de séparer le journal en nombre fixe de tomes, par jour, par semaine ou par mois, la configuration de base est dans /etc/logrotate.conf
Logrotate déplace le fichier journal en lui rajoutant le suffixe .1 et renomme les précédents en ajoutant 1 à leur suffixe (.2, .3, etc...).
il définit les options par défaut et déclare les fichiers à séparer et la règle à suivre:
/chemin_absolu/fichier {
paramètre1
paramètre2
...
}
des paramètres possibles sont (cf man logrotate),
Commandes à effectuer après le traitement. Par exemple:
postrotate /etc/init.d/acpid restart >/dev/null* endscript
relance le démon acpid (dans cet exemple) pour qu'il génère un nouveau journal.
Afin de ne pas avoir trop de déclaration dans le même fichier, il est possible de les séparer dans des fichiers différents (généralement portant le nom de l'application). Ces fichiers sont par défaut dans le répertoire /etc/logrotate.d.
le démon cron se charge de lancer logrotate tous les jours.
la configuraton de cron se fait dans /etc/crontab une ligne par règle suivant cette syntaxe
minutes heures jourdumois mois jourdelasemaine propriétaire commande par exemple,
tous les 12h01 du 2/04 lorsque celui est Troisieme jour de la semaine, la commande est lancée en tant que 'user':
1 12 2 4 3 user commande
toutes les minutes de la 12ème heure du 02/04 lorsque celui est le troisième jour de la semaine:
* 12 2 4 3 user commande
Tous les 3ème jours de semaine tous les 2 mois à 12h01:
1 12 * */2 3 user commande
un fichier contenant beaucoup de règles peut être difficile à lire, on peut donc séparer les commandes en plusieurs fichiers, avec par exemple cette règle
25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
cette règle éxecute en root tous les fichiers executables contenus dans le repertoire /etc/cron.daily tous les jours à 6h25 c'est là que l'on trouve les scripts logrotate. (chmod +x fichier pour les rendre exécutables)
Généralement Apache gère son journal de deux manières, soit en l'ecrivant lui même soit en transmettant ses lignes à un programme. Quand apache écrit lui même le fichier, alors il faut lui dire de prendre en compte le nouveau fichier journal et le relancer. s'il sous traite à un programme et n'y a pas besoin de lui dire.
Cronolog est un programme qui permet de créer des tomes oblitérés (si souhaité) avec une précisions à la seconde. La ligne de configuration d'apache permettant de paramétrer une journalisation, dans /etc/apache/httpd.conf:
CustomLog? destination format
destination peut être soit un nom de fichier, soit l'appel à une commande généralement précédée par un tuyau (pipe: '|') par exemple avec cronolog
CustomLog? "|cronolog --delay '5 hours' /var/log/apache/access-%d%m%y.log" combined
créé un nouveau fichier tous les jours à 5 heures Avec cette commande, les fichiers sont créés indéfiniement, il faut donc faire le ménage régulièrement. On va utiliser cron pour la tâche périodique et date pour obliterer. on ne sert plus de logrotate pour apache, on supprime donc /etc/logrotate.d/apache (ou on commente toutes les lignes de ce fichier)
la commande date permet d'afficher une date. la commande 'date' sans argument affiche la date courante. la commande 'date +"expression"' affiche la date courante selon l'expression. En voici un exemple, lancé le 28 avril 2005:
# date +"%d%m%y" 280405
on peut préciser une autre date que la date courante avec le paramètre "--date". Ce paramètre est très proche de l'anglais humain:
Pour plus d'information: man date
il s'agit de supprimer le fichier d'une certaine date. pour cela, il suffit d'écrire un script lancé périodiquement. par exemple:
#!/bin/sh FICHIER=`date --date "ladate" +"/var/log/apache/access-%d%m%y.log"` /usr/bin/chattr +s $FICHIER 2> /dev/null /bin/rm -f $FICHIER
tout commande entourée par "`" est substituée par son résultat. ce résultat est ici enregistré dans la variable FICHIER. l'attribut s (man chattr) est affecté a ce fichier pour être sûr qu'il soit bien supprimé. ce fichier est ensuite supprimé. Ce script reste discret si le fichier n'existe pas. en prenant les paramètrages d'exemple, il y a 1h25 de trop qui est gardée au moment ou cette commande est éxecutée.
pour ne pas avoir d'historique des commandes, ces simples commandes suffisent:
export HISTSIZE=0 export HISTFILESIZE=0 export -n HISTFILE
ce qui met le nombre maximal de commandes à 0, le nombre maximal de ligne
dans le fichier à 0 (est ce vraiment nécessaire
) et ensuite oublie le
nom du fichier historique (ça aurait pu être fait avec la commande "unset
HISTFILE"
Pour que ces commandes soient executées à chaque connexion, il suffit de les rentrer dans le .bashrc de préférence si celui ci est appelé dans le .bash_profile, sinon dans les deux.
Pour inclure le .bashrc dans le .bash_profile c'est avec une instruction "source". le mainteneur du paquet debian concerné propose une inclusion conditionnelle commentée par defaut telle que:
# include .bashrc if it exists if [ -f ~/.bashrc ]; then . ~/.bashrc fi
On utilise modlogan pour les statistiques du site. il y a un script qui permet de les générer (/var/modlogan-scripts/do_modlogan_on.sh) qui prend en paramètre le fichier journal à traiter.
on va créer une tâche cron qui va lancer ce script tous les jours:
#!/bin/sh FICHIER=`date --date "yesterday" +"/var/log/apache/access-%d%m%y.log"` /var/modlogan-scripts/do_modlogan_on.sh $FICHIER
comme le cron quotidien par defaut est lancé à 6h25, et que cronolog sépare les tomes à 5 heures, le fichier d'hier correspond au fichier à traiter parceque celui du jour ne contient que 1h25.
Comme plusieurs personnes administrent la machine, il est important de controler les modifications d'un fichier de configuration. le but ici n'est pas de fliquer les administrateurs, mais seulement de savoir quand et pourquoi un fichier a été modifié, et non qui l'a fait. Cela implique donc d'indiquer à ce système quand un fichier est en travaux (check out), et ensuite de lui remettre son travail (check in, commit). 1. préparation de l'édition: co -l fichier 2. Edition du fichier 3. Remise du fichier : ci -u fichier
co -l récupère la dernière version du fichier et verrouille pour un travail exclusif ci -u remet le fichier au système, celui vous demande un journal des modifications (une description du travail) et déverouille le fichier.
pour éviter de polluer le répertoire du fichier de travail avec les fichiers de contrôle du RCS, il est recommandé d'y créer un répertoire "RCS" par exemple pour un travail sur les fichiers de configuration de MySql?
cd /etc/mysql co -l my.cnf $EDITOR my.cnf ci -u my.cnf
L'authentification se fait par le système de clés SSH, Il faut donc générer son couple de clés privée/publique
sur la machine de l'utilisateur (toto) à autoriser:
ssh-keygen -b 2048 -t rsa (rentrer la passphrase quand demandé)
cette commande va créer la paire de clés (id_rsa et id_rsa.pub) dans son dossier ~/.ssh
on va ensuite copier la clé publique ( ~/.ssh/id_rsa.pub ) sur indy, (dans /tmp , en attendant que le compte soit créé)
création du compte toto sur indy:
sudo adduser toto
Le premier mot de passe demandé est celui de l'utilisateur qui effectue la création du compte (du fait du sudo) Entrer et confirmer ensuite le mot de passe de toto, les réponses pour les infos persos (adresse etc.) sont optionnelles...
sudo mkdir ~toto/.ssh (pour créer le repertoire .ssh de toto)
sudo mv /tmp/id_rsa.pub ~toto/.ssh/authorized_keys (on déplace la clé publique dans ~toto/.ssh/ en la renommant authorized_keys)
sudo chown toto.toto -R ~toto/.ssh (pour rendre toto propriétaire de son repertoire .ssh)
sudo visudo (pour permettre à toto l'utilisation de sudo en calquant un utilisateur déjà existant)
toto peut maintenant se connecter depuis sa machine:
ssh paris.indymedia.org (taper yes à la première connexion et saisir la passphrase)
( à compléter avec methode putty si toto utilise Window$ )