Aller au contenu

Linux Attitude

Le libre est un état d'esprit

Niveau :      
Résumé :

Aujourd'hui un thème un peu polémique mais pas trop quand même.

Le XML est un descendant du SGML. C'est un format structuré de données comme l'est l'ASN1 ou le LDIF.

Tous ces formats ont été inventés dans une seule optique : être facile à parser par une machine. Et pourtant quand on voit les subtilités du XML et les difficultés à faire un parseur, on peut avoir des doutes... Mais de ce fait ils sont peu lisibles.

Ne vous méprenez pas, le XML a tout à fait sa place dans les échange de données, dans la communication entre machines. Le format est bien défini et fonctionne quel que soit le type de machine. Il est d'ailleurs très utilisé car on trouve des parseurs partout, dans presque tous les langages, et dans presque tous les frameworks.

Mais à force d'en user on en abuse.

Non le XML n'est PAS fait pour les humains ! Le xml n'est pas à sa place dans les fichiers de configuration, à moins que vous n'ayez pour objectif que l'utilisateur ne touche jamais à ces fichiers et que vous ayez le temps de développer une interface entre l'utilisateur et la modification (texte ? graphique ? sonore ?).

Le XML est pratique car il permet au développeur d'éviter l'usage de protocoles binaires incompréhensibles et mal parsés entre deux applications. Il est pratique car un autre développeur peut lire ce protocole sans l'avoir appris. Mais vous remarquerez que je ne parle que de développeurs, pas d'utilisateurs.

Alors par pitié arrêtez le XML dans les fichiers destinés aux HUMAINS. Il existe bien d'autres formats ayant des parseurs et tout aussi lisibles :

Mieux, il existe LUA qui vous permet à la fois d'avoir un fichier de configuration simple et lisible, mais qui en plus autorise l'utilisateur à faire des choses que vous n'auriez pas prévu, comme des configuration conditionnelles !

Niveau :      
Résumé :

Maintenant que nous savons nous servir d'un interpréteur postscript, nous allons pouvoir développer. Postscript est un langage complet au sens de Turing. C'est à dire qu'on peut tout faire avec, même faire décoller une fusée. Mais bon, avant d'en arriver là, on va essayer de faire quelque chose d'utile.

Pour vous présenter le langage, je vous propose un exemple basé sur la fourmi de Langton. C'est une fourmi qui a ceci de particulier qu'elle ne sait que tourner. Son univers ressemble beaucoup à celui du jeu de la vie, c'est-à-dire une grille infinie de cases noires ou blanches. Lorsque la fourmi est sur une case noire, elle tourne à droite, lorsqu'elle est sur une case blanche, elle tourne à gauche. De plus elle inverse la couleur de la case sur laquelle elle se trouve.

Le concept est assez simple, et lorsqu'on lance la fourmi sur une grille blanche, son comportement a l'air aléatoire. Et pourtant au bout d'un moment elle fabrique ce qui ressemble à une autoroute.

Tout ça pour dire que le postscript c'est bien. C'est un langage à pile, qui fonctionne en notation inversée. Les possesseurs de HP48 et amateurs de RPL y retrouveront leurs petits (ou de vieux souvenirs). Les développeurs forth (faite sous savoir si vous êtes dans la salle) apprécieront aussi probablement.

La base

Les commentaires

Toute ligne commençant par un % est un commentaire. Exemple :

% Rien

Les commandes

Les commandes sont des mots simples. Étant donné la notation inversée, la commande se trouve après ses arguments. Par exemple une addition :

5 9 add

A cette notation est associée une pile. 5 pose 5 sur la pile, 9 pose 9 sur la pile, add retire les 2 derniers éléments (donc 9 et 5) puis additionne et repose le résultat sur la pile. D'où la représentation de la pile :

    %avant la ligne de commande
5   % 5 
5 9 % 9
    %pendant le add (invisible)
14  % après le add 

Les commandes peuvent être séparées par des espaces ou des retours à la ligne.


continuer la lecture...

Niveau :      
Résumé :

Savez-vous vraiment utiliser postscript ?
Savez-vous ce qu'est postscript ?

Postscript est avant tout un langage, relativement complet. Ce langage se destine à l'affichage et à l'impression. Il contient donc de nombreuses primitives pour l'affichage, principalement vectoriel. Mais rien ne vous force à l'utiliser pour ça. Il existe bien des gens qui utilisent php pour faire des scripts d'administration ...

Interprétation

Le postscript s'interprète, les imprimantes sont donc des interpréteurs postscript, ce qui veut dire qu'on peut les programmer comme on veut. Il existe bien des gens qui programment leur carte graphique pour faire du calcul parallèle ...

Apprenons donc à interpréter un fichier nommé toto.ps :

# technique simple pour en faire un pdf
$ ps2pdf toto.ps

# ancienne technique chamane qui passe par l'imprimante
$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr toto.ps

Vous pouvez aussi passer par l'interface de cups à la place de lpr.

Notez bien qu'ici l'interpréteur est ghostscript (gs) et qu'on a du spécifier le type d'imprimante, type qu'on n'a pas choisi au hasard. Pour avoir la liste des imprimantes supportées, tapez :

$ gs -help

Et lisez bien la liste vous verrez des bizarreries comme jpeg, png256, bmpgray ... Ce ne sont pas vraiment des imprimantes, donc vous devinez bien qu'il est donc possible de convertir très facilement un fichier postscript en image jpeg (enfin la première page en tout cas) :

$ gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=fichier.jpg toto.ps

Pour avoir les autres pages et la résolution de l'image, voici la commande :

# scriptez le si ca vous sert
$ gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -r72 -sOutputFile=fichier-%d.jpg toto.ps

Un peu plus de détail sur les paramètres et les sorties possibles ici : http://pages.cs.wisc.edu/~ghost/doc... ou dans le manuel.

Voila, on n'a pas trop parlé de script ici, mais il en sera question dans le prochain article. D'ailleurs si vous voulez développer dès à présent, il suffit de lancer gs sans -dBATCH et sans fichier postscript pour obtenir une console interactive.

PS : Notez au passage qui toutes les commandes gs fonctionnent aussi avec du PDF car ce dernier est un autre langage compris par gs.

Snapshot temporaires 

avr 26 Par peck

Niveau :      
Résumé : lvm snapshot

J'ai déjà fait des articles sur LVM. Aujourd'hui parlons de snapshot en ram et d'une nouveauté du noyau 2.6.33, le snapshot-merge.

Snapshot en RAM

Tout comme il est possible de faire un LV en RAM, il est possible de faire un snapshot en RAM.

Pour faire un LV (Logical Volume) en RAM : il suffit d'utiliser un ramdisk comme PV(Physical Volume).

$ pvcreate /dev/rd0
$ vgcreate myvg /dev/rd0
$ lvcreate -l 100%FREE -n mylv myvg

Pour faire un snapshot en RAM :

$ pvcreate /dev/rd0
$ vgextend myvg /dev/rd0
$ lvcreate -L 100M -s -n mysnapshot /dev/myvg/mylv

Mais pour quoi faire ? Pour la même chose qu'un livecd : transformer un périphérique en lecture seule en périphérique lecture-écriture qui perdra toutes ses modifications au prochain reboot.

Seul inconvénient, les ramdisk ont une taille prédéfinie au démarrage du noyau (ramdisk_size=).

Mais j'ai gardé le meilleur pour la suite.


continuer la lecture...

Power of choice 

avr 21 Par peck

Lorsqu'on aborde le libre, on ne le voit pas du tout de la même façon selon qu'on est un utilisateur expérimenté ou non.

Un utilisateur expérimenté commencera par explorer cet univers et découvrira à chaque fois une nouvelle façon de faire, une solution plus ou moins adaptée à ses besoins. Progressivement, il se forgera un opinion sur les logiciels qu'il rencontre (emacs c'est bien, vim c'est mal). Celle-ci peut varier au cours du temps et des nouvelles technologies qu'il rentre.

Cette possibilité de choisir est une composante essentielle du logiciel libre et on constate que dans la plupart des domaines des centaines de choix vous sont proposés. Le site distrowatch est un exemple de la diversité des distributions, sa page de statistiques compte 297 distributions.

C'est une bonne chose, mais maintenant plaçons-nous dans la peau d'un novice. La première chose qu'il voit est la même : un choix gigantesque et permanent. Quelle distribution ? Quel éditeur de texte ? Quel navigateur ? Tout ce choix tue le choix.

Devoir choisir est difficile pour trois raisons. La première est que lorsqu'on est nouveau on ne connait pas du tout le domaine ni les critères de choix. Rien ne nous indique pourquoi choisir telle ou telle solution. Il faut alors aller chercher l'information et comparer les différentes possibilités soi-même.

La deuxième est qu'il faut disposer de temps pour faire ce choix. Mais le temps est une richesse qu'on ne veut pas nécessairement dépenser. Une personne riche de son temps peut le dépenser à tout va, mais cette richesse se fait de plus en plus rare et nombreux sont ceux qui préfèreront dépenser leur temps à pêcher ou à partir à la chasse au kangourou.

La troisième est la pression psychologique du choix. Ai-je fait le bon choix ? N'y avait-il pas un meilleur choix ? C'est quelque part une bonne chose pour une personne expérimentée qui va passer son temps à se demander s'il n'y a pas mieux et à sauter sur la moindre occasion d'améliorer les choses. Mais la plupart des gens risquent de trouver cet excès de choix trop difficile.

Conclusion : Trop de choix tue le choix !

Conclusion 2 : Il faut faire les choix à la place des débutants.

Niveau :      
Résumé : syscall

Il paraît que sous unix tout est fichier. Vous allez voir que ce n'est pas tout à fait vrai.

La seule interface du noyau avec ses processus est la table des appels systèmes, dont voici la liste pour linux (et les prototypes en C). Vous y trouverez en gros 3 catégories : les appels liés aux fichiers, les appels liés aux processus, les appels liés au temps. Dans les fichiers on trouve entre autre le réseau, et dans les processus on trouve entre autre la gestion de la mémoire et des signaux. Donc sous unix tout est fichier ou processus ou temps (souvenez-vous du temps où on l'appelait time sharing system).

Malgré leur grand nombre, les appels système ne font finalement que peu de choses. Quelques opérations de base, et puis c'est tout. En fait la grande majorité du code de linux est appelé à travers des lectures/écritures sur des fichiers.

Le code du driver de votre disque dur est appelé lors de la lecture d'un répertoire. Le code de nombreux drivers est appelé lors de l'utilisation d'un fichier dans /dev, le code de configuration de linux est appelé lors de l'utilisation de /sys ... Ce qui est beau dans cette histoire c'est qu'on ne s'en rend pas compte, les méthodes utilisées sont toujours les mêmes (open, read, write ...)

Notez quand même que tout cela forme une API du noyau un peu plus vaste que les appels systèmes : les numéros de bloc dans /dev, les noms dans /sys, le format de fichier dans /proc, ne sont pas interchangeables. C'est une API au dessus de l'API fichier. C'est à cause ou plutôt grâce à elle qu'on dit que tout est fichier.

Mais retenez surtout ceci : tout est fichier ou processus ou temps.

Niveau :      
Résumé :

Maintenant que nous connaissons le processus de boot, si on examinait ce processus d'un point de vue de la sécurité !

Lorsqu'on parle de sécurité, il faut d'abord savoir dans quel cas on se positionne et de quoi on cherche à se prémunir. Ici, je considère que le système lui-même est sécurisé. Je suppose que l'attaquant est devant la machine et cherche un accès root.

On considère que chaque élément est sécurisé pour ce qui est de ses propres fonctionnalités, ce qui veut dire que si le bootloader est protégé par mot de passe, il n'y a pas de faille dans le bootloader lui-même permettant d'outrepasser ce mot de passe. Nous nous attacherons donc à chercher ce qui peut être détourné dans le flux d'exécution en entrée et en sortie de chaque élément.

Je vais commencer par la fin, du plus facile au plus difficile.

rc

Rc est lancé par init et ne prend ses paramètres que de init. Ceux-ci sont fixés en dur dans /etc/inittab. Son démarrage ne peut donc être détourné que d'une façon : par modification du contenu du disque. GoTo partition /

Parmi ces paramètres il y a le paramètre 1 qui lance rc dans le runlevel 1, ce qui dans la plupart des cas se termine par un sulogin. Ouf on est protégé par le mot de passe root.

Mais vérifiez bien, dans certains cas il se termine par un simple shell et donc réussir à passer un tel paramètre permettrait à l'attaquant un accès root à votre machine.

Pour passer 1 en paramètre GoTo init


continuer la lecture...
47 pages