Chapitre 51. Outils d'administration système

1. La programmation de tâches
2. Donner des droits étendus à certains utilisateurs
3. Les outils de compression
4. Les outils réseau

1. La programmation de tâches

1.1. Exécuter une commande périodiquement

La cron est un programme (installé par défaut) qui est chargé de lancer d'autres programmes de manière périodique et automatique. Chaque utilisateur peut définir avec sa crontab les programmes qu'il veut lancer périodiquement. Il lui suffit d'éditer sa cron et de définir la commande et sa périodicité d'exécution.

Par exemple, je veux que mon ordinateur me réveille tous les matins à 7h12 en jouant un mp3. J'édite ma crontab :

% crontab -e

Je me retrouve alors dans vim avec un fichier vide. J'ajoute la ligne :

12 7 * * *  music123 ~/music/fichier.mp3

J'enregistre et je quitte ; les changements sont alors automatiquement pris en compte par le système.

Explications :

  1. Les 5 premiers ensembles de caractères séparés par des espaces (ici, 12 7 * * *) définissent la fréquence. Dans l'ordre, on trouve :

    • les minutes,

    • les heures,

    • le jour du mois,

    • le mois,

    • le jour de la semaine (sachant que Lundi vaut 1, Mardi vaut 2, etc.).

    Pour exécuter une commande chaque jour à 7h12, on fixe donc le champ minute à 12, le champ heure à 7, puis on met des étoiles dans les autres champs pour dire qu'il faut que ce soit exécuté tous les jours dans le mois, tous les mois et tous les jours de la semaine.

  2. Enfin, on trouve la commande à exécuter : (ici, music123 ~/music/fichier.mp3).

Quand la cron lance un programme, elle envoie par mail à l'utilisateur le texte que ce programme écrirait sur la console s'il était lancé à la main ; sauf si le programme n'a rien écrit. Pour éviter de recevoir un mail tous les matins qui me dit qu'il a bien joué mon fichier mp3, je modifie l'entrée dans la cron en renvoyant la sortie texte du programme vers /dev/null :

12 7 * * *  music123 ~/music/fichier.mp3 1>/dev/null 2>&1

Autre exemple : j'ai une connexion permanente à Internet et je veux aussi que fetchmail aille chercher mes mails tous les quarts d'heure. J'édite ma cron et je rajoute la ligne suivante :

*/15 * * * * fetchmail --silent

Explications :

  1. Les 5 premiers ensembles de caractères */15 * * * * définissent la fréquence « toutes les quinze minutes ».

  2. J'exécute fetchmail avec l'option --silent qui n'écrit dans sa sortie que les messages d'erreur ; comme ça, je ne recevrais un mail que quand le rapatriement des mails se passe mal.

1.2. Exécuter une commande à une date donnée

Par exemple, pour exécuter les commandes date puis df -h le 28 septembre 2008 à midi 42, tapez :

% at 12:42 28.09.2008

Vous voyez alors apparaître le prompt du programme at pour taper les commandes :

at> date
at> df -h

Une fois que vous avez fini de taper les commandes, utilisez la combinaison de touches Ctrl+d. Le résultat de la série de commandes, appelée job, vous sera envoyé par mail juste après leur exécution.

Pour voir la liste des jobs en attente, utilisez la commande atq. Pour annuler un job, tapez atrm numéro_du_job.

2. Donner des droits étendus à certains utilisateurs

Comme vous l'avez peut-être déjà remarqué, certaines commandes pourtant courantes ne sont accessibles qu'à l'utilisateur root, par exemple les commandes pour éteindre l'ordinateur, pour le rebooter ou encore le mettre en veille. Si cela se comprend pour un serveur, c'est souvent gênant pour un ordinateur familial. La mauvaise solution serait de donner le mot de passe root à tout le monde ; la bonne solution est d'utiliser le programme sudo qui permet au root de spécifier que certains utilisateurs ont le droit d'exécuter certaines commandes avec les droits de root.

[Attention] Attention

La configuration du programme sudo doit se faire avec attention, pour ne pas compromettre la sécurité du système. Par exemple, si vous donnez à un utilisateur le droit d'exécuter le programme /bin/sh en tant que root, alors cela revient à lui donner les droits root tout entiers, car il pourra obtenir un shell avec les droits de root. Plus subtil : si vous donnez à un utilisateur le droit d'exécuter vim un_certain_fichier en tant que root, cela revient également à lui donner les droits de root tout entiers, car il peut alors ouvrir d'autres fichiers en tant que root en tapant en mode commande :split autre_fichier ou encore exécuter des commandes shell en tant que root en tapant en mode commande :! commande_shell ; il vaut donc mieux dans ce cas changer les permissions sur le fichier en question.

Maintenant que vous êtes prévenu, vous pouvez installer le paquet :

# aptitude install sudo

La configuration se fait dans le fichier /etc/sudoers. Mais attention, il ne faut pas éditer ce fichier directement avec un éditeur de texte, mais utiliser le programme visudo, qui vérifie que vous n'avez pas fait d'erreur lorsque vous enregistrez les nouveaux réglages :

# visudo

Vous vous retrouvez alors dans un Vim normal en train d'éditer le fichier /etc/sudoers. Pour donner à l'utilisateur toto le droit d'exécuter les commandes halt, reboot et apm, rajoutez la ligne suivante :

toto	ALL = NOPASSWD: /sbin/halt, /sbin/reboot, /usr/bin/apm

Enregistrez et quittez, comme avec un Vim normal. L'utilisateur toto peut alors éteindre le système en tapant :

% sudo halt

Si vous voulez obliger les utilisateurs à re-taper leur mot de passe quand ils utilisent le programme sudo (pour être sûr que quelqu'un n'est pas en train de profiter d'une console laissée ouverte) enlevez de la ligne le mot NOPASSWD: .

Pour en savoir plus sur la syntaxe du fichier sudoers, consultez /usr/share/doc/sudo/examples/sudoers.

3. Les outils de compression

Installer les paquets

Le paquet gzip qui supporte le .gz est installé par défaut, mais ce n'est pas forcément le cas des paquets qui concernent les .bz2, .lzma, .xz et .zip :

# aptitude install bzip2 zip unzip xz-utils

Décompresser un fichier ou un arborescence

La commande à utiliser dépend de l'extension du fichier :

% tar -xf archive.tar
% tar -xf archive.tar.gz
% tar -xf archive.tar.bz2
% tar  -xf archive.tar.lzma
% tar  -xf archive.tar.xz
% gunzip archive.gz
% bunzip2 archive.bz2
% unlzma archive.lzma
% unxz archive.xz
% unzip archive.zip

Compresser un fichier

Le but de ce paragraphe n'est pas de comparer la performance des différents algorithmes de compression, mais simplement de donner les commandes :

  • pour produire un fichier d'extension .gz :

    % gzip fichier1
    
  • pour produire un fichier d'extension .bz2 :

    % bzip2 fichier1
    
  • pour produire un fichier d'extension .lzma :

    % lzma fichier1
    
  • pour produire un fichier d'extension .xz :

    % xz fichier1
    
  • pour produire un fichier d'extension .zip :

    % zip fichier1.zip fichier1
    

Compresser une arborescence

Par exemple, je veux comprimer en un seul fichier le contenu du répertoire /etc/ avec en plus le fichier /var/log/syslog :

  • pour produire un fichier d'extension .tar.gz :

    % tar -acf archive.tar.gz /etc/ /var/log/syslog
    
  • pour produire un fichier d'extension .tar.bz2 :

    % tar -acf archive.tar.bz2 /etc/ /var/log/syslog
    
  • pour produire un fichier d'extension .tar.lzma :

    % tar -acf archive.tar.lzma /etc/ /var/log/syslog
    
  • pour produire un fichier d'extension .tar.xz :

    % tar -acf archive.tar.xz /etc/ /var/log/syslog
    
  • pour produire un fichier d'extension .zip :

    % zip -r archive.zip /etc/ /var/log/syslog
    

4. Les outils réseau

Les outils réseau suivants peuvent être utiles pour résoudre un problème ou surveiller le trafic réseau (la plupart ne sont accessibles qu'en root) :

  • traceroute, qui se trouve dans le paquet du même nom, et qui permet de dessiner la route que prennent les packets pour aboutir à une machine distance ;

  • tcpdump, qui se trouve dans le paquet du même nom, et qui permet d'afficher tout le trafic qui passe par l'interface réseau ;

  • iptraf, un moniteur de trafic et de débit ;

  • les outils du paquet netdiag, qui permettent de diagnostiquer un problème de connexion.