Tutorial

Comment utiliser nsh pour exécuter des commandes à distance sécurisées sur Ubuntu 18.04

SecurityUbuntu 18.04

Introduction

Il peut souvent être difficile de gérer plusieurs machines au quotidien. Si Secure Shell (SSH) est un bon choix pour l'accès à distance, le protocole lui-même présente quelques inconvénients en termes de commodité et de sécurité.

Par exemple, les machines distantes doivent avoir une adresse IP publique et un port de transfert pour pouvoir y accéder, ce qui les expose à Internet, ou du moins à un réseau plus vaste. Cela est particulièrement préoccupant si vous utilisez un mot de passe pour l'authentification au lieu d'une paire de clés publiques et privées. De plus, si vous ne connaissez pas à l'avance la clé publique de la machine distante, vous pourriez être vulnérable à une attaque de type « l'homme du milieu ». Et de nombreuses machines distantes auxquelles vous voulez accéder n'ont pas d'adresse IP publique, ou ont une adresse IP dynamique que vous ne connaissez peut-être pas.

De plus, le SSH nécessite une connexion par session à distance. Si un utilisateur doit exécuter une seule commande sur des centaines ou même des milliers de machines, il doit d'abord établir une connexion avec chaque machine au moyen d'un handshake (établissement d'une liaison) TCP, ce qui est moins efficace.

NKN Shell, ou nsh, est une alternative à SSH qui fournit un moyen pratique et sûr d'exécuter des commandes à distance. nsh tire profit du réseau public mondial de NKN, qui fournit une transmission de données sécurisée et décentralisée. L'architecture utilise des adresses uniques qui contiennent une clé publique utilisée à la fois pour le routage et le cryptage de bout en bout sans aucune infrastructure à clé publique (PKI). Le réseau n'exige pas non plus que le serveur distant ait une adresse IP publique. Le serveur distant doit seulement avoir accès à Internet et être capable d'établir des connexions HTTP sortantes et des connexions websocket. Par conséquent, vos machines distantes ne sont pas exposées au réseau ouvert Internet.

Dans ce tutoriel, vous utiliserez le démon NKN shell et les applications NKN Shell Client Xterm pour exécuter des commandes sur une machine distante. Pour ce faire, vous devez installer et configurer le démon NKN Shell sur une machine distante avec accès à Internet, générer une paire de clés et établir votre connexion à partir d'un client.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

Étape 1 - Installation du démon NKN Shell sur un serveur distant

Tout d'abord, installez le démon shell NKN (nsd) sur votre serveur. Cette application appellera nkn-multiclient, qui se connectera au réseau public de NKN et obtiendra une adresse pour le routage. Le démon écoutera alors les commandes shell entrantes des clients authentifiés et en liste blanche, exécutera ces commandes, puis renverra les résultats.

Commencez par télécharger le dernier binaire nshd pré-construit de GitHub

  • wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

Décompressez le fichier :

  • tar -zxvf linux-amd64.tar.gz

Ensuite, déplacez les fichiers dans le répertoire /usr/local/bin pour qu'ils soient disponibles dans tout le système :

  • sudo mv ./linux-amd64/* /usr/local/bin/

Puis vous configurerez ceci pour qu'il s'exécute comme un processus de démon utilisant Systemd afin qu'il redémarre si le serveur est réinitialisé.

Créez un fichier appelé nshd.service dans /etc/systemd/system :

  • sudo nano /etc/systemd/system/nshd.service

Ajoutez la définition de service suivante au fichier pour configurer le service :

/etc/systemd/system/nshd.service
[Unit]
Description=NKN Shell Daemon
After=network.target

[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/local/bin/nshd

[Install]
WantedBy=multi-user.target

Pour en savoir plus sur les fichiers d'unité Systemd, consultez la rubrique Comprendre les unités Systemd et les fichiers d'unité. 

Enregistrez le fichier et quittez l'éditeur. Ensuite, activez et démarrez le service nshd avec les commandes suivantes :

  • sudo systemctl enable nshd.service
  • sudo systemctl start nshd.service

Exécutez la commande suivante pour vous assurer que le service est actif et démarré :

  • sudo systemctl status nshd.service

Vous verrez que le statut est actif :

Output
● nshd.service - NKN Shell Daemon Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago Main PID: 3457 (nshd) Tasks: 10 (limit: 1152) CGroup: /system.slice/nshd.service └─3457 /usr/local/bin/nshd Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon. Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/ Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba

Pour vous connecter à votre serveur, vous devez obtenir son adresse NKN, que vous pouvez trouver dans la sortie de la commande précédente. Vous pouvez également exécuter la commande suivante pour obtenir l'adresse :

  • nshd addr

Vous verrez apparaître votre adresse :

Output
e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

Prenez note de cette adresse, car vous en aurez besoin pour vous connecter à votre serveur.

Maintenant que le démon fonctionne et écoute, vous pouvez configurer le client web pour qu'il parle au serveur.

Étape 2 - Configuration des autorisations pour le client NKN Shell

Vous aurez besoin d'un client compatible qui puisse se connecter à la machine distante. Dans ce tutoriel, vous utiliserez NKN Shell Client Xterm, un client shell NKN basé sur le web. Il existe plusieurs façons de le gérer :

  • Utilisez la version hébergée à l'adresse https://nsh.nkn.org/. Notez que même si cette page web est hébergée sur un serveur, il s'agit en fait d'une application web purement locale qui s'exécute dans votre navigateur.
  • Obtenez le code source et hébergez-le vous-même.
  • Utilisez l'extension nShell Chrome.

Dans ce tutoriel, vous utiliserez la version hébergée. Sur votre machine locale, ouvrez votre navigateur web et naviguez jusqu'à https://nsh.nkn.org. Vous verrez un écran de bienvenue :

Le client Shell 

Cliquez sur Generate New Key Pair (Générer une nouvelle paire de clés). Vos clés seront générées et affichées comme indiqué dans l'image suivante :

La paire de clés générée

Remarque: Lorsque vous générez une nouvelle paire de clés, vous voyez apparaître une seed secrète. Gardez cette seed secrète en sécurité, tout comme vous le feriez avec votre clé privée SSH. Toute personne qui possède cette seed secrète peut l'utiliser pour régénérer votre clé publique et ensuite exécuter des commandes sur vos machines à distance. Votre navigateur se souviendra de cette seed, mais vous devriez la copier dans un endroit sûr afin de pouvoir la réutiliser sur une nouvelle machine.

Sauvegardez la seed secrète dans un endroit sûr. Vous pourrez l'utiliser plus tard pour régénérer votre clé publique, afin de pouvoir vous connecter à partir d'une autre machine cliente.

Comme il s'agit d'une nouvelle paire de clés, vous devez ajouter la clé publique au fichier /etc/nshd/authorized_pubkeys sur votre serveur.

/etc/nshd/authorized_pubkeys a un rôle similaire à celui du fichier ~/authorized_keys qui contrôle quelles clés publiques SSH peuvent se connecter. Le fichier authorized_pubkeys peut spécifier quel utilisateur est associé à une clé. Pour des raisons de sécurité, vous devrez vous connecter en utilisant un utilisateur non root dans ce tutoriel. Vous associerez donc la clé publique générée à votre utilisateur sammy que vous avez créé dans le guide de configuration initiale du serveur, dans le pré-requis de cet article.

Pour associer un utilisateur à la clé publique, vous devez obtenir l'identifiant de l'utilisateur (UID) et l'identifiant du groupe (GID) de cet utilisateur. Exécutez la commande suivante sur votre serveur lorsque vous êtes connecté en tant qu'utilisateur sammy :

  • id

Vous verrez l'UID et le GID de l'utilisateur :

Output
uid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)

Ouvrez maintenant le fichier authorized_pubkeys dans votre éditeur :

  • sudo nano /etc/nshd/authorized_pubkeys

Ajoutez une seule ligne contenant la clé publique, uid, et gid, séparés par des espaces :

authorized_pubkeys
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

Sauvegardez le fichier.

Vérifiez que le fichier contient le bon contenu :

  • cat /etc/nshd/authorized_pubkeys

Vous verrez votre clé apparaître à l'écran :

Output
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

Redémarrez ensuite le démon nshd pour appliquer les changements :

  • sudo systemctl restart nshd.service

Maintenant, testons le tout en nous connectant au serveur et en exécutant une commande.

Étape 3 - Envoi d'une commande à la machine distante et réception d'une réponse

Dans NKN Shell Client, entrez votre adresse nshd distante à l'étape 1, ainsi qu'un identifiant client optionnel :

Le site web de la nsh avec l'adresse à distance complétée

Cliquez sur Connect (Se connecter) pour lancer la connexion.

Vous serez connecté à votre machine distante et une invite de terminal s'affichera dans le navigateur. D'ici, vous pouvez l'utiliser tout comme les SSH. Par exemple, exécutez la commande suivante pour passer au répertoire /etc/nshd :

  • cd /etc/nshd

Ensuite, dressez la liste de son contenu :

  • ls

Vous verrez le contenu de l'annuaire :

Output
authorized_pubkeys wallet.json wallet.pswd

Vous pouvez vous déconnecter en tapant exit. Lorsque vous devez vous reconnecter, revisitez l'interface web et entrez vos coordonnées de connexion. Si vous générez une nouvelle paire de clés, vous devrez ajouter la nouvelle clé publique à votre serveur.

Conclusion

Dans ce tutoriel, vous avez installé et configuré nsh pour envoyer des commandes à une machine distante de manière sûre et pratique. nsh est un excellent moyen d'accéder à vos machines distantes lorsque vous devez exécuter rapidement une commande pour obtenir le dernier état d'un service ou jeter un coup d'œil à certains paramètres de configuration. L'application est basée sur le réseau public mondial de NKN, et son utilisation est gratuite. Vous pouvez donc l'intégrer dès aujourd'hui à votre propre application ou flux de travail.

Vous pouvez également explorer nkn-tunnel, qui supporte SSH ou toute autre application basée sur TCP.

0 Comments

Creative Commons License