Skip to topic | Skip to bottom
Home
Sysadmin
Sysadmin.FrenchDraft1Adminr1.1 - 10 May 2005 - 20:23 - RomainChantereautopic end
You are here: Sysadmin > FrenchDraft1Admin

Start of topic | Skip to actions
Formation administration

Formation administration

les Logs

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

logrotate

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

weekly ou daily ou monthly:
Intervalle, ici hebdomadaire.
rotate 4:
Nombre de tomes à conserver, ici 4. Le dernier fichier aura le suffixe .4. Donc une mémoire de quatres semaines.
compress:
Demande la compression des tomes.
missingok:
Ne panique pas s'il manque le fichier à traiter.
postrotate ... endscript:

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.

cron

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)

Apache

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)

date

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:

date --date "yesterday":
hier
date --date "2 days ago":
Il y a deux jours
date --date "last year":
L'année dernière

Pour plus d'information: man date

ménage

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.

Variables bash

HISTSIZE:
le nombre maximal de commande dans le fichier d'historique
HISTFILESIZE:
le nombre maximal de lignes dans le fichier d'historique
HISTFILE:
le chemin vers le fichier historique

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 wink ) 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.

.bash_profile:
fichier d'initialisation lorque le bash est appellé lors d'un login (par exemple lorsqu'on se loggue en console, en ssh, en su - utilisateur)
.bashrc:
fichier d'initialisation lorsque le bash est appellé ailleurs que dans un login (par exemple un script ou un terminal X).

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

Modlogan

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.

RCS (revision control system)

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

Accès à distance par SSH depuis GNU Linux

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


to top

You are here: Sysadmin > FrenchDraft1Admin

to top

Copyright © 1999-2008 by the contributing authors.
All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding this tool? Send feedback (in English, Francais, Deutsch or Dutch).