HEI architecture linux avancee 2007 info informatique et technologies de l'information

Publié par

ÆÆHEI5ITI Architecture linux avancé Le 4 octobre 2006 Q1a : Quand on récupère un fichier exécutable compilé pour les systèmes d’exploitation Linux, quelle commande nous permettra de savoir s’il a été compilé pour notre architecture matérielle ? La commande « file » nous indique si le fichier est un exécutable et indique le type 0,5 d’architecture processeur pour lequel il a été compilé. Q1b : Quelle commande permet de connaître la liste des librairies requises par un exécutable Linux ? La commande « ldd » nous indique la liste des librairies requises par un exécutable. 0,5 Q2 : Est-il possible d’obtenir des exécutables Linux qui puissent fonctionner peu importe les librairies installées sur la machine où ils seront exécutés ? Que doit-on faire pour obtenir un tel exécutable ? Oui, pour obtenir un tel exécutable il faut compiler (et linker) le produit en static. Ainsi les 1,0 fonctions incluses dans les librairies sont copiées dans l’exécutable et l’exécutable n’a plus besoin de librairie pour fonctionner. Remarque : Les produits open source utilisant un fichier « ./configure » peuvent souvent être compilés en static en ajoutant l’option « --enable-static » lors du « ./configure ». Q3a : Donnez le nom d’une distribution Linux courante plutôt adaptée au monde professionnel pour être utilisé sur des serveurs. Donnez les raisons pour lesquelles vous la jugez adaptée à ce type d’usage. On peut citer les distributions « RedHAT Enterprise ». Elles sont ...
Publié le : jeudi 21 juillet 2011
Lecture(s) : 434
Nombre de pages : 6
Voir plus Voir moins
HEI5ITI
Architecture linux avancé
Le 4 octobre 2006
Q1a : Quandon récupère un fichier exécutable compilé pour les systèmes d’exploitation Linux, quelle commande nous permettra de savoir s’il a été compilé pour notre architecture matérielle ? 0,5La commande «file» nous indique si le fichier est un exécutable et indique le type d’architecture processeur pour lequel il a été compilé. Q1b : Quellecommande permet de connaître la liste des librairies requises par un exécutable Linux ? 0,5La commande «ldd» nous indique la liste des librairies requises par un exécutable. Q2 : Est-il possible d’obtenir des exécutables Linux qui puissent fonctionner peu importe les librairies installées sur la machine où ils seront exécutés ? Que doit-on faire pour obtenir un tel exécutable ? Oui, pour obtenir un tel exécutable il faut compiler (et linker) le produit en static. Ainsi les 1,0 fonctions incluses dans les librairies sont copiées dans l’exécutable et l’exécutable n’a plus besoin de librairie pour fonctionner. Remarque : Les produits open source utilisant un fichier «./configure» peuvent souvent être compilés en static en ajoutant l’option «enablestatic» lors du «./configure». Q3a : Donnezle nom d’une distribution Linux courante plutôt adaptée au monde professionnel pour être utilisé sur des serveurs. Donnez les raisons pour lesquelles vous la jugez adaptée à ce type d’usage. On peut citer les distributions «RedHAT Enterprise». Elles sont particulièrement bien 1,0 adaptés au monde professionnel pour un usage sur des serveurs, car : la société propose un support technique la société effectue un suivi des failles de sécurité des composants utilisés, le produit intègre déjà les produits serveurs les plus courants, le système intègre un logiciel permettant la mise à jour automatique. Remarque vis-à-vis des distributions « Debian » : (- ?)Ce n’est pas une société commerciale. Elle ne vend pas de support technique mais on peut trouver sur des forums les aides et informations requises pour régler les problèmes courants. Le support peut par contre être acheté auprès de consultant indépendant de Debian mais référencé sur leur site. (=) Le suivi de faille de sécurité des composants utilisés est assuré. Le produit intègre les produits serveurs les plus courants mais n’intègre(- ?) rapidement les derniers développements.ÆNécessité de vérifier la disponibilité des nouveaux applicatifs (nouvelles fonctionnalités) que l’on souhaite utiliser. (=) Le système intègre également un logiciel permettant la mise à jour automatique (+) On contrôle mieux le contenu de ce que l’on installe et seul des produits testés au niveau sécurité sont intégrés dans la version « stable »ÆPas de course à la dernière fonctionnalité à la mode.
1
HEI5ITI Architecturelinux avancéLe 4 octobre 2006 Q3b : Quelsavantages et inconvénients (semblables à ceux offerts par les systèmes d’exploitation Microsoft) offrent les distributions Linux commerciales ? Les inconvénients sont : 2,0 Le système d’exploitation contient beaucoup de composants et l’on n’a pas forcément besoin de tout. La sécurité est plus facile à maintenir sur un nombre restreint de composants que l’on contrôle bien. Il faut faire confiance à la société construisant la distribution. Il y a un coût d’achat et d’accès à la maintenance. Les avantages sont : On délègue le travail de suivis des versions des composants de Linux vis-à-vis des failles de sécurité et autres mises à jour produit. On dispose d’une hotline pour aider à la résolution des problèmes On peut gagner du temps et avoir besoin de compétence technique moins pointu. Des certifications permettent de garantir que le personnel utilisé est opérationnel sur le produit. Q4 : Quel(s) est(sont) le(s) fichier(s) que le kernel tente d’exécuter après son démarrage ? Le kernel tente normalement d’exécuter les fichiers : « /sbin/init », « /etc/init », « /bin/init » et 0,5 enfin « /bin/sh » si aucun des fichiers précédents n’étaient présents. Q4a : Qu’estce qu’un «initrd » ?Que signifie ce terme? Quelle est son utilité? Dans quel cas de figure un « initrd » est-il nécessaire au démarrage d’un système Linux ? Un « initrd » est un ramdisk initialisé, c'est-à-dire un disque virtuel se trouvant en ram dans 0,5 lequel un contenu a été chargé au démarrage du noyau. Cela permet de disposer d’un « file system » contenant certains fichiers ou commandes sans 0,5 devoir accéder à un support physique de stockage (autre que celui qui a été utilisé pendant le chargement du noyau et de l’« initrd ». C’est nécessaire au démarrage d’un système Linux quand les drivers de gestion des 0,5 périphériques de stockage (dans le cas du SCSI par exemple) sont compilés en module et doivent donc être chargés après le démarrage du noyau. Q4b : Quelles commandes doit-on utiliser pour fabriquer un « initrd » répondant à un tel cas de figure ? Il faut d’abords créer un fichier (« /tmp/image » 1,0dd if=/dev/zero of=/tmp/image bs=1k count=4096 par exemple) correspondant au support virtuel de stockage : On joue sur les valeurs de taille de block (bs) et mke2fs /tmp/image de nombre de block (count) pour définir la taille de l’initrd créé. Il faut ensuite formater le fichier « /tm/ima e» ourmettre le «ile sstem » : Il faut ensuite monter le fichier «/tmp/image » mount –o loop /tmp/image /mnt dans un répertoire vide (« /mnt » par exemple) : On copie les fichiers que l’on veut y mettre(commande cp, tar, …). Puis on démonte le umount /mnt fichier « /tmp/image » : Il ne reste plus qu’à compresser le fichier image gzip /tmp/image avec la commande «zi »:
2
HEI5ITI Architecturelinux avancéLe 4 octobre 2006 Remarque : Il existe dans certaine distribution un script nommé « mkinitrd » qui effectue ces opérations en copiant les fichiers nécessaires dans le cadre de cette distribution et du hardware qui a été détecté lors de l’installation. Q4c : Que doit-on mettre dans un « initrd » répondant à un tel cas de figure ? On place dans l’« initrd » : 1,0 les modules des périphériques de stockage utilisés (qui n’ont pas été intégrés dans le noyau), les commandes insmod, modprobe, … servant au chargement des modules, un script de démarrage remplaçant le daemon « init » et faisant : ole chargement des modules ole montage des périphériques de stockage ole basculement de la racine vers le périphérique de stockage racine ole lancement du daemon « init » Q5 : Quellessont les commandes servant usuellement à compiler puis installer un programme GNU à partir des sources ? Le plus souvent un produit GNU se compile en exécutant successivement les commandes : 2,0 ./configure … La première commande regarde les outils de développement et les librairies installées et génère le fichier «Makefile »en conséquence. Les options, qu’on y ajoute, permettent l’activation des fonctionnalités optionnelles propres au produit que l’on cherche à compiler. make La seconde commande effectue la compilation. make install La troisième commande copie les fichiers dans les répertoires qui conviennent pour que le produit puisse être utilisé. Remarque :Quand le système de configuration automatique n’a pas été implémenté, un fichier «Makefile »est déjà fourni. Il faudra l’éditer pour positionner des variables d’environnement en fonction de la configuration du système d’exploitation sur lequel on veut effectuer la compilation.
3
HEI5ITI Architecturelinux avancéLe 4 octobre 2006 Q6a : Quedoit-on faire lorsque l’on veut réinstaller, sur un disque vierge, un système Linux pour lequel on a sauvegardé, il y a quelques mois, le contenu de chaque partition sous forme «.tar.gz » ?Remarque :Donnez toutes les commandes à passer en tenant compte que depuis le temps, on a certainement oublié le mot de passe « root » utilisé à l’époque. Puisque le disque est vierge, il nous faut travailler avec un autre système d’exploitation Linux (dont on connaît le mot de passe de « root » : une knoppix par exemple) sur lequel on pourra démarrer pour effectuer (sous root) les opérations suivantes : 0,5Il faut partitionner le disque dur pour reconstruire toutes les partitions du disque d’origine. On utilisera la commande «fdisk». 0,5Il faut formater la (ou les) partition(s) de swap en utilisant la commande «mkswap». Il faut formater la (ou les) partition(s) linux en utilisant la commande correspondant au type de file système utilisé: «mke2fs» pour formater une partition ext2. On n’oubliera pas de remettre le label de la partition en utilisant l’argument «L… ». 0,5Pour chacune de ces partitions, il faut la monter, y extraire le contenu, puis la démonter : omount /dev/… /mntotar –C /mnt xvzpf ….tar.gzoumount /mnt0,5Lancer dans un «chroot» le système réinstallé omount /dev/… /mnt ochroot /mnt bashomount /proc 0,5Changer le mot de passe root opasswd rootMonter la partition «/boot» si elle existe omount /boot0,5Installer lilo (à adapter s’il s’agit d’un autre boot-loader) oliloDémonter la partition «/boot» si elle existe oumount /bootSortir du système réinstallé et rebooter oumount /procoexitoumount /mnt oreboot
4
HEI5ITI Architecturelinux avancéLe 4 octobre 2006 Q6b : Qu’est ce qu’une sauvegarde incrémentale ? Citez une commande GNU permettant d’effectuer une telle sauvegarde et expliquez comment cela s’utilise. Une sauvegarde incrémentale consiste à ne sauvegarder que les fichiers qui ont été modifiés 1,0 depuis la dernière sauvegarde. Quand le système prévoit différents niveaux de sauvegarde, on sauvegarde tous les fichiers qui ont été modifiés depuis la dernière sauvegarde de niveau inférieur ou égale. La commande « dump » permet de faire ce genre de sauvegarde. Elle s’utilise en précisant un 0,5 niveau de sauvegarde compris entre 0 et 9. Le niveau 0 correspond à la sauvegarde totale ; les autres correspondent à des sauvegardes incrémentales. Lors d’une restauration, on récupérera d’abords la dernière sauvegarde de niveau 0, puis 0,5 successivement toutes les sauvegardes de niveau 1 faites depuis celle de niveau 0, puis successivement toutes les sauvegardes de niveau 2 faites depuis la dernier de niveau 1, … (et ainsi de suite jusqu’à niveau 9. Q7a : Commentfait-on pour installer une nouvelle version du kernel à partir des sources ? Après avoir récupérer le tar des sources et l’avoir extrait au moyen de la commande « tar » 2,0 dans le répertoire « /usr/src/linux », on configure en utilisant l’une des commandes : make configmake menuconfigmake xconfigOn recrée les dépendances en correspondance avec les choix de configuration : make dep ; make cleanOn compile les modules : make modulesOn compile le noyau sous format compressé : make bzImageOn installe les modules : make modules_installOn installe le noyau et on reconfigure lilo à la main (copie du fichier et exécution de « lilo ») ou en utilisant : make bzliloRemarque pour les kernels 2.4 : Il est également possible d’utiliser :makeSi la configuration n’a jamais été faite, cela fera uniquement :make configSi la configuration a déjà été faite une fois mais que les dépendances n’ont jamais été faites, cela fera uniquement :make depSi la configuration et les dépendances ont déjà été faites, cela fera uniquement : make vmlinuxCela compile le noyau mais ne le compresse pas comme le faitmake bzImageRemarque pour les kernels 2.6 : Il n’est plus nécessaire de fairemake dep (maiscela ne pause pas de problème de continuer à l’utilisé un warning signale simplement sont inutilité). Les dépendances sont régénérées automatiquement quand c’est nécessaire. A la place demake bzImage, on peut utilisermake. A la place demake bzlilo, on peut utilisermake install.
5
HEI5ITI Architecturelinux avancéLe 4 octobre 2006 Q7b : Que doit-on faire si après avoir fait une telle installation, on constate qu’une seule unité de traitement (un seul pingouin) est reconnue alors que la machine est un bi-pentium IV hyperthreading ? Un bi-pentium IV hyperthreading dispose de 4 unités de traitement (4 pingouins doivent donc 1,0 apparaître). Si ce n’est pas le cas c’est que le noyau n’a pas été compilé avec les options permettant : la gestion du multiprocessing la gestion des capacités hyperthreading du pentium IV. Il faut donc recompiler le noyau (ou installer un noyau ayant été compilé) avec les options suivantes : « smp » pour la gestion du multiprocessing » pour l’accès aux fonctionnalités hyperthreading dupentium IVprocesseur « pentium IV. Configurer le « boot loader linux » (lilo, …) pour qu’il utilise le nouveau noyau et redémarrer la machine. Remarque :si «smp »est activé mais qu’il n’a pas été compilé pour un PentiumIV, on n’aura que 2 pingouins. Q8 : Quellestratégie d’attaque met en place un «rootkit »voulant se dissimuler le plus efficacement possible, sur un système Linux ? Le rootkit voulant se rendre indétectable doit rendre invisible : 2,5 aux commandes du type « ls » (« find », …), les fichiers qui le composent aux commandes du type « ps », les processus qu’il utilise aux commandes du type « netstat », les sockets qu’il utilise aux commandes du type « lsmod », les modules qu’il a du charger dans le noyau. Toutes ces commandes fonctionnent en obtenant leurs informations depuis des primitives du noyau. Le rootkit va donc modifier dans le noyau ces primitives, de façon qu’elles ne communiquent pas les informations correspondant à ce que le virus veut cacher. Pour modifier le noyau, il va intégrer un module qu’il chargera dans le noyau et depuis lequel il obtiendra la possibilité de modifier le noyau. Il pourra ensuite, s’il le désire, lancer un serveur ouvrant une « back door » en ayant caché ses fichiers, les processus, les ports ouverts et le module servant à tout cacher. Remarque concernant la persistance dans le système (résister à un reboot de la machine), Le rootkit doit modifier les scripts de démarrage pour que le module soit rechargé dans le noyau et le serveur redémarré. Cela pourrait le trahir! Pour améliorer sa dissimulation, son module devra altérer la visualisation de ces scripts de démarrage. Lors de la lecture les lignes correspondant au rootkit devront disparaître. Lors de l’écriture, ces mêmes lignes devront être ajoutées afin que le rootkit subsiste au prochain reboot. Une autre solution est d’installer un nouveau kernel intégrant les fonctionnalités du module du rootkit. Il n’est plus alors nécessaire de modifier les scripts de démarrage, la résistance au reboot étant assuré grâce au nouveau kernel.
6
Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.