Monday, July 4, 2016

CentOS - à la ligne de commande - 04 : Telnet et plus

Dans ce billet, je vais jeter un coup d'oeil sur trois aspects de Linux qui n'ont sans doute pas a priori un rapport bien clair entre eux :

  • telnet
  • firewalld
  • sudo

Voici ce qui relie ces trois éléments et en fait les sujets de ce billet de blogue.

Au fond, c'est quelque chose d'aussi banal que pratique.

J'avais l'habitude, en composant mes billets de blogue, de sélectionner les caractères que je tapais à la ligne de commande, de les copier et puis de les coller à tel ou tel endroit dans le billet de blogue. Cela fonctionnait à la perfection dans VMware Workstation avec Windows (une fois les outils VMware installés) mais pas du tout avec Linux (et cela même après avoir installé les outils VMware). J'ai essayé une session SSH depuis un client Windows avec Putty mais les opérations copier/coller n'étaient pas efficaces, là non plus. Je me suis alors demandé si je pourrais mieux réussir avec le client Telnet de Windows, à condition d'autoriser des connexions Telnet entrantes du côté Linux.

Cette tentative constitue la toile de fond de ce billet.


Telnet (et firewalld)

J'ai donc commencé par installer le client Telnet sur LX1 (le nom de hôte de ma machine virtuelle Linux) et autoriser les connexions entrantes. Voici comment je m'y suis pris...

1. J'installe le client Telnet :

yum install telnet telnet-server


2. Je fais démarrer le service et le configure afin qu'il s'active au démarrage.

systemctl start telnet.socket
systemctl enable telnet.socket

Remarque : j'en ai profité pour apprendre à gérer les services sous Linux avec la commande systemctl.


3. Je modifie les règles du pare-feu pour autoriser les connexions entrantes au port 23 (Telnet).

firewall-cmd --permanent --add-port=23/tcp
firewall-cmd --reload

Remarque : la seconde commande fait que le changement prenne effet tout de suite et sans attendre le redémarrage du client.

Remarque : "iptables" était le pare-feu de préférence pour les versions précédentes de RHEL/CentOS, notamment les versions 5 et 6. Désormais, il est recommandé d'utiliser "firewalld" bien que nous puissions encore utiliser iptables (si nous y tenons).


Et malgré tout cela... je n'arrive pas à établir une connexion.

C'est parce que, jusqu'ici, je me suis contenté d'ouvrir des sessions sous "root".

En fait, nous devrions éviter d'utiliser le compte root et préférer d'autres comptes dits "standard". C'est le même principe dans le monde de Windows. Nous ne devrions pas utiliser, sauf raison exceptionelle, le compte "administrator" par défaut (ou dans le cadre d'Active Directory, le compte de l'administrateur de domaine par défaut).

J'ai maintenant deux options. Je pourrais autoriser les connections de root via Telnet. Mais, même dans ce réseau d'essai, sans aucune donnée confidentielle à sauvegarder, je désapprouve ces entorses aux bonnes pratiques de sécurité. Mieux avisé, je pourrais plutôt (seconde option) créer un simple compte de base tout en lui accordant la capacité de recourir à sudo en cas de besoin.

Remarque : nous ferions mille fois mieux d'utiliser SSH au lieu de Telnet. J'ai bien utilisé SSH pour mes premiers exercices sous Linux mais la fonction copier/coller (pour que je puisse coller les commandes exécutées dans mes textes de blogue) n'était pas efficace. C'est d'ailleurs la seule raison pour laquelle j'ai envisagé l'idée, a priori folle, de recourir à Telnet. Avec celui-ci, à une console de Windows, je peux sélectionner du texte, le copier, et puis le coller dans mes billets de blogue ou simplement dans mes brouillons.


sudo

D'abord, je veux résumer ce qu'est sudo afin que ce soit clair non seulement pour le lecteur mais déjà pour moi-même !

sudo est un mécanisme commun aux systèmes Linux/Unix qui permet à de simples utilisateurs, avec des permissions limitées, d'exécuter des commandes avec les permissions de "root" (soit le "compte administrateur par défaut" pour ceux qui connaissent mieux Windows). Cela, c'est le principe. La mise en oeuvre exacte varie selon les versions de Linux/Unix et ces variations dépassent le cadre de ce billet de blogue. Au fond, il s'agit de créer un compte d'utilisateur simple ou "standard" et d'ajouter ce compte au groupe d'utilisateurs autorisés à exécuter des commandes avec les privilèges de root. Pour des raisons historiques, remontant aux années 1960 (oui !), le groupe en question s'appelle "wheel" ("roue" en français). Au préalable, il faut modifier le fichier de configuration /etc/sudoers afin d'activer cette fonction.

Remarque : une autre option existe : su. Nous pouvons agir en tant qu'un autre utilisateur en tapant "su", le nom de l'utilisateur, et puis, à l'invite, le mot de passe de cet utilisateur dont nous prenons l'identité. Avec sudo, nous n'avons pas besoin de connaître le mot de passe de root. A condition d'être membre du groupe "wheel", nous pouvons exécuter des commandes avec les privilèges de root.


1. J'ouvre le fichier de configuration /etc/sudoers avec la commande visudo.

Remarque : il suffit de taper "visudo" pour ouvirir le fichier en question.

2. Je supprime le carré devant la ligne suivante :



3. Je crée un compte utilisateur simple que je nommerai "boss".

useradd boss
passwd boss


4. J'ajoute l'utilisateur au groupe "wheel" :

usermod -aG wheel boss

Ensuite, je vérifie que le compte "boss" est bien membre du groupe  "wheel" et que les commandes que j'envoie s'exécutent bien comme si j'étais root :



Avec "su" ("substitute user"), je "deviens" boss et dois saisir son mot de passe.

Je tape "groups" et les groupes dont boss est membre s'affichent.

Puis, j'exécute la commande "whoami" précédée de "sudo". C'est "root" qui s'affiche tout en bas (à gauche dans la capture d'écran ci-dessus).

***


Et maintenant, essayons de voir si je suis capable d'ouvrir une session Telnet avec le compte boss...


Oui ! Cela réussit. Mieux encore, les objets s'affichent en couleur, bleu désignant les répertoires par exemple.

Et j'atteins l'objectif de pouvoir copier/coller du texte pour mes billets de blogue :

Kernel 3.10.0-327.el7.x86_64 on an x86_64
localhost login: boss
Password:
Last login: Thu Jun 30 21:41:54 on tty1
[boss@localhost ~]$
[boss@localhost ~]$ ls
[boss@localhost ~]$ ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt [snip]
[boss@localhost ~]$

(oui, j'ai copié et collé ce qu'on voit dans la capture d'écran plus haut).

No comments:

Post a Comment