2007 April Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for April, 2007

Chroot

Apr 30

Niveau :      
Résumé : chroot /mnt

Connaissez-vous chroot ?

Présentation

Il permet de changer le répertoire / pour les processus lancés par lui. Exemple :

$ ls -a /root
> . .. README myroot.iso
$ ls -a /mnt/root
> . .. test.jpg bin
$ chroot /mnt
$ ls -a /root
> . .. test.jpg bin

Toutes les commandes passées après le chroot utilisent le contenu de /mnt comme /. Cela implique le besoin d'une arborescence minimale dans ce sous répertoire avec un shell disponible (ou toute autre commande passée en paramètre à chroot). D'autre part, il faut être root pour lancer chroot.

Historique

Chroot a été motivé par des besoins de sécurité. Imaginons une arborescence minimale pour faire tourner un service potentiellement troué (n'importe lequel, prenons bind pour le dns). Elle contiendra les bibliothèques pour ce service, sa configuration (ou pas si le chroot se fait après le lancement du service) et c'est tout. Toute personne exploitant une faille sur le service se retrouvera sur une machine au contenu très limité et donc n'impactera pas les autres services de la machine. C'est l'ancêtre des machines virtuelles (mais inventé après).

Notons tout de même que d'une part chroot est connu pour avoir eu lui aussi quelques failles et que d'autre part la commande jail sur les bsd fait beaucoup mieux.


continue reading...

Niveau :      
Résumé : /etc/{hosts,ethers,protocols,services}

Comme nous venons de le voir la bibliothèque libnss permet de faire la correspondance entre des noms et des identifiants. Cette correspondance peut être faite par des services réseaux automatisés ou par des fichiers qui se trouvent sur votre système. Détaillons les fichiers du système, notez que c'est le fichier /etc/nsswitch.conf qui détermine s'ils sont utilisé et avec quelle priorité.

IANA

L'IANA est l'organisme chargé d'attribuer des numéros dans toutes sortes de domaines sur internet. On va le trouver un peu partout ici.

Protocols

Dans /etc/protocols on trouve la liste des identifiants des protocoles de communication comme TCP ou IP. Les plus importants à connaître sont IP(4), TCP(6) et UDP(17). En pratique vous ne les rencontrerez que rarement sauf si vous faites du réseau mais ça peut toujours servir. La liste des valeurs à jour se trouve sur le site de l'iana.

Services

Dans /etc/services se trouve la liste des associations port/service ainsi que le type de transfert associé (tcp ou udp). Je pourrais vous en citer un grand nombre d'important www (80), smtp(25), pop(110) ... mais limitons-nous. Il est très utile de les connaître lors de l'écriture d'un firewall ou la capture d'un flux. Le fichier /etc/services sera toujours votre aide mémoire en cas de port inconnu ou compliqué. Et pour toujours être à jour, il y a le site de l'iana.

Notons à propos de ces numéros que tous les ports inférieurs à 1024 sur un serveur unix ne peuvent être ouverts que par l'utilisateur root, donc un administrateur légèrement (si peu) plus digne de confiance qu'un simple utilisateur. De nos jour la différence ne se remarque (presque) plus car tout le monde est administrateur sur sa propre machine..

Cette correspondance peut se faire automatiquement dans la plupart des cas. Ainsi les 2 lignes suivantes sont équivalentes :

$ telnet 127.0.0.1 80
$ telnet 127.0.0.1 www

continue reading...

Niveau :      
Résumé : xclip

Vous connaissez sûrement le copier/coller méthode X11. On sélectionne (=copier) puis on clique sur le bouton du milieu (=coller). C'est simplissime, et une fois qu'on le connaît, on ne s'en passe plus. Notez des de nombreux bureaux ont maintenant ajouté les traditionnels raccourcis windows (ctrl-x, ctrl-c, ctrl-v) aux copier/coller existant. Ils ont l'avantage de ne pas casser les habitudes des windowsiens, mais aussi de pouvoir coller "à la place de" en sélectionnant puis en utilisant ctrl-v pour coller sans que la sélection n'ait vidé le presse papier.

Il peut vous arriver de vouloir copier le contenu d'un fichier de votre disque pour le coller dans une zone de texte dans votre navigateur. Dans ce cas, ne vous embêtez pas à faire un cat de votre fichier puis à tout sélectionner à la souris. On ne sait jamais comment le terminal va gérer les retours à la ligne.

Je vous conseille plutôt le simple mais efficace xclip.

$ xclip -i < fichier

Et hop, il ne vous reste plus qu'à coller avec le bouton du milieu où vous le désirez.

Notez que xclip dispose aussi de l'option -o qui permet de ressortir sur la sortie standard le contenu du presse papier et donc de l'enregistrer dans un fichier.

$ xclip -o > fichier

Petit exemple, pour trier le contenu d'un texte que vous éditez par exemple avec kate. Sélectionnez la zone à trier, puis :

$ xclip -o | sort | xclip -i

Collez, c'est fait !

Niveau :      
Résumé : x2x ; synergy

Vous avez plusieurs machines et vous voudriez n'avoir qu'un seul couple clavier/souris. Ces outils sont faits pour vous.

x2x.png

Cas de 2 serveurs X

x2x est une bonne solution.

Pour faire fonctionner x2x, il vous faut avoir le droit de vous connecter à distance sur le serveur X qui va être contrôlé. Si ce n'est pas le cas, à vous de jouer avec les xauth, xhost, option -ac et autres options -nolisten.

Dans un terminal sur le serveur contrôleur, tapez

$ x2x -to voisin.machine.net:0 -west

L'option -west indique où se situe géographiquement l'écran de la 2e machine. Maintenant lorsque vous déplacez votre souris sur le bord gauche de votre écran le pointeur passe sur l'autre machine. Et les entrées clavier y sont aussi redirigées.

Point important, le copier/coller est supporté. Copiez un texte sur une machine et vous pouvez (toujours en déplaçant la souris) aller sur l'autre machine pour coller votre texte.

Cas d'une machine sous windows

x2x peut être compilé sous cygwin, mais la solution est lourde. Il existe un autre outil pour déporter le clavier/souris d'une machine à une autre et qui fonctionne quel que soit le système source ou destination. Il s'agit de synergy.


continue reading...

Niveau :      
Résumé : /etc/init.d/nscd start

NSS

Libnss est LA bibliothèque qui gère tout ce qui est correspondances de nom dans le système (nss = name service switch). Ceci inclut :

  • machine <-> IP
  • utilisateur <-> id
  • groupe <-> id
  • protocole <-> id
  • service <-> port
  • ...

Elle se configure dans le fichier /etc/nsswitch.conf où vous en trouverez la liste complète. Pour chaque type de correspondance vous pouvez spécifier les méthodes utilisées pour la résolution et l'ordre dans lequel elles sont appelées. Tous les outils du système utilisent cette bibliothèque pour ces fonctions, c'est donc un lieu de configuration unique.

Getent

Cette bibliothèque dispose d'une commande qui est bien utile pour obtenir les informations en question depuis un shell : getent.

$ getent hosts www.google.fr
$ getent passwd peck
$ ...

Notez que c'est LA bonne méthode pour accéder à la résolution dns à travers le système. En effet la commande host interroge directement le dns sans prendre en compte un éventuel fichier hosts ou ldap ou ... et leur priorité. Elle ne permet donc pas de tester le fonctionnement correct du système.

Nscd

Donc tous les outils du système utilisent cette bibliothèque à chaque fois qu'ils ont besoin d'une résolution de nom. Le problème est parfois que cette bibliothèque ne fait que ce pour quoi elle a été conçue, c'est-à-dire résoudre des noms, et cela peut prendre du temps, surtout si la requête passe par le réseau. Par exemple dans le cas où les utilisateurs s'authentifient avec un ldap distant, ou dans le cas où un logiciel fait de très nombreuses requêtes dns, on a un gros ralentissement de l'application car elle perd du temps à chaque requête.

Le démon nscd (name service cache daemon) est justement là pour pallier ce problème, il gère un cache pour cette bibliothèque. Il se lance tout simplement après avoir été installé :

$ /etc/init.d/nscd start

Il se configure dans /etc/nscd.conf où on peut configurer, entre autres, différentes durées de cache et le cache uniquement pour certaines correspondances.

Ce service est surtout utile sur les serveurs qui font serveur nfs et qui sont souvent une identification des utilisateurs par NS ou ldap. Notez que c'est une mauvaise idée de l'utiliser sur un serveur dns car il ne respecte pas les valeurs des TTL pour les noms de domaine.

Niveau :      
Résumé : losetup, qemu-img, dd, fdisk

Sous unix tout est fichier. Un disque est un fichier, une partition est un fichier, un fichier est un fichier. Ceci a de gros avantage, par exemple il n'y a quasiment pas de différence entre monter une partition et monter une image disque. Exemple :

image_disque.png

Image disque

Créons maintenant une image d'un disque :

$ dd if=/dev/cdrom of=image.iso

Et voila, c'est tout simple nous avons extrait une image de CD.

Maintenant si nous voulons utiliser cette image plutôt que le CD, la commande mount a tout prévu pour nous. Le montage est très simple :

$ mount -o loop image.iso /mnt

Et ceci fonctionne aussi avec l'image d'une partition, il suffit de remplacer /dev/cdrom par /dev/hda1.

Détaillons l'action de mount pour mieux la comprendre. Elle se passe en 2 temps. Tout d'abord elle crée un fichier spécial loopback à partir de l'image. Ceci transforme un fichier normal en fichier de type device. Indispensable pour que le noyau accepte de monter le contenu.

$ losetup -f  # cherche le premier loopback disponible
> /dev/loop1
$ losetup /dev/loop1 image.iso # crée le loopback

Nous avons maintenant le device /dev/loop1 qui est un device normal. Mount peut donc faire son travail :

$ mount /dev/loop1 /mnt

continue reading...

Niveau :      
Résumé : ctrl-s ctrl-q ctrl-z ctrl-c blinkd

Aujourd'hui nous allons regarder un passé bientôt oublié, les consoles. Qui s'imagine encore qu'une console puisse être autre que "de jeu", alors qu'elle peut très bien être un meuble. Je dis console pour jouer avec les mots, mais il s'agit ici de terminaux, tous virtuels.

Terminal

Un terminal est un couple clavier/écran qui sert à interagir avec le système. La console est le terminal à travers lequel le noyau discute avec l'utilisateur. Il fut une époque où les terminaux pesaient des dizaines de kilos. De nos jours, ils sont virtuels. Sous linux, en général, il y a 6 terminaux virtuels non graphiques (ctrl-alt-F1 par exemple, et alt-F7 pour ceux qui ne savent pas revenir au mode graphique). Et la console est le terminal (non graphique) en cours d'utilisation. Sur les serveurs graphiques on trouve aussi de nombreux terminaux virtuels (notez que xorg tourne lui-même sur son propre terminal même s'il n'en fait pas vraiment usage).

Un terminal fonctionne en interprétant des caractères qu'il reçoit de son client pour produire un affichage à l'écran. Ainsi certains caractères font des bips ou des retours à la ligne. Et dans l'autre sens, certains caractères envoyés par le terminal au système (depuis le clavier en général) sont des caractères de contrôle.

Par exemple supposons que le texte que vous êtes en train de lire, simplement avec cat, défile trop vite. Une touche spéciale entre en jeu : "Scroll lock", elle interrompt le défilement du texte sur le termial. Et accessoirement, provoque l'allumage de la diode associée pour vous avertir que tout est bloqué. En effet, le programme derrière est réellement bloqué. Tant que le programme effectue des actions qui n'impriment rien, il continue, par contre s'il cherche à écrire quelque chose, il se retrouvera bloqué jusqu'à la fin du scroll lock (un second appui sur la touche).

Des terminaux

Les terminaux de linux disposent de 2 raccourcis qui font la même chose que la touche "scroll lock" : ctrl-s (stop) et ctrl-q (qontinue) respectivement pour bloquer le défilement et pour le faire reprendre. C'est pourquoi il vous arrive parfois de faire une fausse manip et d'avoir l'impression que votre programme est bloqué. Dans ce cas faites d'abord un ctrl-q au cas où le problème viendrait d'un blocage du défilement.

Astuces

Tous les terminaux X ont repris ces raccourcis, par contre ils n'ont pas gardé la touche scroll lock et la diode associée. C'est pourquoi certains utilisent cette dernière pour lancer des sos ou toute autre message avec blinkd .

Donc pensez au ctrl-s lorsque la sortie défile trop vite plutôt que le ctrl-c ou le ctrl-z qui ne font pas exactement ce que vous voulez.

Autre truc sympa, il arrive que vous lanciez une commande et que le défilement soit tellement rapide que le ctrl-c ne fonctionne pas. La première envie est d'ouvrir un autre shell et de tuer le script fautif, mais il y a plus simple. ctrl-s puis ctrl-c parfois suivi d'un ctrl-q pour que le second fasse son effet.