
                              Astuces Linux HOWTO

Paul Anderson, traduit par Arnaud Gomes-do-Vale et Nat Makarvitch

   v3.6, Juin 1998 traduction du 2 janvier 1999
     _________________________________________________________________

   _Ce document contient ces astuces et rglages difficiles  trouver qui
   rendent Linux un peu plus sympathique._
     _________________________________________________________________

1. Introduction

   Ce document est le _Linux Astuces HOWTO_ (titre original : _Linux Tips
   HOWTO_), une liste de trucs et d'optimisations bien pratiques, qui
   contribuent  rendre Linux plus agrable. Tout ce qui est ici sort ou
   bien de ma tte, ou bien de l'ancien Astuces HOWTO (aprs tout,
   pourquoi enlever des astuces qui marchent ?) Alors envoyez-moi vos
   astuces prfres (NdT : en anglais !) pour que je puisse les inclure
   dans la prochaine version du Linux Astuces HOWTO.

   Paul Anderson _Rdacteur de "Linux TIPS HOWTO"_

   panderso@ebtech.net

2. Astuces simples

2.1 Un truc pratique pour syslog. _Paul Anderson, rdacteur du Linux Astuces
HOWTO_.

   Editez le ficher /etc/syslog.conf et ajoutez-y la ligne suivante :

# Tout envoyer sur tty8
*.*                                      /dev/tty8

   Attention : PENSEZ  UTILISER DES TABULATIONS ! Syslog n'aime pas les
   espaces.

2.2 Un script pour afficher les HOWTO compacts. _Didier Juges,_
dj@destin.nfds.net.

   De dbutant  dbutant, voici un petit script qui facilite la lectures
   des howto. Mes howto sont dans /usr/doc/faq/howto/ et sont compresss
   avec gzip. Les fichiers s'appellent XXX-HOWTO.gz, o XXX est le titre.
   J'ai appel le script suivant howto et je l'ai plac dans
   /usr/local/sbin/ :
       ______________________________________________________________

#!/bin/sh
if [ "$1" = "" ]; then
    ls /usr/doc/faq/howto | less
else
    gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
fi
       ______________________________________________________________

   Appel sans argument, il affiche la liste des howto disponibles. Quand
   on lui passe en argument la premire partie du nom du fichier (avant
   le trait d'union), il dcompacte le document (en laissant l'original
   intact) et l'affiche  l'cran.

   Par exemple, pour afficher le document Serial-HOWTO.gz, tapez :

$ howto serial

2.3 Reste-t-il assez de place libre ? _Hans Zoebelein,_
zocki@goldfish.cube.net.

   Voici un script qui vrifie  intervalles rguliers qu'il reste de la
   place sur tout ce qui est mont (disques durs, CDROM, disquettes...)

   En cas de pnurie d'espace libre, un message est affich  l'cran
   toutes les X secondes et un courrier lectronique est envoy pour
   chaque priphrique qui dborde.
       ______________________________________________________________

#!/bin/sh

#
# $Id: Tips-HOWTO.sgml,v 1.1.1.1 2003/01/03 02:38:54 traduc Exp $
#

#
# Depuis que j'ai t confront  des
# messages d'erreur mystrieux pendant les compilations
# quand les fichiers temporaires remplissaient mes disques, j'ai
# crit a pour tre averti avant que les disques
# ne soient pleins.
#
# Si a a empech vos serveurs d'exploser, envoyez
# les courriers de remerciement  zocki@goldfish.cube.net.
# Si votre site flambe  cause de a, dsol
# mais je vous avais prvenu: c'est votre problme
# Si vous savez vraiment vous servir de sed, excusez moi :)
#

#
# Lancez-le et vous pouvez l'oublier: mettez "check_hdspace &"
# dans rc.local. Il vrifie l'espace libre toutes les
# $SLEEPTIME secondes. Vous pouvez mme surveiller vos
# disquettes et vos bandes.  :)
# Si l'espace libre est infrieur  $MINFREE (Ko),
# le script va afficher un message d'avertissement et envoyer un
# courrier  $MAIL_TO_ME pour chaque priphrique
# concern. Ds qu'il y a  nouveau plus de place
# libre que la limite, le systme d'envoi de courrier est
# ramorc.
#

# RESTE  FAIRE:
# Des $MINFREE diffrents pour chaque priphrique
# Nettoyer les rpertoires /*tmp des vieilleries en cas de
#           pnurie d'espace.


DEVICES='/dev/sda2 /dev/sda8 /dev/sda9' # vos disques
MINFREE=20480                           # la limite
SLEEPTIME=10                            # secondes entre deux vrifications
MAIL_TO_ME='root@localhost'             # la personne  avertir


# ------- rien  changer en dessous (j'espre :) -------

MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024         # oui, on fait a bien :)

while [ 1 ]; do
        DF="`/bin/df`"
                for DEVICE in $DEVICES ; do
                ISFREE=`echo $DF | sed s#.\*$DEVICE" "\*[0-9]\*""\*[0-9]\*" "\*
## | sed s#" ".\*##`

                if [ $ISFREE -le $MINFREE ] ; then
                        let ISMB=$ISFREE/1024
                        echo  "WARNING: $DEVICE only $ISMB mb free." >&2
                        #echo "more stuff here" >&2
                        echo -e "\a\a\a\a"

                        if [ -z  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                echo "WARNING: $DEVICE only $ISMB mb free.
 (Trigger is set to $MINMB mb)" \
                                | mail -s "WARNING: $DEVICE only $ISMB mb free!
" $MAIL_TO_ME
                                MAILEDH="$MAILED $DEVICE"
                                MAILED=$MAILEDH
                                # rajoutez ce qu'il reste  faire
                                # par exemple nettoyer les */tmp
                        fi
                        elif [ -n  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                # Enlever le marqueur de courrier si
                                # l'espace disponible remonte
                                # au-dessus de la limite. Pour pouvoir
                                # envoyer un nouveau message en cas de
                                # besoin.
                                MAILEDH="`echo $MAILED  | sed s#$DEVICE##`"
                                MAILED=$MAILEDH
                        fi

                done
                sleep $SLEEPTIME

done
       ______________________________________________________________

2.4 Un utilitaire pour nettoyer vos fichiers journaux (logs). _Paul Anderson,
rdacteur du Linux Astuces HOWTO_.

   Si vous tes comme moi, vous avez une liste de diffusion avec 430
   inscrits et plus de 100 messages qui arrivent tous les jours par UUCP.
   Qu'est-ce qu'un bidouilleur peut bien faire avec ces normes fichiers
   journaux ? Il peut installer chklogs. chklogs a t crit par Emilio
   Grimaldo, grimaldo@panama.iaehv.nl, et la version 1.8 actuelle est
   disponible sur ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz.
   C'est trs simple  installer (il faut bien sr lire le contenu du
   rpertoire doc). Une fois le paquetage install, rajoutez une entre 
   votre crontab :

# Lance chklogs tous les jours  21h
00 21 * * *          /usr/local/sbin/chklogs -m

   Pendant que vous y tes, n'oubliez pas de dire  l'auteur  quel point
   vous apprciez son logiciel :)

2.5 Un script pratique pour nettoyer les fichiers core. _Otto Hammersmith_.

   Crez un fichier rmcores (l'auteur l'appelle handle-cores) contenant
   ceci :
       ______________________________________________________________

#!/bin/sh
USAGE="$0 <directory> <message-file>"

if [ $# != 2 ] ; then
        echo $USAGE
        exit
fi

 echo Deleting...
find $1 -name core -atime 7 -print -type f -exec rm {} \;

echo e-mailing
for name in `find $1 -name core -exec ls -l {} \; | cut -c16-24`
do
        echo $name
        cat $2 | mail $name
done
       ______________________________________________________________

   Et utilisez cron pour le lancer  intervalles rguliers.

2.6 Dplacement de rpertoires inter partitions Linux (filesystems). _Alan Cox,_
A.Cox@swansea.ac.uk.

(cd /rpertoire_source && tar cf - . ) | (cd /rpertoire_cible && tar xvf -)

   _[ Et pas cd /rpertoire_source; tar...etc., qui laisse la possibilit
   de bousiller un rpertoire en cas de problme. Merci  Jim Dennis,
   jim@starshine.org, qui me l'a signal. -le rdacteur ]_

2.7 Trouver les plus gros rpertoires. _Mick Ghazey_.

   Vous vous tes dj demand quels taient les plus gros rpertoires
   sur votre machine ? Voici une faon de les trouver.

du -S | sort -n

2.8 La Linux Gazette.

   Bravo et merci  John Fisk, le crateur de la Linux Gazette. C'est un
   excellent magazine en ligne, qui plus est _GRATUIT !_ Que demander de
   plus ? Vous pouvez le trouver  l'adresse :

http://www.linuxgazette.com

   Au fait, il s'avre que (1) la LG est maintenant mensuelle et (2) elle
   n'est plus maintenue par John Fisk, mais par l'quipe de SSC.

2.9 Indication permettant de rsoudre le problme pos par le VPATH du GNU make
version 3.7. _Ted Stern,_ stern@amath.washington.edu.

   J'ignore si ce problme concerne de nombreux utilisateurs mais l'une
   des caractristiques de la version 3.7 du GNU make ne m'enthousiasme
   pas. Il s'agit du comportement d'un VPATH sur rpertoire absolu. Un
   robuste patch corrige cela, vous pourrez l'obtenir auprs de Paul D.
   Smith <psmith@wellfleet.com>

     Veuillez rdiger votre courrier en anglais ! NDT

   . Ce dernier poste dans le groupe gnu.utils.bug un article contenant
   ce patch et sa documentation aprs parution de chaque nouvelle version
   du GNU make. En ce qui me concerne... il est install sur tous les
   systmes auxquels j'ai accs !

2.10 Comment interdire  ma machine de lancer fsck aprs chaque dmarrage ?
_Dale Lutz,_ dal@wimsey.com.

   Rponse : Aprs recompilation du noyau le systme de fichiers est
   considr comme non vrifi ("marked as dirty"), ce qui implique que
   fsck sera mis en action lors de chaque dmarrage. Pour viter cela
   lancer :

rdev -R /zImage 1

   Cela modifie le noyau qui, ds lors, considre que le systme de
   fichiers est sain.

   Note : Ajoutez, si vous employez LILO, read-only  la section de
   l'image de boot de votre fichier de configuration LILO (souvent nomm
   /etc/lilo/config ou /etc/lilo.conf).

2.11 Comment viter les lancements de fsck, au boot, ds au "device busy" ?
_Jon Tombs,_ jon@gtex02.us.es.

   Si votre systme connat de frquentes erreurs de type "device busy"
   au dmarrage qui laissent le systme de fichiers dans un tat exigeant
   un fsck, veuillez suivre les recommandations suivantes :

   Ajoutez, au fichier /etc/rc.d/init.d/halt ou /etc/rc.d/rc.0, la ligne

mount -o remount,ro /mount.dir

   pour tous vos systmes de fichiers monts, sauf la racine, avant
   l'invocation de umount -a. Cela signifie que si, pour une quelconque
   raison, "shutdown" ne parvient pas  tuer tous les processus puis
   dmonter les partitions ces dernires seront malgr tout considres
   comme saines lors du redmarrage. Cette astuce a considrablement
   court le temps de dmarrage de mon systme !

2.12 Comment trouver les plus gros fichiers sur votre disque dur. _Simon Amor,_
simon@foobar.co.uk.

ls -l | sort +4n

   Pour ceux d'entre vous qui sont vraiment  l'troit, a prend du
   temps, mais a marche bien :

cd /
ls -lR | sort +4n

2.13 Comment imprimer sur des pages avec marges ? _Mike Dickey,_
mdickey@thorplus.lib.purdue.edu.
       ______________________________________________________________

        #!/bin/sh
        # /usr/local/bin/print
        # Une simple sortie formate pour permettre de
        # perforer les feuilles afin de les mettre dans un classeur

        cat $1 | pr -t -o 5 -w 85 | lpr
       ______________________________________________________________

2.14 Mthode permettant de rechercher des expressions rationnelles dans des
fichiers. _Raul Deluth Miller,_ rockwell@nova.umd.edu.

   Je dsigne, par "expressions rationnelles", les regexp de "grep" et
   consorts.

   J'ai appel ce script "forall" et l'utilise ainsi :

forall /usr/include grep -i ioctl
forall /usr/man grep ioctl

   Voici le script forall:
       ______________________________________________________________

#!/bin/sh
if [ 1 = `expr 2 \> $#` ]
then
        echo Syntaxe: $0 repertoire commande [arguments]
        exit 1
fi
dir=$1
shift
find $dir -type f -print | xargs "$@"
       ______________________________________________________________

2.15 Un script pour faire le mnage derrire les programmes qui crent des
fichiers de sauvegarde.

   Voici un petit script de deux lignes qui parcourt une arborescence et
   qui y efface les fichiers de sauvegarde (# et ~) d'emacs, les fichiers
   .o, et les fichiers .log de TeX. Il compacte galement les fichiers
   .tex et README. Sur mon systme, je l'ai appel "squeeze".
       ______________________________________________________________

#!/bin/sh
#SQUEEZE efface les fichiers superflus et compacte les fichiers .tex
#et README.
#Par Barry tolnas, tolnas@sun1.engr.utk.edu
#
echo nettoyage de $PWD
find  $PWD \( -name \*~ -or -name \*.o -or -name \*.log -or -name \*\#\) -exec
rm -f {} \;
find $PWD \( -name \*.tex -or -name \*README\* -or -name \*readme\* \) -exec gz
ip -9 {} \;
       ______________________________________________________________

2.16 Comment trouver le processus qui occupe le plus de mmoire. _Simon Amor_.

ps -aux | sort +4n

   -OU-

ps -aux | sort +5n

2.17 Configuration de vi pour la programmation en C. _Paul_ Anderson, rdacteur
du Linux Astuces HOWTO.

   Je passe beaucoup de temps  programmer en C, et j'ai pris le temps de
   configurer vi pour me faciliter la tche. Voici le contenu de mon
   fichier .exrc :
       ______________________________________________________________

set autoindent
set shiftwidth=4
set backspace=2
set ruler
       ______________________________________________________________

   Qu'est-ce que a fait ? autoindent force vi  indenter automatiquement
   toutes les lignes qui suivent la premire ligne indente, shiftwidth
   impose une taille de 4 espaces pour ^T, backspace configure la touche
   d'espacement arrire, et ruler force l'affichage des numros de
   lignes. Notez que pour placer le curseur sur une ligne donne, par
   exemple la ligne 20, vous pouvez utiliser :

vi +20 monfichier.c

2.18 Utilisation de ctags pour faciliter la programmation

   Beaucoup de bidouilleurs ont dj ctags sur leur machine, mais ne s'en
   servent pas. Cela peut tre trs pratique pour diter des fonctions
   spcifiques. Supposez que vous avez une fonction dans l'un des
   nombreux fichiers sources contenus dans un rpertoire pour un
   programme que vous tes en train d'crire, et que vous voulez diter
   cette fonction pour faire une mise  jour. Appelons cette fonction
   foo(). Vous ne savez pas non plus o elle se trouve dans le fichier
   source. C'est l que ctags peut tre trs pratique. Quand vous le
   lancez, ctags cre un fichier nomm tags dans le rpertoire courant,
   qui contient la liste de toutes les fonctions, le fichier source dans
   lequel elles se trouvent et leur emplacement dans ce fichier source.
   Le fichier tags ressemble  a :
       ______________________________________________________________


ActiveIconManager       iconmgr.c       /^void ActiveIconManager(active)$/
AddDefaultBindings      add_window.c    /^AddDefaultBindings ()$/
AddEndResize    resize.c        /^AddEndResize(tmp_win)$/
AddFuncButton   menus.c /^Bool AddFuncButton (num, cont, mods, func, menu, item
)$/
AddFuncKey      menus.c /^Bool AddFuncKey (name, cont, mods, func, menu, win_na
me, action)$/
AddIconManager  iconmgr.c       /^WList *AddIconManager(tmp_win)$/
AddIconRegion   icons.c /^AddIconRegion(geom, grav1, grav2, stepx, stepy)$/
AddStartResize  resize.c        /^AddStartResize(tmp_win, x, y, w, h)$/
AddToClientsList        workmgr.c       /^void AddToClientsList (workspace, cli
ent)$/
AddToList       list.c  /^AddToList(list_head, name, ptr)$/
       ______________________________________________________________

   Pour diter, par exemple, AddEndResize() avec vim, tapez :

vim -t AddEndResize

   Cela va ouvrir le bon fichier dans l'diteur et placer le curseur au
   dbut de la fonction.

2.19 Pourquoi sendmail se bloque-t-il pendant 5 minutes au dmarrage d'une Red
Hat ? _Paul Anderson_.

   C'est un problme assez courant, presque au point d'en faire une FAQ.
   Je ne sais pas si Red Hat corrige l'erreur dans sa distributions, mais
   vous pouvez rparer a vous-mme. Si vous regardez dans votre fichier
   /etc/hosts, vous allez trouver quelque chose qui ressemble  a :

127.0.0.1        localhost        votremachine

   Quand sendmail dmarre, il fait une recherche sur le nom de votre
   machive (votremachine dans l'exemple). Ensuite, il trouve que
   l'adresse IP de la machine est 127.0.0.1; sendmail n'aime pas a et
   recommence la recherche. Il continue comme a pendant un moment avant
   d'abandonner. Corriger ce problme est trs facile : ditez votre
   fichier /etc/hosts et mettez-y quelque chose comme a :

127.0.0.1        localhost
10.56.142.1      votremachine

2.20 Comment configurer une Red Hat pour avoir ls en couleurs? _Paul Anderson,_
paul@geeky1.ebtech.net.

   La distribution Red Hat est fournie avec color-ls (ls en couleurs),
   mais je n'arrive pas  comprendre pourquoi ils ne le configurent pas
   pour utiliser les couleurs par dfaut. Voici une faon d'arranger a.

   Commencez par taper eval `DIRCOLORS`

   Puis alias ls='ls --color=auto'

   Enfin, mettez la ligne "alias ....." dans votre /etc/bashrc.

2.21 Comment trouver quelle bibliothque de /usr/lib contient une fonction
donne ? _Pawel Veselow_.

   Vous tes en train de compiler un programme et vous avez oubli de
   lier une bibliothque ncessaire? Et gcc qui ne donne que les noms des
   fonctions manquantes... Voici une commande pour trouver ce que vous
   cherchez :

for i in *; do echo $i:;nm $i|grep tgetnum 2>/dev/null;done

   Remplacez tgetnum par le nom de la fonction que vous cherchez.

2.22 J'ai compil un petit programme en C, mais quand je le lance, je ne vois
aucun rsultat !

   Vous avez compil le programme et cr un programme appel test, non?
   Linux a dj un programme test, qui teste si une certaine condition
   est vraie et qui n'affiche aucun rsultat  l'cran. Pour lancer votre
   programme test, tapez ./test.

3. Astuces dtailles

3.1 Linux et Windows peuvent utiliser une mme partition pour le swap ! _Tony
Acero,_ ace3@midway.uchicago.edu.

    1. Formater la partition sous DOS puis y disposer le fichier
       d'change de Windows. Ne pas employer Windows tout de suite afin
       de laisser ce fichier compltement "vide" pour faciliter son
       compactage.
    2. Dmarrer Linux et sauver ce fichier dans un fichier. Exemple (cas
       d'une partition de "swap" commun nomme /dev/hda8) :

dd if=/dev/hda8 of=/etc/dosswap

    3. Compacter le fichier de swap :

gzip -9 /etc/dosswap

    4. Ajouter au fichier /etc/rc la ligne suivante afin de prparer et
       installer la partition de swap lorsqu'elle est employe par Linux
       : _XXXXX reprsente ici le nombre de blocs que compte la partition
       de swap_

mkswap /dev/hda8 XXXXX
swapon -av

       Ajoutez une ligne destine  cette partiton de swap dans le
       fichier /etc/fstab
    5. Si les programmes init et shutdown employs utilisent /etc/brc
       ajouter  ce fichier les lignes suivantes :

swapoff -av
zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100

       Dans le cas contraire il vous faudra invoquer ces commandes avant
       chaque fin de session Linux (placer ces commandes dans un
       script...)

   Note : dd ne traite que 100 blocs car j'ai empiriquement dtermin que
   rien ne sert d'en crire davantage !

   >> Quels sont les avantages et inconvnients de cette mthode ?

   Avantages : gain d'espace disponible sur le disque !

   Inconvnients : si l'tape de restauration du fichier d'change
   Windows n'est pas automatique il ne faudra pas ngliger, sous Linux et
   avant chaque redmarrage "vers" Windows, de lancer les commandes
   charges de cette remise en place.

3.2 Rcupration de fichiers effacs. _Michael Hamilton,_
michael@actrix.gen.nz.

   Voici une astuce dont j'ai eu besoin  quelques reprises.

   La rcupration d'un fichier texte par une personne dsespre.

   Si vous effacez un fichier texte par accident, par exemple un courrier
   lectronique ou le produit d'une nuit de programmation, tout n'est pas
   perdu. Si le fichier a eu le temps d'aller jusqu'au disque, c'est 
   dire s'il a exist pendant plus de 30 secondes, il est possible que
   son contenu se trouve encore sur la partition.

   Vous pouvez le rechercher dans la partition en utilisant la commande
   grep.

   Par exemple, rcemment, j'ai effac un courrier lectronique par
   accident. J'ai immdiatement cess toute activit qui aurait pu
   modifier le contenu de la partition : je me suis abstenu de
   sauvegarder quoi que ce soit, de compiler quoi que ce soit, etc. En
   d'autres occasions, je suis all jusqu' passer le systme en mode
   mono-utilisateur et dmonter le systme de fichiers.

   J'ai ensuite utilis la commande egrep sur la partition : dans mon
   cas, le message se trouvait dans /usr/local/home/michael/, et donc
   d'aprs la sortie de df, dans /dev/hdb5.

   sputnik3:~ % df
   Filesystem         1024-blocks  Used Available Capacity Mounted on
   /dev/hda3              18621    9759     7901     55%   /
   /dev/hdb3             308852  258443    34458     88%   /usr
   /dev/hdb5             466896  407062    35720     92%   /usr/local

   sputnik3:~ % su
   Password:
   [michael@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x

   Je suis extrmement prudent quand je manipule des partitions, donc
   j'ai bien pris le temps de m'assurer que je comprenais la syntaxe de
   cette commande AVANT de presser la touche Entre. Dans ce cas, le
   message contenait la mot "ftp", puis un peu de texte suivi du mot
   "COL". Le message faisait une vingtaine de lignes, donc j'ai utilis
   -50 pour avoir toutes les lignes assez proches de la phrase. Il m'est
   dj arriv d'utiliser -3000 pour tre sr de rperer toutes les
   lignes d'un code source. J'ai redirig le sortie de egrep vers une
   autre partition pour viter d'craser le message que je recherchais.

   J'ai ensuite utilis la commande strings pour examiner le rsultat.

  strings /tmp/x | less

   Effectivement, le message tait l.

   Cette mthode peut ne pas tre efficace si tout ou partie de l'espace
   disque a dj t rutilis.

   Cette astuce n'est probablement utilisable que sur un systme
   mono-utilisateur. Sur un systme multi-utilisateurs avec beaucoup
   d'activit sur les disques, l'emplacement que vous avez libr peut
   trs bien dj avoir t rutilis. Et pour la plupart nous ne pouvons
   pas nous permettre d'enlever la machine de sous les pieds de nos
   utilisateurs ds que nous avons besoin de rcuprer un fichier.

   Sur mon systme personnel, cette astuce a t bien pratique  environ
   trois occasions ces quelques dernires annes - gnralement aprs que
   j'ai dtruit accidentellement une partie de mon travail du jour. Si ce
   que je fais survit assez longtemps pour progresser de faon
   significative, je le sauvegarde sur une disquette, donc je n'ai pas
   souvent besoin de ce truc.

3.3 Comment utiliser le marqueur d'immutabilit. _Jim_ Dennis,
jadestar@rahul.net.

   Utilisez le marqueur d'immutabilit.

   Juste aprs avoir install et configur votre systme, faites un tour
   dans /bin, /sbin, /usr/bin, /usr/sbin, /usr/lib et autres, et
   n'hsitez pas  vous servir de la commande "chattr +i". Appliquez-la
   aussi aux fichiers du noyau  la racine. Maintenant, "mkdir
   /etc/.dist" et copiez-y toute l'arborescence contenue dans /etc (je le
   fais en deux tapes en utilisant /tmp/etcdist.tar pour viter la
   rcursion). (Vous pouvez aussi vous contenter de /etc/.dist.tar.gz).
   Et placez-y un marqueur d'immutabilit.

   Tout cela sert  limiter les dgts que vous pouvez faire en tant que
   root. Vous viterez ainsi d'craser des fichiers avec une redirection
   mal contrle, et vous ne risquez pas de rendre le systme
   inutilisable  cause d'une espace mal place dans une commande "rm
   -fr" ; vous pouvez toujours faire trs mal  vos donnes, mais vos
   binaires et vos bibliothques seront  l'abri.

   De plus, cela prvient, ou du moins complique, l'exploitation d'un
   certain nombre de trous de scurit ; en effet, beaucoup d'attaques de
   ce type crasent un fichier au moyen d'un quelconque programme SUID
   qui _ne permet pas d'excuter une commande arbitraire_.

   Le seul inconvnient se prsente  l'installation de divers logiciels
   systme. D'un autre ct, a empche l'crasement accidentel de
   fichiers par "make install". Si vous oubliez de lire le Makefile et
   d'appliquer chattr -i aux fichiers qui doivent tre crass (et aux
   rpertoires auxquels vous voulez ajouter des fichiers), le make
   choue, et il suffit d'utiliser chattr avant de le relancer. Vous
   pouvez aussi en profiter pour dplacer vos anciens binaires,
   bibliothques et autres dans un rpertoire .old/, les renommer, les
   archiver ou autre.

3.4 Une suggestion quant  l'endroit o mettre ce que vous rajoutez.

   Tout ce que vous rajoutez doit se trouver sous /usr/local ou
   /usr/local/`hostname`!

   Si votre distribution laisse /usr/local vide, crez /usr/local/src,
   /usr/local/bin, etc. et utilisez-les. Si votre distribution met des
   choses dans /usr/local, crez /usr/local/`hostname` et donnez-lui le
   mode +w pour le groupe wheel (en plus, je le rends SUID et SGID pour
   m'assurer que les membres du groupe wheel ne peuvent toucher qu'
   leurs propres fichiers et que tous les nouveaux fichiers vont
   appartenir au groupe wheel).

   Maintenant, forcez-vous  _TOUJOURS_ placer les nouveaux paquetages
   sous /usr/local/src/.from/$OU_JE_L_AI_EU (pour les fichiers .tar ou
   autres) et  les compiler sous /usr/local/src (ou .../$HOSTNAME/src).
   Assurez-vous qu'ils s'installent sous la hirarchie locale. Si quelque
   chose *doit obligatoirement* tre install dans /bin ou /usr/bin ou
   autre, crez un lien symbolique depuis la hirarchie locale vers tout
   ce qui est install ailleurs.

   La raison de tout a, mme si a reprsente plus de travail, est que
   a permet de trouver facilement ce qui doit tre sauvegard et
   rinstall en cas de rinstallation complte depuis le mdia de
   distribution (habituellement un CD  l'heure actuelle). En utilisant
   un rpertoire /usr/local/src/.from, vous gardez aussi une trace de la
   provenance de vos sources, ce qui est utile pour trouver les mises 
   jour et qui peut s'avrer critique pour suivre les listes d'annonces
   de scurit.

   Un de mes systmes personnels (celui que j'utilise) a t mont avant
   que je n'applique moi-mme cette politique. Je ne "sais" toujours pas
   en quoi il diffre du systme de base "tel qu'install". Et cela bien
   que je n'ai chang que trs peu de choses quant  sa configuration et
   que je suis le *seul*  l'utiliser.

   A contrario, tous les systmes que j'ai mis en place au travail (o
   j'ai t bombard administrateur systme) ont t configurs de cette
   faon. Ils ont t administrs par plusieurs personnes extrieures et
   autres membres du dpartement informatique, et ils ont subi de
   nombreuses mises  jour et installations de logiciels. Pourtant, j'ai
   une ide trs prcise de ce qui a t rajout *aprs* l'installation
   et la configuration initiales.

3.5 Conversion de tous les fichiers d'un rpertoire en minuscules. _Justin
Dossey,_ dossey@ou.edu.

   J'ai remarqu quelques procdures difficiles ou superflues
   recommandes dans les trucs et astuces du numro 12

     NdT : Apparemment, cette section est tire de la Linux Gazette

   . Comme il y en a plusieurs, je vous adresse ce message.
       ______________________________________________________________

#!/bin/sh
         # lowerit
         # convertit les noms de tous les fichiers du rpertoire
         # courant en minuscules
         # n'affecte que les fichiers, pas les sous-rpertoires
         # demande confirmation avant d'craser un fichier existant
         for x in `ls`
           do
           if [ ! -f $x ]; then
             continue
             fi
           lc=`echo $x  | tr '[A-Z]' '[a-z]'`
           if [ $lc != $x ]; then
             mv -i $x $lc
           fi
           done
       ______________________________________________________________

   Voil un long script. Je n'crirais pas un script pour a ;
   j'utiliserais plutt la commande suivante :

for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`;
done;

   Ce contributeur dit qu'il a crit le script de cette faon pour des
   raisons de lisibilit (voir plus bas).

   Pour l'astuce suivante, qui traite de l'ajout et de la suppression
   d'utilisateurs, Geoff s'en sort bien jusqu' la dernire tape.
   Rebooter ? J'espre qu'il ne reboote pas  chaque fois qu'il supprime
   un utilisateur. Les deux premires tapes suffisent. De toutes faons,
   quels processus cet utilisateur pourrait-il laisser tourner ? Un bot
   IRC ? Tuez simplement les processus avec :

kill -9 `ps -aux |grep ^<nom d'utilisateur> |tr -s " " |cut -d " " -f2`

   Par exemple, pour l'utilisateur foo:

kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`

   Cette question tant classe, passons au mot de passe de root oubli.

   La solution donne dans la Gazette est la plus universelle, mais pas
   la plus facile. Aussi bien avec LILO qu'avec Loadlin, le paramtre
   "single" permet de lancer directement le shell par dfaut au
   dmarrage, sans entrer de login ni de mot de passe.  partir de l, il
   suffit de changer ou d'enlever le mot de passe problmatique, avant de
   taper "init 3" pour passer en mode multi-utilisateurs. De cette faon,
   un seul reboot ; de l'autre, deux reboots.

   Justin Dossey.

3.6 Mise  jour de Sendmail. _Paul Anderson,_ paul@geeky1.ebtech.net

   Nous partons d'une source propre. Commencez par vous procurer le code
   source de sendmail. J'ai tlcharg la version 8.9.0, qui est comme
   vous pouvez le voir  la pointe du progrs. Je l'ai rcupre depuis
   ftp.sendmail.org:/pub/sendmail/sendmail-8.9.0.tar.gz

   Il pse  peu prs un mga-octet, et sachant que j'utilise la version
   8.7.6, je crois que a vaut le cot. Si a marche, vous en entendrez
   srement parler ; sinon, je n'aurai plus de courrier et je ne pourrai
   pas distribuer la nouvelle version de ce HOWTO :)

   Maintenant que vous avez tlcharg le source, dcompactez-le. Cela va
   crer un sous-rpertoire sendmail-8.9.0 dans le rpertoire courant.
   Placez-vous dans ce sous-rpertoire et lisez les fichiers README et
   RELEASE_NOTES (et soyez poustoufl par toutes les amliorations
   qu'ils ont apportes). Maintenant, placez-vous dans src. C'est l que
   vous allez faire le plus gros du travail.

   _Une remarque au passage : Sendmail est un programme petit, puissant
   et bien crit. Le binaire sendmail lui-mme a mis moins de 5 minutes 
   compiler sur mon 5x86 133 avec 32 Mo de RAM ! La totalit de la
   compilation et de l'installation (sans compter la configuration) ont
   pris moins de 15 minutes !_

   Je n'utilise pas BIND sur mon systme, donc j'ai cherch les lignes
   suivantes :
       ______________________________________________________________

# ifndef NAMED_BIND
#  define NAMED_BIND    1       /* use Berkeley Internet Domain Server */
# endif
       ______________________________________________________________

   et j'ai remplac le 1 par un 0:
       ______________________________________________________________

# ifndef NAMED_BIND
#  define NAMED_BIND    0       /* use Berkeley Internet Domain Server */
# endif
       ______________________________________________________________

   Sur la Debian 1.3, db.h est install par dfaut dans /usr/include/db,
   au lieu de /usr/include o sendmail espre le trouver. Placez-vous
   successivement dans les sous-rpertoires src, mailstats, makemap,
   praliases, rmail et smrsh et xecutez la commande suivante :

 ./Build -I/usr/include/db

   Ensuite, cd .. et tapez make install. Voil ! La version 8.9.0 de
   Sendmail doit maintenant tre installe ! Bien sr, a suppose que
   vous avez dj votre configuration d'origine. Pour que tout marche
   bien sur mon systme, comme j'hberge des listes de diffusion
   gratuites utilisant majordomo, j'ai ajout la ligne suivante au dbut
   de mon /etc/sendmail.cf :
       ______________________________________________________________

O DontBlameSendmail=forwardfileinunsafedirpath, forwardfileinunsafedirpathsafe
       ______________________________________________________________

   Sendmail 8.9.0 est  l'heure actuelle plutt bavard  propos des
   permissions des rpertoires et des fichiers, et il va se plaindre 
   propos des rpertoires et des fichiers qui autorisent l'accs en
   criture pour le groupe ou pour tout le monde parmi les fichiers
   d'alias ou .forward. Bien qu'il ne soit pas recommand d'inhiber ces
   avertissements, je suis toujours seul  la console et j'ai trouv que
   ce trou de scurit mineur n'tait en fait pas gnant. C'est vous qui
   voyez.

3.7 Quelques astuces pour les administrateurs systme dbutants. _Jim Dennis,_
jadestar@rahul.net

   Crez et tenez  jour un fichier /README.`hostname` ou
   /etc/README.`hostname` _[ ou ventuellement
   /usr/local/etc/README.`hostname` - le rdacteur ]_

   Absolument,  compter du _premier jour_ de l'administration d'un
   systme, prenez des notes dans un fichier journal. Vous pouvez mettre
   "vi /README.$(hostname)" sur une ligne du fichier .bash_logout de
   root. Une autre faon de faire est d'crire un script su ou sudo qui
   fait quelque chose comme a :

                function exit \
                        { unset exit; exit; \
                          cat ~/tmp/session.$(date +%y%m%d) \
                          >> /README.$(hostname) && \
                          vi /README.$(hostname)
                          }
                script -a ~/tmp/session.$(date +%y%m%d)
                /bin/su.org -

   (utilise la commande tape pour crer une trace de la session et cre
   une fonction pour automatiser la mise  jour du fichier journal).

   J'admets que je n'ai pas implant cette automatisation - jusqu'
   maintenant je me suis repos sur ma discipline. Cependant j'ai
   envisag l'ide (au point d'crire les scripts et les fonctions que
   vous avez sous les yeux). Une chose qui me retient est la commande
   "script" elle-mme. Je pense qu'il va falloir que je me procure les
   sources et que je rajoute une paire de paramtres (pour arrter
   l'enregistrement du script depuis la ligne de commandes) avant de me
   mettre  utiliser a.

   Ma dernire suggestion (pour cette fois) :

   La variable PATH de root devrait contenir PATH=~/bin.

   C'est tout. Rien d'autre dans le PATH de root. Tout ce que root peut
   faire est fourni par un lien symbolique dans ~/bin, un alias, une
   fonction shell, un script ou un binaire situ dans ~/bin, ou bien la
   commande est tape avec un chemin d'accs explicite.

   De cette faon, toute personne utilisant le compte root se rend compte
   (parfois douloureusement)  quel point elle fait confiance aux
   binaires. L'administrateur avis d'un systme multi-utilisateurs va en
   plus parcourir rgulirement son rpertoire ~/bin et ses fichiers
   ~/.*history pour y chercher des rptitions et des moyens de les
   contourner.

   L'administrateur vraiment motiv va reprer les enchanements qui
   peuvent tre automatiss, les endroits o des vrifications peuvent
   tre ajoutes, et les tches pour lesquelles les privilges de root
   peuvent tre abandonnes (comme lancer un diteur, un agent de
   transport de courrier lectronique ou autre gros programme pouvant
   excuter des scripts qui *pourraient* tre inclus dans des fichiers de
   donnes - comme vi (./.exrc) ou emacs (./.emacs) ou mme, plus
   insidieux, $EXINIT et les macros contenues au dbut ou  la fin des
   documents). Bien sr, les commandes de ce genre peuvent tre lances
   avec quelque chose comme a :

                cp $donnes $rpertoire_utilisateur/tmp
                su -c $commande_d_origine $paramtres
                cp $rpertoire_utilisateur/tmp $donnes

   (... o les dtails dpendent de la commande).

   Ces dernires prcautions sont pour la plupart superflues pour la
   machine personnelle ou la station "mono-utilisateur". Mais elles
   reprsentent une trs bonne manire d'administrer un gros systme
   multi-utilisateurs, particulirement dans le cas d'un accs public
   (comme les machines de netcom).

3.8 Comment configurer xdm pour qu'il permette de choisir le systme hte ?
_Arrigo Triulzi,_ a.triulzi@ic.ac.uk.

    1. Modifier le fichier lanant xdm lors du dmarrage (probablement
       nomm /etc/rc/rc.6 ou /etc/rc.local) de faon que la section de
       xdm contienne :

/usr/bin/X11/xdm
exec /usr/bin/X11/X -indirect hostname

    2. Modifier le fichier /usr/lib/X11/xdm/Xservers et commenter la
       ligne invoquant le serveur sur la machine locale (commence par
       "0:")
    3. Relancer le systme... tout doit fonctionner !

   J'ajoute cette section aprs avoir su une semaine durant sur ce
   problme !

   Attention : certaines anciennes versions de la distribution SLS
   (1.1.1) exigent qu'un paramtre "-nodaemon" accompagne l'invocation
   d'xdm. Les version ultrieures ne prsentent _PAS_ cette
   caractristique.
