Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for August, 2007

Niveau :      
Résumé : vmstat ; iostat ; pmstat ; ifstat ; dstat

Vous voulez connaître l'état de votre machine, les performances et les consommations de ressources. Il existe un grand nombre d'outils à votre disposition :

Vmstat (virtual memory)

Affiche les statistiques d'utilisation de la ram, du swap, des entrées/sorties, du scheduler et du processeur.

# affichage en continu toutes les 2s
$ vmstat 2

swpd : memoire passée dans la swap
free : mémoire disponible
buff : mémoire utilisée dans des buffers
cache : mémoire utilisée dans des caches
-> si problème augmenter la ram ou à défaut la swap

si : quantité de swap lue
so : quantité de swap écrite
-> si problème augmenter la ram

bi : nombre de blocs lus sur le disque
bo : nombre de blocs écrits sur le disque
-> si problème optimiser le processus qui utilise le disque

in : nombre d'interruption matérielles et logicielles
-> si problème, matériel chargé ou abimé
cs : nombre de changement de contexte (de processus)
-> si problème, trop de processus, augmenter le nombre de cpu ;-)

us : proportion du temps processeur utilisée en userland
-> si problème, code à optimiser (probablement normal)
sy : proportion du temps processeur utilisée dans le noyau
id : proportion du temps processeur inutilisé
wa : proportion du temps processeur perdu en attente d'i/o
-> si problème, attention réseau ou disque

Vmstat dispose aussi de nombreuses autres options pour qu'il se comporte comme les commandes qui suivent. Le man vous donnera plus de détails.


continue reading...

Niveau :      
Résumé : hdparm ; danger

Tout le monde sait qu'il est possible de faire du hotplug disque avec du scsi. C'est prévu, du point de vue du système et du matériel. Il suffit juste que le disque ne soit pas utilisé lorsqu'on le débranche, c'est-à-dire que ses partitions sont démontées. D'un point de vue physique, il est préférable d'avoir des connecteurs sca (80 broches) pour faciliter la chose.

Pour ce qui est des disques ide, rien n'a été prévu. Mais cela n'est pas impossible. Il s'agit de désactiver le disque dans le noyau, puis de désactiver le contrôleur. Et on le réactivera par la suite.

Attention, tout ce qui suit est à tester à vos risques et périls. Il il y a peu de chance que vous perdiez votre disque (même si cela peut arriver), mais il est plus probable que vous perdiez votre carte mère (le contrôleur ide), voire quelques données. Pour ma part, je n'ai jamais rien grillé, mais ça n'a pas fonctionné à tous les coups.

Notez qu'il existe plusieurs techniques. Soyez prudents !

# on démonte les partitions utilisées
$ umount /dev/hdb1
# on éteint le disque
$ hdparm -Y /dev/hdb # si votre disque ne se réveille pas après le rebranchement, supprimer
# on coupe le bus (on peut aussi essayer sans si la réactivation ne fonctionne pas)
$ hdparm -b 0
# on enlève le disque
# et on en remet un autre si besoin
# on remet le bus en activité
$ hdparm -b 1
# teste la lecture de quelques octets
$ dd if=/dev/hdb of=/dev/null count=1
# si ça ne marche pas, il ne vous reste qu'une solution avant le reboot
$ hdparm -w /dev/hdb # attention, jamais testé !
# et enfin relecture des partitions
$ hdparm -z /dev/hdb

Si votre nouveau disque est plus grand que l'ancien, il se peut que vous ayez des problèmes d'accès aux données en fin de disque.

Notez qu'une autre technique existe, on peut remplacer les hdparm -b par :

# on désactive l'interface ide
$ hdparm -U /dev/hdb
# et on la réactive
$ hdparm -R /dev/hdb

Attention, cela coupe l'interface ide et donc les 2 disques de la même nappe.

Niveau :      
Résumé : export DISPLAY= ; ssh -X ; vnc ; freenx

Vous voulez un accès graphique distant à une machine ? Vous avez le choix entre plusieurs solutions. Quelques exemples ont déjà été proposés ici.

Affichage distant avec $DISPLAY

Destiné à une nouvelle application.

$ export DISPLAY=mamachine:0
$ xclock

Avantages :

  • facile et rapide
  • disponible sur tous les unix
  • possibilité d'un filtrage avancé avec xfwp

Inconvénients :

  • besoin d'avoir le port 6000 ouvert et le serveur X local en écoute (pas d'option -nolisten tcp)
  • données transitant en clair

Affichage distant à travers ssh

Destiné à une nouvelle application.

$ ssh -X distant.net
$ xclock # réutilise la connexion ssh

Avantages :

  • facile et rapide
  • données chiffrées
  • pas besoin de toucher au firewall
  • compression possible

Inconvénients :

  • unix only (ou presque)

continue reading...

Niveau :      
Résumé : socat

Vous connaissez le pipe et le pipe nommé pour rediriger des données d'un programme vers un autre. Dans l'histoire d'Unix le pipe a précédé la socket qui elle est bidirectionnelle. On peut la considérer comme la somme de 2 pipes. Tout ceci a été rendu générique et puisque tout ceci fonctionne à travers la même API (les file descriptors), il devrait être simple de remplacer une chose par une autre. Et c'est ce que nous permet socat.

Socat permet de rediriger un flux mono ou bi directionnel vers un autre flux mono ou bi directionnel. Ceci inclue les pipe, les fichiers, les file descriptor ouverts, les terminaux, les socket ipv4, ipv6, tcp, udp, unix ...

Quelques exemples d'équivalents avec les outils existants :

$ nc toto.fr 80
$ socat - TCP4:toto.fr:80,crnl
$ cat fichier
$ socat FILE:fichier -
$ cat > fichier
$ socat -u - FILE:fichier,creat=1
$ openssl s_client -connect wws.toto.fr:443
$ socat - SSL:wws.toto.fr:443,crnl,verify=0

Passons à plus évolué.

Un tunnel pas cher (ne marche que pour une connexion) :

$ socat TCP4-LISTEN:1022 TCP4:machine.toto.fr:22

Un tunnel un peu plus évolué :

$ socat TCP4-LISTEN:1022,reuseaddr,fork TCP4:machine.toto.fr:22

Un tunnel passant à travers un proxy :

$ socat TCP4-LISTEN:2022,reuseaddr,fork PROXY:proxy:machine.toto.fr:22,proxyport=3128,proxyauth=user:pass

Rendre une commande shell accessible à distance (utile hein !) :

$ socat TCP4-LISTEN:1234,reuseaddr,fork 'SYSTEM:/bin/cat /home/infos.txt'

Un logger distant :

$ socat -u TCP4-LISTEN:1234,reuseaddr,fork OPEN:/var/log/net.log,creat,append

Sécuriser un serveur :

$ socat OPENSSL-LISTEN:443,reuse‐addr,pf=ip4,fork,cert=server.pem,cafile=client.crt TCP4-CONNECT:localhost:80

Notez que socat dispose de nombreuses options pour chaque type de flux. Le man est très complet et vous sera d'une aide précieuse. Vous n'êtes plus maintenant limités que par votre imagination.

Comme disait le célèbre romain Proverbus : Adauces fortuna juvat.

Niveau :      
Résumé : bugs, failles, buffer overflow, fuite d'information, format string, race condition

En tant qu'admin, vous vous devez de connaître les différents types de faille pour savoir quel est le potentiel de risque associé à chacune de vos actions. Qu'est-ce donc qu'une faille de sécurité ?

C'est une erreur dans un système qui permet d'en obtenir des informations confidentielles, un accès non autorisé ou éventuellement d'arrêter un système. Elles peuvent être dûes à des erreurs de programmation, ou à des erreurs d'administration.

Droits

Dans un système unix, les failles causées par un sysadmin sont la plupart du temps des problèmes de droit d'accès permettant une fuite d'information. Par exemple des fichiers sensibles non protégés et accessibles par apache, un fichier de mot de passe lisible ou des propriétaires/groupe/droits mal prévus sur une machine avec de nombreux utilisateurs.

Il s'agit ici surtout de faire attention à chacune de vos actions impliquant un droit, c'est à dire tout ce qui est lié à de nouveaux utilisateurs ou à des changement dans des droits d'accès.

Flood

Certains problèmes de conception permettent de faire tomber un service ou un système facilement. La faille la plus connue à ce sujet est la fork bomb qui qui ne fait que duppliquer son processus jusqu'à ce que le système tombe à court de processus. En shell (à vous de chercher comment elle se lit) :

$ :(){ :|:& };: 

Certaines requêtes distantes peuvent aussi mener à des calculs extrêmements longs et mis à disposition de tout un chacun. Un personne interrogeant ce service plusieurs fois peut l'écrouler facilement. Attention donc à bien protéger votre code s'il autorise l'utilisateur à spécifier une recherche puissante par exemple, évitez qu'il puisse rentrer des expressions trop complexes.

Bugs

Il peut aussi s'agir d'une erreur de programmation. Il existe deux façons de les exploiter. Soit distante, sur une machine à laquelle vous n'avez pas accès, soit locale en cherchant à s'octroyer des droits supplémentaires.


continue reading...

Niveau :      
Résumé : hdparm -tT ; blktool

Si vous avez des performances un peu mauvaises, il se peut que cela soit dû à votre disque dur.

Pour en avoir le coeur net, mesurez ses performances :

$ hdparm -tT /dev/hda

Le -t teste le disque tandis que le -T teste l'accès disque avec cache (en gros la vitesse de la RAM). Pour un disque IDE (ou sata) une vitesse de 50Mo/s est acceptable (comptez plutôt 30 pour un ordinateur portable).

Si votre disque est particulièrement lent en cas de charge de la machine, il se peut que le dma ne soit pas activé. Pour le vérifier :

$ hdparm -d /dev/hda

Pour le forcer :

$ hdparm -d1 /dev/hda

Tout ceci est bien joli, mais ancrons nous dans la modernité, un nouvel outil est apparu et a vocation à remplacer hdparm et à étendre ses fonctionnalités : blktool. Malheureusement blktool ne sait pas encore mesurer le taux de transfert (entre autre), par contre il est plus lisible. Voici quelques exemples d'équivalents :

# activation du dma
$ hdparm -d1 /dev/hda
$ blktool /dev/hda dma on 
# relecture de la table des partitions (aucune partition ne doit être monté
$ hdparm -z /dev/hda
$ blktool /dev/hda reread-part
# passage du disque en mode economie d'energie (attention, cela ne sert a rien si le disque est utilisé et que noflushd n'est pas présent)
$ hdparm -y /dev/hda
$ blktool /dev/hda standby
# changement du niveau de gestion du bruit du disque (plus il est bruyant et plus il est rapide et inversement)
$ hdparm -M 128 /dev/hda
$ blktool /dev/hda acoustic-mgmt 128  #nombre entre 128 et 254

Niveau :      
Résumé : moreutils

Exécuter une commande inline sur un fichier à travers un pipe

$ grep "crève pourriture communiste" fichier | sponge fichier

Car vous savez que la commande suivante ne marche pas (le fichier serait ouvert en écriture et vidé avant de pouvoir être lu par grep)

$ grep "un pull over ca moule" fichier > fichier

Rediriger une commande dans un fichier ET dans la sortie standard (utile pour débugger une suite de pipe). Utilisez l'option -a pour ajouter à la fin du fichier de logs plutôt que le remplacer :

$ echo "mazout ne pas se jeter dedans" | tee -a /var/log/peur

Envoyer une commande sur 2 autres (ici utilisé comme équivalent de tee)

$ echo "- un serial killer - un quoi ?" | pee "cat" "cat >> /var/log/peur"

Debugger une chaine de commande en pipe (un editeur s'ouvre ($EDITOR) et vous permet d'éditer tout le contenu du pipe)

$ echo -e "plic plocnplic plocnmiaou" | vipe | grep -v miaou

Je vous ai parlé de la commande comm, voici la même chose en mieux car plus simple à comprendre :

$ combine ./dansons xor ./carioca
# opérations disponibles : and, or, not (en réalité and not) et xor

Surveiller la progression d'une commande (commande du paquet pv), vous avez une barre de progression universelle ici :

$ tar c ~/tapette_geante | pv -ptr | gzip > commissaire.tgz

Si vous connaissez la taille des données, vous pouvez avoir une barre de progression plus précise

$ tar c ~/tapette_geante | pv -ptre -s `du -sb ~/tapette_geante` | gzip > commissaire.tgz

Mieux, pv permet de limiter le débit de ce qui passe à travers un pipe

$ echo 'Barrez-vous cons de mime !' | pv -q -L 5