TP LINUX : MISE EN RÉSEAU D UN SERVEUR LINUX I ACTIVATION D UN SERVEUR TELNET Un serveur telnet permet de passer des commandes sur la machine hébergeant ce serveur telnet, via le réseau, depuis un client quelconque (Linux ou Windows). La connexion au serveur telnet distant à partir du PC client se fera à l aide du logiciel client Telnet.exe qui est déjà disponible en standard sous Windows 98, XP et 2000 ou de la commande telnet sous Linux Kubuntu. Connectez-vous à votre serveur Linux Kubuntu par son adresse IP (telnet.exe puis saisie de l adresse du serveur telnet). Que se passe-t-il?: Nota : Vous pouvez aussi vous connecter en local. Pour cela en console, tapez la commande telnet votre_adresse_ip. Vous vous connectez alors sur votre serveur telnet situé à la même adresse IP que votre client telnet. I.1 DÉMARRAGE D'UNE MACHINE LINUX Pour que le serveur telnet fonctionne différents processus doivent être lancés sur votre serveur Linux Kubuntu. Ce sont les processus sysklogd et telnetd via le processus inetd (chez vous, vous pouvez aussi tester le paquet xinetd). Vous pouvez utiliser les outils de surveillance du système (Système, Surveillance du système) ou la commande ps pour vérifier qu ils sont bien lancés. Processus lancés? Au démarrage du système, le programme «UPstart» génère des évènements de démarrage qui vont être exploités par les scripts contenus dans le répertoire /etc/event.d. Par exemple au démarrage du système, le programme «Upstart» génère un premier évènement «startup». La connaissance de cet évènement permet de déclencher le script «rcs», contenu dans le répertoire /etc/event.d et ceci grâce à la commande «start on» suivie de l évènement déclencheur ici «startup». # rcs - runlevel compatibility # # This task runs the old sysv-rc startup scripts. start on startup stop on runlevel # Note: there can be no previous runlevel here, if we have one it's bad # information (we enter rc1 not rcs for maintenance). console output script runlevel --set S >/dev/null true PREVLEVEL=N RUNLEVEL=S export PREVLEVEL RUNLEVEL exec /etc/init.d/rcs end script Ce script «rcs» va déclencher l exécution du script /etc/init.d/rcs par la commande «exec /etc/init.d/rcs», ce même script va alors déclencher tous les scripts contenus dans le répertoire /etc/rcs. Parmi les différents scripts 1
lancés, on trouve le script networking et le script hostname.sh (qui sont en fait des liens vers les scripts /etc/init.d/networking et /etc/init.d/hostname.sh). Un nouvel évènement sera ensuite généré par le programme «Upstart», cet évènement indiquera le niveau d exécution de votre machine linux. La connaissance de ce «runlevel» (niveau d exécution) permettra de déclencher un autre script dont le nom est /etc/event.d/rcx ou X représente le niveau d exécution. Nota : Sous kubuntu les niveaux d exécution n ont pas la même signification que sur les autres distributions. Il n y a en fait pas vraiment de différence entre le niveau 2 et les niveaux 3,4,5. # rc3 - runlevel 3 compatibility # # This task runs the old sysv-rc runlevel 3 (user defined) scripts. It # is usually started by the telinit compatibility wrapper. start on runlevel 3 stop on runlevel [!3] console output script set $(runlevel --set 3 true) if [ "$1"!= "unknown" ]; then fi end script PREVLEVEL=$1 RUNLEVEL=$2 export PREVLEVEL RUNLEVEL exec /etc/init.d/rc 3 Le script /etc/event.d/rc3 va lui-même déclencher l exécution du script /etc/init.d/rc avec en paramètre le niveau d exécution 3 par la commande «exec /etc/init.d/rc 3», ce même script va alors déclencher tous les scripts contenus dans le répertoire /etc/rc3.d.. Parmi les différents scripts lancés au niveau 3, on trouve le script sysklogd (qui est en fait un lien vers le script /etc/init.d/sysklogd).. Résumé du démarrage /etc/event.d/rcs (mode mono-utilisateur toujours lancé) qui exécute le script /etc/init.d/rcs qui lui lance tous les scripts contenus dans le répertoire /etc/rcs.d /etc/event.d/rcx avec X niveau d exécution Niveau? Cas 0 /etc/init.d/rc0.d Tous les scripts inscrits dans le répertoire /etc/rc0.d. Cas 1 /etc/init.d/rc1.d Tous les scripts inscrits dans le répertoire /etc/rc1.d. Cas 2 /etc/init.d/rc2.d Tous les scripts inscrits dans le répertoire /etc/rc2.d... Cas 6 /etc/init.d/rc6.d Tous les scripts inscrits dans le répertoire /etc/rc6.d Vous pouvez connaître les scripts en attente d évènements en tapant, en root, la commande «initctl list». 2
Nota : Les scripts à lancer au démarrage de la machine peuvent être paramétrés par l utilitaire Réglages du système, Onglets Advanced puis Services du système. Nota : Sur les autres distributions telles FEDORA ou MANDRIVA, le processus de démarrage est quelque peu différent. Après chargement du noyau, la première commande passée est la commande init qui lit le fichier /etc/inittab. Chaque ligne de ce fichier est une instruction. La première instruction consiste à lancer le script /etc/init.d/rcs (mode mono-utilisateur ou single mode), puis la seconde lance le script /etc/init.d/rc avec en paramètre le niveau d exécution. Le niveau 1 correspond au mode mono-utilisateur, les niveaux 2 à 5 correspondent au mode multi-utilisateurs, le niveau 6 sert à relancer la machine. Le script /etc/init.d/rc va lui-même lancer en fonction du niveau d exécution les scripts contenus dans les répertoires de nom /etc/rcx.d ou x représente le niveau d exécution. Parmi les différents scripts lancés au niveau 2, on trouve le script sysklogd (qui est en fait un lien vers le script /etc/init.d/sysklogd).. Résumé du démarrage Commande init première commande lancée qui lit le fichier /etc/inittab /etc/init.d/rcs (mode mono-utilisateur toujours lancé) qui exécute tous les scripts contenus dans le répertoire /etc/rcs.d /etc/init.d/rc niveau (le niveau est passé en paramètre) Niveau? Case 0 /etc/init.d/rc0.d Tous les scripts inscrits dans le répertoire /etc/rc0.d. Case 1 /etc/init.d/rc1.d Tous les scripts inscrits dans le répertoire /etc/rc1.d. Case 2 /etc/init.d/rc2.d Tous les scripts inscrits dans le répertoire /etc/rc2.d... Case 6 /etc/init.d/rc6.d Tous les scripts inscrits dans le répertoire /etc/rc6.d 3
I.2 INSTALLATION DU SERVEUR TELNET Nous constatons que le démon inetd n'est pas lancé. Nous allons commencer par l'installer. Pour cela en console et en super-administrateur passons les commandes suivantes : apt-get update apt-get install inetutils-inetd ceci met à jour la liste des paquets hébergés sur les dépots ceci installe le paquet inetutils-inetd Le démon inetutils-inetd lance d autres processus réseau en utilisant le fichier /etc/inetd.conf. En fait c'est le démon inetutils-inetd qui écoute sur le réseau, lorsqu'il reçoit une demande concernant le démon telnetd, il lance alors le programme in.telnetd. Il nous faut donc installer ce programme. En console et en root, tapez les commandes suivantes : apt-get install telnetd Vérifiez que ce programme est maintenant disponible dans le répertoire /usr/sbin. Cette opération effectuée il faut arrêter le processus inetd par la commande /etc/init.d/inetutils-inetd stop, puis le relancer par la commande /etc/init.d/inetutils-inetd start ou en plus court /etc/init.d/inetutils-inetd restart Connectez-vous en telnet à votre serveur Linux Kubuntu. Que se passe-t-il? Lancez une autre console et tapez maintenant sur votre serveur Linux Kubuntu, une commande netstat l, puis la commande netstat nl. Que constatez-vous? Lancez maintenant sur votre serveur Linux Kubuntu, une commande ps -edf. Dessinez l'arborescence des processus concernant inetutils-inetd et in.telnetd. I.3 UTILISATION DU SERVEUR TELNET Dans votre session telnet, tapez quelques commandes Linux ( ls, who, pwd..) pour tester le bon fonctionnement de la connexion. Déconnectez-vous en tapant exit. Essayez de vous connecter au serveur Linux en fournissant non pas l adresse IP mais le nom de la machine Linux. Que constatez-vous? Déconnectez-vous, puis ouvrez, à l aide de l éditeur DOS, le fichier windows\hosts et ou le fichier windows\hosts.sam sous W98, le fichier winnt\system32\drivers\etc\hosts sous W2000 ou le fichier windows\system32\drivers\etc\hosts sous XP. Associez le nom de votre serveur Linux à son adresse IP. Essayez toujours de vous connecter au serveur Linux, depuis une machine windows, en fournissant non pas l adresse IP mais le nom de la machine Linux. Que constatez-vous? Quelle est l utilité des fichiers hosts? Vous allez maintenant tenter une ouverture de session sur le serveur directement comme administrateur, "root". Notez le message : L'accès à distance est sécurisé, pour accéder à distance et réaliser des opérations d'administration, utilisez le processus ci dessous: ouvrez une session avec votre compte, 4
utilisez la commande «sudo -s» Comment visualisez-vous simplement le fait que vous êtes maintenant en session "super utilisateur"? Fermez la session. II ACTIVATION D UN SERVEUR FTP Un serveur ftp permet de transférer, via le réseau, des fichiers de ou vers la machine hébergeant ce serveur ftp, depuis un client quelconque (Linux ou Windows). La connexion au serveur ftp distant à partir du PC client se fera à l aide d'un logiciel client ftp graphique ou à l'aide de la commande ftp suivie de l'adresse ou du nom du serveur ftp ciblé. Connectez-vous à votre serveur Linux Kubuntu par son adresse IP (commande ftp puis saisie de l adresse du serveur ftp). Que se passe-t-il?: Nota : Vous pouvez aussi vous connecter en local. Pour cela en console, tapez la commande ftp votre_adresse_ip. Vous vous connectez alors sur votre serveur ftp situé à la même adresse IP que votre client ftp. II.1 INSTALLATION DU SERVEUR FTP SUR LE SERVEUR LINUX Il faut suivre la même procédure que pour le serveur telnet. Pour commencer, installez le serveur ftp par les commandes : apt-get update apt-get install ftpd Il nous reste à faire une petite modification dans le fichier inetd.conf. Modifiez la ligne concernant ftp comme suit : ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd -ldp Les options rajoutées permettent de lancer le mode «debbugage» (-d cela permet d'avoir des fichiers log plus complets), de «logger» toutes les connexions (-l) et de permettre le mode de fonctionnement passif (-P c'est à dire que le serveur ouvrira dynamiquement des ports pour réaliser le transfert des données). Cette opération effectuée il faut arrêter et relancer le service inetutils-inetd. Commande à passer en mode console? Connectez-vous à votre serveur Linux Kubuntu par son adresse IP (commande ftp puis saisie de l adresse du serveur ftp). Que se passe-t-il?: Lancez une autre console et tapez maintenant sur votre serveur Linux Kubuntu, une commande netstat l, puis la commande netstat nl. Que constatez-vous? Lancez maintenant sur votre serveur Linux Kubuntu, une commande ps -edf. Dessinez l'arborescence des processus concernant inetutils-inetd et in.ftpd. II.2 UTILISATION DE FTP DANS UN ENVIRONNEMENT GRAPHIQUE Vous devez installer sur votre machine cliente, un client FTP (Filezilla ou l'extension FireFTP de Firefox). En deuxième année, vous devriez savoir paramétrer un nouveau site. 5
Connectez-vous au serveur Linux en utilisant telnet et conservez la fenêtre dans un coin. Ceci vous servira juste à conserver une session sur le serveur pour vérifier que les transferts de fichiers sont bien effectués. Établissez ensuite une connexion FTP au serveur depuis votre PC client en lançant votre client FTP. Vous utiliserez le compte d'accès que vous avez sur le serveur Linux. La connexion établie, votre PC est client FTP et Linux est serveur FTP. Réalisez le transfert d un fichier du client vers le serveur. Listez sous FTP le contenu du répertoire courant sur le serveur pour vérifier le succès du transfert. Réalisez le transfert d un fichier du serveur vers le client. Listez sous FTP le contenu du répertoire courant sur le client pour vérifier le succès du transfert. Créez un nouveau répertoire sur le serveur. Transférez dans ce nouveau répertoire un fichier. Quittez FTP. Nota : Vous pouvez installer sous linux un client graphique «filezilla» ou «gftp» que vous trouverez après installation dans les menus sous Internet gftp ou Internet Filezilla. II.3 UTILISATION DE FTP DANS UN ENVIRONNEMENT TEXTE Sur une machine Windows libre, lancez la fenêtre MSDOS, et tapez la commande ftp suivie de l adresse IP du serveur Linux ou de son nom si vous avez mis à jour le fichier «hosts» sur la machine Windows. Rentrez ensuite votre nom d utilisateur sur Linux et votre mot de passe. Le prompt ftp> doit apparaître. Quel est le répertoire courant sur Linux avec pwd? Lister le contenu de ce répertoire distant avec la commande ls. Créez, sous l explorateur windows, un répertoire «ftp» situé sous la racine du disque et créez un fichier «essai.txt» dans ce répertoire. Envoyez le fichier essai.doc de Windows vers Linux avec les commandes lcd et put. Comment vérifiez-vous le transfert? Détruisez le fichier essai.txt sur la machine Linux avec delete. Comment vérifiez-vous cette destruction? Récupérez le fichier «.bash_history» de Linux avec les commandes lcd et get. Comment vérifiez-vous ce transfert. Sortez avec quit. Nota : Vous pouvez connaître les commandes ftp disponibles en tapant «help» derrrière le prompt ftp. Remarque: Un accès anonyme ne vous permet pas de créer des répertoires, ni de remonter dans l'arborescence du disque sur le site distant. Compléter le TP par un serveur ftp anonyme me paraît judicieux si vous décidez de présenter cette activité à l épreuve E5. III LE FONCTIONNEMENT DES SERVEURS ET LES PORTS D'ÉCOUTE Lorsqu'on installe un serveur (telnet, ftp, web etc.), ce dernier tourne en arrière plan sur votre machine. On dit qu'il écoute. Lorsqu'un client lui fait une demande il la sert. Exemple un navigateur web demande une page web au serveur web situé à l'adresse ip 192.168.1.203. Ce serveur web va chercher la page demandée et la renvoie au client web. Les machines serveurs sont multi-tâches. Plusieurs serveurs peuvent tourner en arrière plan à un moment donné. Alors comment savoir à quel serveur est destinée la demande qui vient d'arriver? En fait chaque serveur tourne sur un numéro de port précis. Ces numéros de ports sont définis dans le fichier /etc/services. Lorsqu'un client émet une demande, il précise l'adresse ip du serveur et le port sur lequel fonctionne ce serveur. 6
Lorsque le paquet arrive sur la machine serveur, le système lit le numéro port présent dans la demande et la fait suivre au bon serveur. Le fichier /etc/services définit le mode de fonctionnement standard des serveurs. Il est toujours possible de faire écouter son serveur sur un port différent du port standard. La commande netstat vous permet de connaître quels sont les ports ouverts sur votre machine et donc quels sont les serveurs en écoute. 7