Formation administration Linux
Transcription
Formation administration Linux
Formation administration Linux Marc-Olivier Buob Linux : aperçu Qu'est ce que GNU/Linux ? Quelques distributions classiques Pourquoi tant de distributions ? A quoi ça ressemble ? Le boot loader Le chargement Le mode texte L'environnement graphique Structure de GNU/Linux Rôle du gestionnaire de paquets Qu'est ce que GNU/Linux ? Noyau + Système d'exploitation (OS) Basé sur un noyau linux (1991 Linus Torvalds) Projet GNU : système inspiré d'Unix (1986 Stallman) Développé par des milliers d'informaticiens sur Internet Inclue des milliers de logiciel dont ceux du projet GNU emacs, gcc Libre D'exécuter le logiciel pour n'importe quel usage D'étudier le fonctionnement d'un programme et de l'adapter (open source) De redistribuer des copies D'améliorer le programme et d'en faire profiter la communauté linux Communautés (linux-fr, lea-linux...) Quelques distributions classiques Knoppix Fedora Pourquoi tant de distributions ?! Plusieurs dizaines de distributions Il y a quand même une base commune ! Choix techniques différents Gestionnaire de paquets Manière dont sont gérés les services (serveurs...) Manière dont est configuré le système (réseau...) Choix philosophiques différents Paquets installés par défaut : libre vs non libre (licences) Public différent : familiers de linux (debian) ou grand public (ubuntu) Serveur (debian), PC bureautique (ubuntu), restauration (knoppix) 1) Le boot loader : grub / lilo Les différents noyaux linux disponibles Les autres systèmes (windows...) 2) Le chargement 3) Le mode texte (console) Le prompt : login@hostname:path$ ~: home directory Commande shell pwd : le répertoire courant Le résultat 4) L'environnement graphique Structure de GNU/Linux (1/2) Un noyau qui prend en charge Les périphériques (disque dur, clavier, carte réseau...) Les systèmes de fichiers (ext4, fat32, ntfs...) Les protocoles réseaux (TCP, UDP...) … éventuellement étoffé par des modules chargés au boot … sur lequel s'appuie le système Système de base Shell (ligne de commandes) : sh, bash, tcsh, ksh, zsh... Librairies Logiciels « en mode texte » : gcc, gdb, vim, aptitude, pwd, client/serveur ssh Serveur graphique (serveur X) Environnement graphique : KDE, gnome Applications graphiques : konsole, kdevelop Structure de GNU/Linux (2/2) Chaque couche à un rôle bien défini et s'appuie sur les autres Windows pilotes logiciels GNU/Linux Boot loader Grub Lilo noyau1 noyau2 ... modules Système de base pwd hal udev Serveur graphiqu e Env. graphiqu e App. Graphique s Xorg Gnome KDE kdevelop konsole adept Librairies QT, libstdc++, boost Progr. mode texte Shell, compilateurs, gest. de paquets... Le gestionnaire de paquets Chaque logiciel / librairie / … est stocké dans un paquet Contient les fichiers à installer Précise de quels paquets il dépend Décrit le contenu du paquet Le gestionnaire de paquets Installe, met à jour, ou supprime des paquets (et ses dépendances) Corrige les fichiers de configurations Garantit que les dépendances sont présentes, à jour et en un exemplaire Diffère d'une distribution à l'autre debian/ubuntu... : aptitude, apt-get, dpkg … redhat/mandriva... : urpmi, yum, rpm... Linux un peu plus dans le détail Ce qui se passe-t'il au démarrage ? L'arborescence linux (FHS) Les devices Les systèmes de fichiers, les partitions Les TP (enfin !) Que se passe-t'il au démarrage ? On choisit quel kernel on lance et avec quelles options éventuellement le runlevel peut être précisé Le kernel est chargé Les différents médias sont montés (/etc/fstab) en particulier la partition sur lequel le système GNU/Linux est installé (/) la swap Le système démarre au runlevel par défaut (/etc/inittab) A chaque runlevel, on lance des services spécifiques 0 arrêt 1 mode mono utilisateur 2-5 mode multi utilisateur (réseau, mode graphique etc...) 6 reboot FHS (File Hierarchy Standard) / (root) /boot : kernels, initrd... /bin : binaires essentiels (mv, cp...) /dev : devices (/dev/mouse, /dev/sda1...) /etc : fichiers de configuration et scripts de démarrage /etc/X11 : fichiers de configuration du serveur X /home : home directories (répertoires utilisateurs) /lib : librairies essentielles /media : périphériques montés (CD, clé USB) … /root : home directory de root /sbin : binaires systèmes essentiel (route, mount, …) /tmp : fichiers temporaires /usr : /usr/bin, /usr/sbin, /usr/include, /usr/lib /var : variable files (/var/apt/cache/archives, /var/dpkg/lock...) Les devices Chaque périphérique est associé à un device dans /dev /dev/sda (/dev/sdb, …) ; /dev/sda1 ; /dev/sda2 /dev/hda /dev/mouse, /dev/dsp /dev/cdrom /dev/cdrom0 /dev/null, /dev/stdin, /dev/stdout, /dev/stderr Le partitionnement Windows 1 partition pour le système (NTFS en général) Éventuellement 1 partition de données (NTFS en général) GNU/Linux 1 partition pour le système / (compter 10Gio en ext4 en général) 1 partition de swap (1 Gio en swap) Éventuellement 1 partition de données séparée de /, /home, en général en ext4 Les systèmes de fichiers NTFS / ntfs-3g FAT32 / vfat ext4 Windows Lit Écrit Lit Écrit - Linux Lit Lit Lit Écrit Remarques Fragmente Droits Journalisation d'erreurs Pas de droits Fragmente très peu Pas de lien symbolique Droits Taille limite Liens symboliques Journalisation d'erreurs Écrit Écrit Les partitions : sudo fdisk -l Disk /dev/hda: 40.0 GB, 40020664320 bytes 255 heads, 63 sectors/track, 4865 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x802b81ca Device Boot /dev/hda1 * /dev/hda2 /dev/hda3 swap / Solaris Start 1 1276 4741 End 1275 4740 4865 Blocks 10241406 27832612+ 1004062+ Id 7 83 82 System HPFS/NTFS Linux Linux Id b System W95 FAT32 Disk /dev/hdb: 82.3 GB, 82348277760 bytes 255 heads, 63 sectors/track, 10011 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x4707841a Device Boot /dev/hdb1 * /dev/hda1 Start 1 /dev/hda2 End 10011 Blocks 80413326 /dev/hda3 /dev/hdb1 Travaux pratiques TP1 : installation TP2 : prise en main TP3 : visite guidée TP4 : les droits TP5 : les paquets sous Debian (et distributions dérivées) TP6 : shell (bases) TP7 : réseau (TP8 : la programmation C/C++ sous linux) (TP9 : STL) TP10 : shell (algo) TP11 : LVM TP12 : apache TP1 : installation Télécharger l'iso d'ubuntu ou de kubuntu http://www.ubuntu-fr.org/telechargement Vérifier la somme md5 Graver le CD (Réduire les partitions windows) Installer ubuntu Lancer ubuntu ! TP2 : prise en main Windows Gnome KDE3 KDE4 firefox / IE firefox / epiphany firefox / konqueror idem thunderbird / outlook thunderbird / evolution thunderbird / kmail idem pidgin, msn... pidgin / empathy kopete idem Lecteur multimédia / vlc rythmbox, totem, vlc amarok, kaffeine, vlc, amarok2, gwenview kmplayer Commande MS DOS gterm konsole konsole Explorateur nautilus konqueror / dolphin konqueror / dolphin Bloc notes gedit kwrite / kate idem Suite MS office / openoffice openoffice koffice / openoffice idem Live update synaptic adept idem Adobe reader / fox it reader evince kpdf okular La philosophie sous GNU/Linux L'intelligence est le moins possible dans l'interface graphique L'interface se base le plus possible sur des programmes en ligne de commande Scripter un programme Rôle de l'UI (User Interface) : convivialité et ergonomie La ligne de commande permet souvent d'aller plus loin et plus vite que l'interface graphique Exemple : kdevelop se base sur g++ et gdb Voir TP shell Voyons à présent le décor et l'envers du décor UI vs ligne de commande Où trouver l'information ? La documentation embarquée Les pages de man, apropos, l'autocomplétion L'aide KDE / gnome L'option --help La documentation en ligne http://doc.ubuntu-fr.org/ man + mot clé (commandes linux, fonctions C...) Sites dédiés. Par exemple pour la STL : http://www.sgi.com/tech/stl/ Avec un moteur de recherche ! Listes, bug reports Forum de la distribution, forums spécialisés Les pages de man NOM Conventions linux : echo - Afficher une ligne de texte. SYNOPSIS Commande en minuscules, [-p] : optionnel --pouet : option longue -p : option courte (chaînable) echo [-neE] [message ...] echo {--help,--version} DESCRIPTION Cette page de manuel documente la version GNU de echo. La plupart des shells ont une commande intégrée ayant le même nom et les mêmes fonctionnalités. echo écrit chaque message sur la sortie standard, avec une espace entre chacun d'eux, et un saut de ligne après le dernier. Sections de man : man 1 write, man 2 write... Le man indique le rôle d'une fonction et de ses options Il précise les commandes ou fonctions connexes TP3a : manipuler des fichiers Le terminal, les tty cd, ls, pwd, cp, mv, mkdir, rm, rmdir,ln touch, file, cat Chemins particuliers Absolus : ~ / Relatifs : . .. Exercice Créer /tmp/a/b/c, puis /tmp/a/b/c/d.txt, puis /tmp/a/b/c2/ Copier d.txt dans /tmp/a/b/c2/ Supprimer /tmp/a/b/c Créer un lien vers /tmp/a/b/c2 dans le home directory Créer e.txt dans /tmp/a/b/c2/. Que ce passe-t'il dans le home ? TP3b : manipuler des périphériques Regarder /etc/fstab Expliquer pourquoi les devices ne sont pas référencés sous la forme /dev/sd* Parenthèse udev : peut renommer un device au moment ou celui-ci est branché hal : notifie l'utilisateur qu'un périphérique est branché usbdev, applet de périphérique KDE4, gvfs... Commandes de base df, du dmesg fdisk, cfdisk, mkfs, lspci, lsusb, dmidecode, hdparm mount, umount reboot, halt Monter une clé dans /media/usb. La formater en fat32. TP4 : les droits La notion de droits sous GNU/Linux est fondamentale Distribution des rôles : seul root peut administrer la machine Sécurisation : programmes malveillants Confidentialité : accès restreint à un répertoire ou à un device (ex: /dev/dsp) rwxrwxrwx Propriétaire, groupe, tout le monde Read Write eXecute root, sudo, su Les profils et les groupes /etc/passwd, /etc/shadow, /etc/group groups, whoami, passwd, (yppasswd, ypcat) addgroup/groupadd, adduser/useradd, userdel, usermod, sg chown, chgrp Les droits dans /etc/fstab Le gestionnaire de paquet apt Récupère la liste des mises à jours (update) Interroge les dépôts configurés dans /etc/apt/sources.list /var/lib/dpkg/lock Corrige l'arbre de dépendance http://packages.ubuntu.com Télécharge les paquets fichiers .deb /var/cache/apt/archives Déploie la mise à jour dpkg -i, dpkg --purge (Re)configure le paquet dpkg-reconfigure, dpkg --configure -a TP5 : installons des paquets Avec adept ou synaptic : installer apt-file Avec aptitude ou apt-get : installer nmap aptitude en mode interactif rose : supprimer; cyan : mettre à jour, vert : installer update (u), upgrade (U), go (g), quitter (q) installer (+) désinstaller (-) purger (_) trouver (/), suivant (n), précédent (p) deborphan, vider le cache apt-file, apt-cache Parenthèse : tar, ./configure, make && make install Un peu de shell Les flux >, >> écrire dans un fichier 2>, 2>>, 2>>&1 rediriger stderr < lire un fichier cat < pouet.txt Les pipes | : chaîne les commandes wc -l pouet.txt cat pouet.txt | wc -l sort, cut, grep, xargs, uniq, wc TP6 : shell Compter dans /etc tous les fichiers finissant par « .conf » Chercher dans /etc les fichiers dans lesquels figure la chaîne /dev/sda grep wc Écrire l'équivalent de dpkg --get-selections en utilisant juste : grep, (uniq, cut) Compter dans /etc/fstab le nombre de ligne contenant /dev/sd* find, (grep, wc) dpkg -l, grep, cut Supprimer les paquets fanés ; supprimer les paquets « rc » deborphan xargs dpkg grep cut Le réseau sous GNU/Linux Administration Commandes de base /sbin/ifconfig, /sbin/iwconfig, /sbin/iwlist dhclient /sbin/route ping host, nslookup, /etc/resolv.conf, /etc/hosts nmap Configuration /etc/network/interfaces, network manager Transfert lftp ssh, scp, fish TP7 : réseau Vérifier le fingerprint du serveur ssh : – ssh-keygen -lf /etc/ssh/ssh_host_dsa_key.pub Configurer un utilisateur mando (useradd, passwd) Configurer une clé ssh : http://prendreuncafe.com/blog/post/2005/08/29/262-installer-sa-cle-ssh-sur-un-serveur-distant ssh-add Écrire le script shell suivant Lister les fichiers dans /home/mando situé sur la machine d'un stagiaire et stocker le résultat dans un fichier à l'aide de ssh Transférer ce fichier avec scp Supprimer le fichier créé sur la machine distante Les services Les processus, les PID et les démons ps top kill, killall Visite dans /etc/init.d /etc/init.d/ssh : le serveur ssh /etc/init.d/gdm ou /etc/init.d/kdm : le gestionnaire de connexion graphique Comment réparer son serveur X (tty, dpkg-reconfigure) /etc/init.d/apache2 /etc/init.d/proftpd /etc/init.d/mon_service [start|restart|stop...] service mon_service [start|restart|stop...] TP8a : Développer sous GNU/Linux Sous debian les paquets de développement sont postfixés -dev Installer gcc et g++ Installer make, vim Installer gdb, valgrind Installer une librairie (par exemple boost) Installer un IDE (kdevelop, anjuta) Quelques librairies célèbres libstdc++, boost QT, gtk, SDL openGL pcre TP8b : Développer sous GNU/Linux Écrire un tic tac toe Le compiler à la main et l'exécuter gcc -W -Wall -c module.c gcc -W -Wall main.c module1.o module2.o main.c -o binaire Écrire un makefile Makefile automatique parenthèse sur automake et autoconf gdb Erreur de segmentation : r binaire, bt Débogage pas à pas : b n s p valgrind Les templates Les templates L'opérateur :: typename La STL std::vector<T> std::list<T> std::set<T> std::map<K,T> Les flux : std::ifstream, std::ofstream, ... Callback vs visiteurs, foncteurs g++, gSTLfilt TP9 : STL Exercice 1 Lire un fichier tabulé nom prénom Afficher tous les contacts Rechercher les contacts dont le nom de famille et Durand Afficher le nombre de contacts Exercice 2 Lire dans un répertoire des fichiers de contact au format : − NOM − PRENOM − AGE Écrire une interface en mode texte permettant de retrouver les personnes pour un âge, un prénom, ou un nom donné TP10 : shell (algo) Créer un script shell qui demande le prénom et qui répond bonjour. Exemple : prénom ? Marc Bonjour Marc ! Créer un script shell qui prend un paramètre un entier positif n. Écrire un carré de n caractères sur n caractères. Exemple : **** **** **** **** LVM (Logical Volume Manager) Permet de s'abstraire des partitions physiques une donnée peut être stockée à cheval sur plusieurs disques / partitions. Physical volume /dev/sda1 redimensionnement aisé pas de limites sur le nombre de partitions /dev/sdb2 /dev/mda1 groupe de volume vg0 lvol1 lvol2 lvol3 toto Terminologie pv : physical volume vg : volume group lv : logical volume Logical volume Au final, on manipule /dev/vg0/toto (ou /dev/mapper/vg0-toto) RAID logiciel RAID1 établi sur deux disques RAID5 établi sur quatre disques A0 A1 A0 A0 A0 B0 C0 P0 A2 A3 A1 A1 A1 B1 P1 D1 A4 A5 A2 A2 A2 P2 C2 D2 A6 A7 A3 A3 P3 B3 C3 D3 RAID0 : volume agrégé par bandes Pas de redondance : - Pas de perte d'espace - Très performant en lecture/écriture - La perte d'un disque est fatale RAID1 : disque en miroir Redondance : - Perte d'espace ((n-1)/n %) - Supporte la perte de n-1 disques RAID5 : volume agrégé par bandes à parité répartie Bits de parité : - Performances en lecture équivalentes au RAID0 - Performances dégradées en écriture - Surcoût en place minimal (1/(n-1) %) - Requiert au moins 3 disques - Reconstruction longue Exemple LVM + RAID /dev/sda1 500Mo /dev/sda2 500Mo /dev/sda3 79Go Disque a 80Go /dev/sdb1 500Mo /dev/sdb2 500Mo /dev/sdb3 79Go Disque b 80Go /dev/sdc1 500Mo /dev/sdc2 500Mo /dev/sdc3 79Go Disque c 80Go swap RAID1 /dev/md0 (1*500Mo) RAID5 /dev/md1 (2*79Go) LVM vg0 /dev/sd*1 Swap 1.5Go /dev/md0 /boot 500Mo ext3 /dev/vg0/racine / 10Go ext3 /dev/vg0/home /home 148Go ext3 Ce que l'on manipule dans /etc/fstab TP11 LVM RAID Faire une installation calquée sur cet exemple : LVM http://doc.ubuntu-fr.org/tutoriel/installation_raid_lvm Physical volume : pvcreate, pvscan, pvdisplay Volume group : vgcreate, vgremove, vgreduce, vgextend, vgrename, vgdisplay, vgmknodes, vgchange Logical volume : lvcreate, lvremove, lvreduce, lvextend, lvrename, lvdisplay... ext2/3/4 : e2fsck, resize2fs RAID mdadm, mdstat /etc/mdadm.conf Apache2 Serveur http/https. Qui dit serveur dit service ! Apache2 : 2 multi processing module (mpm) : prefork : permet d'utiliser des librairies non thread safe worker : gestion des threads (recommandé). Décomposé en modules apache : pam, php5, perl, python, bw... : a2enmod, a2dismod Configuration : relancer apache2 en cas de modification essentiellement via /etc/apache2/apache2.conf via des liens symboliques (voir /etc/apache2/[mods|sites]-[available|enabled]) − Un serveur apache, plusieurs sites (les vhosts) : a2dissite, a2ensite − A priori rangés dans /var/www/htdocs/... TP12 : apache Installation d'apache et de ses modules http://doc.ubuntu-fr.org/apache2#installation1 lancer apache, utiliser nmap etc... visite des fichiers de configuration Installer et configurer php5 créer une page /var/www/htdocs/mon_site/index.php qui écrit l'heure quand on s'y connecte créer une page admin.php dans /var/www/htdocs/mon_site/admin Restreindre l'accès via htaccess au répertoire admin http://www.infres.enst.fr/~danzart/frames/htaccess.html