Les outils de surveillance sur les systèmes UNIX ne sont pas réservés aux initiés. Vous allez vite vous familiariser avec ces outils en vous en servant le plus souvent possible. Bien sûr, il y a des outils dont l'exécution demande des privilèges root; d'autres, par contre, peuvent être exécutés par des utilisateurs ordinaires. Ce sont ces derniers que nous allons décrire.
La commande who est peut-être la première commande que tout nouveau utilisateur UNIX doit apprendre. Elle affiche les noms des utilisateurs, les noms des ports de connexion, et les dates de login:
hvovan@dragon[43] who hvovan console Dec 8 07:57 sit pts/4 Dec 8 14:19 (nemesis)
Cette information est obtenue à partir du fichier /usr/adm/utmp (sur BSD) et elle est entretenue par les programmes init et login et la commande date. L'utilisation de l'option -u de la commande affiche plus d'informations (temps d'inactivité, PID):
hvovan@dragon[44] who -u hvovan console Dec 8 07:57 6:28 930 sit pts/4 Dec 8 14:19 0:06 2135 (nemesis)
S'il existe, un enregistrement cumulatif de tous les changements apportés à /usr/adm/utmp est conservé dans le fichier /usr/adm/wtmp. Vous ne pouvez pas lire ces deux fichiers avec un éditeur de texte. Vous pouvez toutefois utiliser la commande who -a avec le nom du fichier pour lire ces enregistrements binaires:
hvovan@dragon[48] who -a /usr/adm/wtmp ... ttymon - console Dec 7 15:08 6:31 650 id=co (sphinx) LOGIN - console Dec 7 15:08 6:31 650 hvovan - pts/4 Dec 7 15:46 0:09 784 telnet ? pts/4 Dec 7 16:32 839 sit - pts/4 Dec 8 14:19 0:09 2135 ...
La commande ps affiche l'état des processus. L'information est présentée en colonnes et comprend toujours les points suivants: le numéro d'identification du processus, le port utilisé par l'utilisateur qui a créé le processus, le temps CPU utilisé par ce processus, et le nom du fichier exécutable utilisé comme base par ce processus. Par défaut, seuls les processus appartenant à l'utilisateur qui lance la commande ps sont affichés:
hvovan@dragon[48] ps PID TTY TIME COMD 1745 pts/2 0:00 csh 2172 pts/2 0:01 ps
Sous System V, l'option -e listera tous les processus. Sous BSD, les options -ax doivent être utilisées. L'ajout de l'option -l affichera plus d'informations sur chaque processus:
hvovan@dragon[49] ps -el F S UID PID PPID C PRI NI SZ TTY TIME CMD 19 T 0 0 0 76 0 SY 0 ? 0:01 sched 8 S 0 1 0 80 99 20 185 ? 0:56 init 8 S 100 1700 1698 13 44 20 177 console 0:00 sh 8 S 100 1721 1700 80 40 20 491 console 0:01 olwm ...
La colonne PPID indique le numéro du processus père. En tuant le processus père (avec la commande kill -9 #PPID, par exemple), vous pouvez souvent envoyer le même signal à tous les processus fils. Sur les système basés sur System V, la commande ps -ef signale tout processus avec un affichage "amical":
hvovan@dragon[51] ps -ef UID PID PPID C STIME TTY TIME COMD root 0 0 76 Dec 07 ? 0:01 sched root 1 0 80 Dec 07 ? 0:56 /etc/init - root 2 0 23 Dec 07 ? 0:00 pageout root 3 0 80 Dec 07 ? 6:54 fsflush root 235 1 15 Dec 07 ? 0:00 /usr/lib/saf/sac -t 300 hvovan 1698 1694 11 07:57:22 console 0:00 /usr/openwin/bin/xinit /usr/openwin/bin/X :0 -auth /home/hvovan/.xsun.dragon
Les commandes whodo de System V et w de BSD combinent les caractéristiques de who et ps:
hvovan@dragon[52] whodo Fri Dec 8 15:18:51 EST 1995 dragon
console hvovan 7:57 console 930 0:00 csh console 1694 0:00 openwin pts/1 1739 0:00 csh console 1748 0:03 filemgr console 1699 1:42 Xsun pts/4 sit 14:19 pts/4 2135 0:00 csh
hvovan@dragon[53] w 3:19pm up 1 day(s), 4:25, 2 users, load average: 0.04, 0.07, 0.07 User tty login@ idle JCPU PCPU what hvovan console 7:57am 7:22 1:59 1:42 rlogin nemesis hvovan pts/1 7:57am 7:22 /bin/csh hvovan pts/2 7:57am 32 9 w hvovan pts/3 2:18pm 56 rlogin nemesis sit pts/4 2:19pm 1:00 -csh
Des ports utilisés pour les systèmes de fenêtres sont appelés des pseudo-ports et sont indiqués par un "p" dans le nom de périphérique.
Le noyau UNIX peut produire des rapports détaillés, appelés comptabilité des processus, sur chaque processus: la commande exécutée, l'identité de l'utilisateur, le SUID...Un utilisateur ordinaire ne peut pas exécuter les commandes de comptabilité.
En plus des fichiers de comptabilité, BSD et System V entretiennent d'autres fichiers de consignation (fichiers log).
Les systèmes BSD gardent une copie de tous les messages envoyés à la console, y compris les tentatives su réussies ou échouées, dans le fichier /usr/adm/messages. En étudiant le fichier, vous pouvez voir qui connaît votre mot de passe:
hvovan@dragon[36] more /usr/adm/messages Dec 2 13:29:50 dragon su: 'su root' succeeded for hvovan on /dev/pts/2 Dec 2 13:31:46 dragon su: 'su sit' succeeded for hvovan on /dev/pts/3 Dec 2 17:00:18 dragon su: 'su sit' succeeded for hvovan on /dev/pts/2 Dec 2 17:10:58 dragon su: 'su root' failed for hvovan on /dev/pts/4 Dec 7 10:54:10 dragon unix: panic: asynchronous memory fault: MFSR=81802040 MFAR=6792ec0 ...
Le System V n'entretient pas un fichier des messages, mais il garde un fichier de consignation des tentatives su, appelé /usr/adm/sulog:
hvovan@dragon[38] ls -l /usr/adm/sulog -rw------- 1 root root 11902 Dec 7 10:53 /usr/adm/sulog hvovan@dragon[39] su Password: # more /usr/adm/sulog SU 01/24 12:21 + console root-sys SU 01/26 10:48 - pts/2 hvovan-root ...
Après la date et l'heure, un plus ou un moins indique soit une tentative réussie soit un échec dans l'utilisation de su.
Il est utile d'apprendre qu'il y a un autre moyen pour observer un utilisateur particulier exécuter des commandes. Les shells Korn et C peuvent garder des fichiers d'historique.
Dans le cas du ksh, le fichier d'historique sert à l'édition des lignes de commandes. Si l'utilisateur a initialisé la variable HISTFILE à un nom de fichier, soit dans le fichier .profil, soit dans le fichier spécifié par ENV, alors le fichier contient un historique d'exécution de commandes de l'utilisateur. Ceci est beaucoup plus utile que la comptabilité des processus, car les commandes apparaissent avec des arguments et sont vues dans leur contexte. Pour le csh, le fichier d'historique est optionnel, et il est utilisé pour étendre l'historique aux sessions de login passées. L'utilisateur doit initialiser la variable savehist pour indiquer combien de commandes devraient être sauvegardées dans le fichier ~/.history. Ce fichier est mis à jour à partir de la mémoire associée au shell C quand l'utilisateur quitte le shell.