TP 4 de familiarisation avec Unix Réseau Filtres (suite) Variables Scripts Vincent Berry - vberry@lirmm.fr IMPORTANT : la prise de notes est une pratique très importante et pourtant négligée, elle est tout à fait possible avec l outil qui lit les pdf sur Mac l outil Aperçu. Vous êtes encouragés à utiliser ses possibilités d annotation sur le pdf d énoncé et à sauvegarder la version annotée du pdf (pour impression, pour les révisions, pour mémoire,...). Voir le menu Présentation -> Afficher la barre d outil d annotations... Table des matières 1 Commandes utilisant les possibilités réseau 1 1.1 Connexion par ftp à un serveur distant (10 mn)................................. 1 1.2 Connexion à une machine Linux (15-20 mn)................................... 1 1.3 Copie de fichiers entre machines distantes (5 mn)................................ 3 2 Gestion des droits 3 2.1 Introduction en douceur (15mn).......................................... 3 2.2 Droits au niveau opérationnel (55mn)...................................... 4 2.3 Contenu public et contenu privé (15 mn)..................................... 7 1 Commandes utilisant les possibilités réseau 1.1 Connexion par ftp à un serveur distant (10 mn) Comme application pour un cours qui démarre bientôt, nous allons chercher de la documentation sur le compilateur du langage Ada que vous utiliserez bientôt dans le cours d algorithmique. Dans un Terminal, connectez vous au serveur ftp cs.nyu.edu Une fois connecté, naviguez (commandes ls et cd) pour vous rendre dans le répertoire /pub/gnat/papers/ puis récupérez le fichier gnat-slides.ps.gz Déconnectez-vous et décompressez le fichier récupéré. Visualiser son contenu avec l outil Linux prévu pour les documents postscripts. 1.2 Connexion à une machine Linux (15-20 mn) La commande ssh vue en cours permet de se connecter sur une machine différente de celle en face de laquelle vous êtes assis. Nous allons explorer les possibilités de cette commande.
Dans un Terminal, placez-vous dans votre répertoire local UNIX c-a-d situé sur le disque de la machine que vous utilisez en ce moment (à ne pas confondre avec votre répertoire personnel disponible sur toute machine par l intermédiaire du réseau c-a-d disponible sur les Macs par un montage de lecteur réseau). Sur ce répertoire en local donc, créez un sousrépertoire Reseaux (en évitant les accents!!!). Placez-vous maintenant dans ce nouveau répertoire. Demandez à voir tous les processus qui vous appartiennent (et seulement ceux-là, pas ceux des autres utilisateurs) avec la commande ps -u votrelogin. repérez le numéro de processus d une application graphique qui tourne sous votre identité (un navigateur internet, un éditeur emacs par exemple). Repérez le nom de la machine sur laquelle êtesvous connectez (commande hostname ou utilisation de l icône "chemins" dans une fenêtre Finder). Déduisez-en le nom d une des machines à côté de vous. Demandez un nouvel onglet (touches cmd-t) dans le Terminal en cours, nommez-le Machine Distante, tandis que l onglet initial peut être renommé Machine Locale. Dans l onglet Machine Distante, connectez-vous sur une machine voisine par la commande ssh. Acceptez ensuite la clef identifiant de la machine à laquelle vous vous connectez (yes à la question) car nous sommes sur un réseau sécurisé par vos administrateurs systèmes (en cas de soucis avec cette machine, utilisez la machine v240.ig.polytech.univ-montp2.fr). La machine contactée vous demande ensuite un mot de passe, que devez-vous indiquer : le nom de la machine contactée? le mot de passe de votre adresse administrative? votre nom de login? le mot de passe de votre compte Unix (c-a-d celui utilisé pour vous connecter sur un ordinateur en salle de TP)? le nom de votre machine d origine? Utilisez la logique pour résoudre cette question et la pratique pour disculper tous vos doutes. Bon, une fois identifié sur la nouvelle machine, sur quel répertoire êtes-vous situé? Pouvezvous vous rendre à la racine de votre arborescence personnelle et y voir les dossiers que vous avez créé à partir de la machine locale? (attention la situation n est pas la même suivant que votre "machine distante" est une machine d une salle de TP ou bien qu il s agisse de v240. Demandez à votre enseignant de vous faire un schéma des montages de fichiers entre les machines de Polytech et celles d IG. Est-ce cohérent avec ce que vous avez remarqué? Demandez la liste des processus qui vous appartiennent sur cette machine distante (même commande ps qu essayée précédemment). Comment se fait-il que vous ne voyiez pas le processus graphique que vous aviez repéré il y a 5 minutes?
Toujours dans l onglet Machine Distante Descendez dans le répertoire Reseaux (que vous avez créé quand vous étiez sur la machine de départ). Créez un fichier distant.txt contenant le nom de la machine distante sur laquelle vous être connecté (commande hostname et redirection de la sortie standard dans le ficher indiqué). Repassez dans l onglet Machine Locale Estce qu il va être possible de voir le fichier distant.txt? Vérifiez. Dans l onglet Machine Distante demandez qui est connecté sur la machine que vous avez rejoint par le réseau (commande who). Qu est-ce qui permet que vous soyez en train de taper des commandes sur une machine où d autres utilisateurs sont connectés? parce que ces autres utilisateurs sont eux-mêmes en train de travailler aussi sur une autre machine? parce que le système est multi-tâches et multi-utilisateurs? 1.3 Copie de fichiers entre machines distantes (5 mn) Dans l onglet Machine Locale de votre Terminal, placez-vous au dessus du projet Musiversal et créez une archive compressée du projet ne contenant que les fichiers de programmes (sans la documentation ni les autres fichiers) en utilisant la commande tar (voir vos notes du TP précédent pour la syntaxe de cette commande). Utilisez la commande scp pour envoyer une copie de cette archive sur un compte dont vous disposez sur une machine distante. Vérifiez sur la machine destination que votre fichier est bien arrivé, et essayez de désarchiver l archive pour voir si vous accédez bien à son contenu. Vérifiez que la copie a bien eu lieu. 2 Gestion des droits Pour ces manipulations, nous avons besoin de travailler sur la machine v240.ig.polytech.univ-montp2.fr sur laquelle vous vous connecterez en ssh. Placez-vous dans une fenêtre Terminal qui est connecté à la machine 240 pour réaliser toutes les manipulations de cette section. 2.1 Introduction en douceur (15mn) Vérifiez avec hostname que vous êtes bien sur la machine 240 Positionnez-vous dans le répertoire Unix qui est juste sous la racine de votre votre espace personnel (s il n existe pas, créez-le).
Créez un sous-répertoire Droits et rendez-vous dans ce répertoire. Créez un fichier texte faire-cafe.txt avec l éditeur vi (beurk, mais (x)emacs ou nano ne sont pas disponibles sur cette veille machine). Une liste de raccourcis pour vous débrouiller dans cet éditeur rudimentaire est dispo ici : http://www.shortcutworld.com/en/linux/vi.html Vous pouvez aussi pour l instant vous passer de vi en tapant la commande cat > faire-cafe.txt suivi de quelques lignes, suivi de CTRL+C. Dans ce fichier vous indiquerez (succinctement) les opérations à réaliser pour préparer un bon café (une instruction par ligne, maximum 4 lignes). Affichez l ensemble des informations disponibles sur les fichiers de votre répertoire courant. Quels sont l utilisateur et le groupe propriétaire du fichier faire-cafe.txt? Quels sont leurs droits sur ce fichier? Essayez d exécuter ce fichier (taper./faire-cafe.txt dans le terminal). Que signifie le message que le terminal vous renvoie? Pourquoi un tel message? Quels droits seraient nécessaires pour que le fichier soit exécutable? Changez les droits du fichier pour qu il soit exécutable par l utilisateur propriétaire (commande chmod) Essayez à nouveau d exécuter le fichier./faire-cafe.txt. Pouvez-vous expliquer la raison précise des messages qui résultent de cette tentative? Faîtes une copie du fichier./faire-cafe.txt sous le nom recette.txt (commande cp). Quels sont les droits du nouveau fichier? Pouvez-vous en déduire la logique du Système d Exploitation lors de la création du nouveau fichier? En une seule commande, donnez tous les droits au groupe, aucun à l utilisateur et aux autres (chmod) sur le fichier faire-cafe.txt? Vérifiez que les droits ont été correctement donnés. Essayez maintenant de visualiser le contenu de ce fichier (commande cat). Que constatez-vous? Pourquoi? Essayez de détruire ce fichier (rm). A votre étonnement, vous arrivez à réaliser cette opération (après éventuellement avoir confirmé l opération au shell par y suivi de <Entreé>). Par quel miracle cela est-il possible avec les droits actuellement positionnés? 2.2 Droits au niveau opérationnel (55mn) Droits pour le partage de documents avec les autres utilisateurs (20-25mn) Là aussi, il vaut mieux travailler sur la machine v240 qui gère les droits Unix mieux que les Mac (qui eux ne voient vos fichiers réseaux qu à distance) Créez un répertoire PUBLIC juste sous la racine de votre arborescence personnelle. Changez le groupe propriétaire de ce répertoire pour le groupe nommé unix 1 (commande chgrp, voir le man pour le détail des arguments, ou tout simplement l invoquer avec l option --help. Comment vérifier que le changement a bien eu lieu? Note : suivant comment a été installé le système, l opération précédente peut ne pas aboutir. Ce n est pas grave, passez à la suite. Donnez-vous tous les droits sur ce répertoire PUBLIC, ainsi qu au groupe, mais uniquement les droits de traverser et lire le contenu du répertoire aux autres personnes (c-a-d others). Vérifiez. Mais au fait, à quel(s) groupe(s) appartenez-vous? (id) Indiquez au shell que vous voulez maintenant qu il vous identifie comme une personne appartenant au groupe unix (newgrp unix, mot de passe éventuel) Vérifiez qu il a tenu compte de votre changement de groupe (id éventuellement avec l option -g) Allez dans votre répertoire PUBLIC et créez-y un sous-répertoire PROJET. Donnez tous les droits sur ce répertoire à l utilisateur et au groupe propriétaires (c-a-d unix), mais aucun droit aux autres personnes. Vérifiez. Allez dans le sous-répertoire PROJET Créez dans ce sous-répertoire un fichier texte du nom de projet.txt Après avoir réfléchi un minimum et avoir fait un aller-retour avec les diapos du cours, tapez dans le fichier projet.txt quelques lignes de texte dans un format concis indiquant la procédure à adopter à votre avis pour que l ouverture de toute fenêtre de Terminal affiche un message de bienvenue personnalisé 2. Revenez dans le terminal et vérifiez à quel utilisateur et à quel groupe appartient le fichier que vous venez de créer (commande ls avec la bonne option). 1. pour les besoins du TP, tous les étudiants font partie de ce groupe, mais pensez que pour un projet à réaliser, vous pouvez demander la création d un groupe Unix limité aux étudiants de votre projet. Attention : il est possible que le groupe s appelle ig). 2. il faut modifier le fichier ~/.bash_profile et en particulier lui faire modifier la variable PS1.
Sortez du shell dans lequel la commande newgrp vous a placé à votre insu (exit). Méditez la phrase précédente et si vous ne la comprenez pas bien, n hésitez pas à mettre au défi votre enseignant de vous fournir une explication précise, y compris en termes de processus. Vérifiez que vous avez repris votre groupe de départ (id éventuellement avec l option -g). Collaborons (10 mn) Supposons que vous participiez au projet mis en place par votre voisin. Vous allez avoir besoin d accéder aux fichiers et répertoires du projet, afin d avancer le travail lié à ce projet. Nous allons d abord vérifier quelles manipulations vous pouvez effectuer sur ces fichiers et répertoires. Tournez-vous vers l étudiant(e) de l ordinateur d à côté et échangez vos noms de login. A partir du chemin absolu de votre arborescence personnelle, déduisez le chemin menant au répertoire d accueil de ce voisin. Vérifiez. Essayez de consulter le contenu du fichier projet.txt qu il a créé quelque part sous son répertoire PUBLIC. Pourquoi n est-ce pas possible? Identifiez-vous maintenant comme appartenant au groupe unix (newgrp, vérifez avec id) Pouvez-vous maintenant voir le contenu de son fichier projet.txt? Pourquoi? Pouvez-vous créer une copie de ce fichier (nommée par exemple copie.txt) dans son répertoire PROJET (cp)? Invoquez la commande ls avec la bonne option pour connaître les utilisateur et groupes propriétaires des fichiers du répertoire PROJET. Qui est propriétaire du fichier copie.txt? A votre avis, quel utilisateur voit diminuer son quota disque en raison de ce fichier copie.txt situé dans l arborescence de votre voisin? Pouvez-vous détruire le fichier projet.txt (rm)? Pourquoi? Si vous êtes parvenus à cet exploit, renommez le fichier copie.txt en projet.txt (commande mv, et non pas la commande cp). Notions de protocole et de synchronisation (15-20 mn) Maintenant que nous avons vérifié que vous avez effectivement la possibilité de changer le contenu du projet, vous allez avancer l état dans lequel se trouve le projet. Pour cela, rien de compliqué : ajoutez quelques idées et commentaires dans la feuille de route du projet, c-a-d le fichier projet.txt de votre voisin. Mais au fait, que pourrait-il se passer si un autre voisin de votre voisin essaye de faire la même opération que vous sur le fichier de votre voisin (c-a-d celui que vous êtes en train d éditer, vous suivez )?
Est-ce que vous auriez évité ces soucis si vous aviez adopté le protocole suivant? 1. faire une copie du fichier projet.txt dans un fichier monlogin.txt 2. éditer cette copie du fichier original 3. remplacer le fichier projet.txt par la copie modifiée (monlogin.txt)? Décrivez un scénario qui met en défaut le protocole défini ci-dessus Pourtant il existe une façon de procéder plus élaborée que celle proposée ci-dessus, mais néanmoins simple, qui vous permet d éviter ces soucis d accès concurrent à un même fichier (indice : utiliser la commande mv). Groupezvous à trois postes pour établir un protocole évitant toute perte de travail effectué par un collaborateur dans le fichier projet.txt. Vérifiez que le protocole fonctionne, et essayez de convaincre votre enseignant que ce protocole est robuste. Bravo, non seulement, vous venez de concevoir un protocole, mais vous avez vu un problème fondamental en informatique : la synchronisation des accès à une ressource partagée. Un peu de ménage (10 mn) Après avoir édité le fichier projet.txt (suivant un protocole défini ci-dessus), vérifiez dans le terminal que vos changements ont été pris en compte. Expérimentez à cette occasion la commande less à la place de la banale commande cat. Si le fichier fait plusieurs écrans de long, comment localiser rapidement avec cette commande les lignes que vous avez ajoutées? Après votre intervention dans le projet situé chez votre voisin, est-il possible de remettre le contenu de son répertoire PROJET exactement dans l état dans lequel il était avant que vous y fassiez les manipulations décrites ci-dessus? Pourquoi? Revenez dans votre propre répertoire PROJET et regardez si vos voisins y ont créé des fichiers. Notamment, regardez si votre fichier projet.txt existe encore et demandez à voir son contenu pour voir si vos voisins y on fait des contributions intéressantes. Après avoir vérifié que vos voisins ont fini les manipulations de votre projet décrites dans ce TP (ou celles inspirées par leur soif de connaissance), vérifiez si le fichier projet.txt vous appartient encore. Si ce n est pas le cas, faîtes les manipulations nécessaires pour que ce fichier vous appartienne à nouveau (copie, suppression, changement de nom ou peut-être tout simplement une petite touche amicale ). Supprimez toute trace du passage de vos collaborateurs dans votre répertoire.
2.3 Contenu public et contenu privé (15 mn) Dans votre répertoire d accueil (~), créez un répertoire de nom PRIVE. Positionnez les droits de ce répertoire pour que seul l utilisateur propriétaire ait tous les droits dessus, et que les autres entités (groupe et autres) n aient que les droits de traverser ce répertoire (rappel : droit x). Vérifiez. Convenez avec votre voisin de gauche d un nom de répertoire pas trop évident 3 pour stocker votre nouveau projet ultra secret et créez dans le répertoire PRIVE un sous-répertoire au nom choisi. Donnez les droits 777 à ce sousrépertoire. A quoi correspondent ces droits? Demandez à votre voisin de gauche (oui, le même que précédemment) d accéder à votre répertoire. Peut-il y arriver? Et en persévérant? Peut-il créer un fichier ou un répertoire dans le répertoire correspondant à votre projet secret? Pourquoi? Bien, vous désirez maintenant être sûr que ce projet n est bien accessible que des personnes connaissant l existence du projet et le nom du répertoire en question. Faîtes rapidement le vide dans votre Terminal (clear) pour qu aucun indice visuel ne subsiste sur votre écran. Ensuite, communiquez votre nom de login (mais pas le nom de votre projet secret!) à votre voisin de droite (oui, celui qui est un concurrent notoire de votre projet secret) et mettez le au défi d essayer d accéder depuis son ordinateur à votre nouveau projet secret. S il n y parvient pas, est-ce lié au fait qu il est sur un ordinateur différent? Est-ce lié aux droits du répertoire PRIVE? Est-ce lié aux droits du sous-répertoire de PRIVE qui correspond à votre projet secret?