Installer RetroNAS avec LXC

Guide d'installation de RetroNAS dans un conteneur LXC.

Installer RetroNAS avec LXC

Au sommaire :

  • 1-Qu'est-ce que RetroNAS ?
  • 2-Prérequis
  • 3-Création d'un conteneur LXC privilégié
  • 4-Créer un compte utilisateur
  • 5-Configurer OpenSSH
  • 6-Créer un partage NFS
  • 7-Monter un partage NFS
  • 8-Installation de RetroNAS
  • 9-Chemin des scripts Ansible

1-Qu'est-ce que RetroNAS ?

RetroNAS est une suite d'outils conçu par Dan Mons qui vous simplifiera la vie dans la gestion de votre ludothèque dématérialisée. Il propose les services suivants :

  • Samba (protocole de partage de fichiers)
  • Netatalk - AppleTalk AFP
  • EtherDFS DOS file sharing
  • lighttpd HTTP / web server
  • ProFTPd FTP (serveur FTP)
  • tftp Trivial FTP (serveur TFTP)
  • OpenSSH Secure Shell, SCP, SFTP
  • Telnet legacy remote access
  • Nintendo 3DS Homebrew FBI installer QR code generator (installation de jeux 3DS via des QR code)
  • Sony PlayStation 2 OpenPS2Loader SMB (partage de jeux via le protocole SMB)
  • Sony PlayStation 3 ps3netsrv (partage de jeux PS3)
  • MiSTer FPGA CIFS/SMB (partage de jeux via le protocole SMB)
  • Syncthing (synchronisation et partage de fichiers)
  • Cockpit (interface d'administration web)
  • WebOne legacy web browser proxy

Et encore pas mal d'idées pour les mois à venir.

Ideas · danmons/retronas Wiki
Use a Raspberry Pi, old computer or VM as network storage for different retro computers and consoles - Ideas · danmons/retronas Wiki

Là où RetroNAS devient très intéressant, c'est qu'il utilise l'outil d'automatisation Ansible pour installer les différents services.

Avec RetroNAS, on va faire d'une pierre, trois coups :

  • S'amuser à se faire une magnifique installation domestique pour les besoins de nos machines rétro et autres émulateurs
  • Apprendre comment fonctionne les différents services
  • Récupérez les scripts Ansible et s'en servir pour se former sur cet outil d'automatisation très demandé en entreprise et booster sa carrière

Je vous invite également à regarder ces deux vidéos de présentation de la chaîne RetroRGB.

2-Prérequis

Pour les besoins de ce tutoriel, il vous faut un serveur sous Proxmox VE.

Guide d’installation de Proxmox VE
Guide d’installation de Proxmox VE

Au vu de ce que demande RetroNAS, une machine virtuelle est beaucoup trop gourmande en ressources.

De plus, nous n'allons pas l'installer directement dans Proxmox VE (pour des raisons de sécurité évidente).

Donc pour ce tutoriel, nous allons installer RetroNAS dans un conteneur LXC et plus encore, dans un conteneur "privilégié".

Privilégié ? Pardon, j'ai bien lu ? "privileged" ? Le machin chose qui peut permettre à un attaquant d'infiltrer ton serveur en mode "GROOT" ? C'est bon, mon cœur lâche.....

Tranquilla!!!! Nous allons voir comment sécuriser au maximum le conteneur LXC en adoptant les bonnes pratiques.

Note : Debian est recommandé mais Ubuntu fonctionne également, c'est le système que j'utilise pour ce tutoriel.

3-Création d'un conteneur LXC privilégié

Pour commencer, téléchargez un template Ubuntu 22.04 LTS.

Vous devriez le trouver à cet endroit.

Cliquez sur "Create CT".

General

  • CT ID : choisissez un identifiant disponible
  • Hostname : nommez votre conteneur
  • Password/Confirm password : choisissez un mot de passe et confirmez le
  • SSH public key (recommandé) : indiquez votre clé SSH publique pour vous connecté sans mot de passe

Décochez les cases "Nesting" (pas besoin de créer des conteneurs dans un conteneur) et "Unprivileged container" car nous souhaitons avoir accès à plus de privilégés de la part du système hôte comme l'accès à des partages SMB ou NFS.

Template

  • Storage : sélectionnez le stockage qui contient le template
  • Template : sélectionnez le template Ubuntu 22.04 LTS

Disks

  • Storage : sélectionnez "local-lvm"
  • Disk size (GiB) : laissez la taille par défaut

CPU

  • Cores : 1 core suffit pour Pi-hole à titre domestique

Memory

  • Memory (Mib)/Swap (Mib) : laissez la taille par défaut

Network

  • IPv4/CIDR : indiquez une adresse IP statique.
  • Gateway (IPv4) : Indiquez la passerelle de votre réseau local.

DNS

  • DNS domain/DNS servers : laissez par défaut ou indiquez celui que vous préférer (Cloudflare/Google pour l'exemple).

Vérifiez que tout est bon puis validez.

Allez dans les options du conteneur et cliquez sur "Features".

Cochez NFS et validez. C'est très important pour la suite, vous allez comprendre.

Note : les options NFS et SMC/CIFS ne sont pas disponibles pour un conteneur "non privilégié"

4-Créer un compte utilisateur

Démarrez votre conteneur, connectez vous en SSH (ou via l'interface web de votre serveur PVE) et commencez par créer un utilisateur avec la commande "adduser".

root@retronas:~# adduser retronas

Ajoutez l'utilisateur au groupe "sudo".

root@retronas:~# sudo usermod -aG sudo retronas

Par défaut, seul le compte root est disponible dans un conteneur LXC. Vous savez, le compte qui a ABSOLUMENT tout les droits.

Pour plus d'informations.

adduser [Wiki ubuntu-fr]

5-Configurer OpenSSH

Abordons la sécurité avec OpenSSH. Étant donné que c'est un conteneur non privilégié qui peux permettre à un attaquant de s'infiltrer au cœur du système hôte (le conteneur étant qu'un processus pour ce dernier), nous souhaitons le sécuriser au maximum pour éviter toute compromission.

On est dans un cadre domestique mais vous allez apprendre pas mal de choses dans cette partie 6 qui vous serviront pour plus tard.

Vous verrez en tapant "cat /root/.ssh/authorized_keys" la clé publique de votre poste client que vous avez injecté lors de la création du conteneur LXC et qui vous permet de vous authentifier sans mot de passe.

Mais nous ne voulons PAS nous connecté au conteneur LXC via l'authentification par clé SSH avec le compte "root" mais plutôt avec le compte "retronas".

Avec le compte "root", vous tapez la commande "rm -rf * /" et vous supprimer le système tout entier.

Le compte root, c'est le compte "Super Sayajin" des systèmes GNU/Linux.

Nous allons désactiver l'authentification par le compte root en modifiant le fichier "sshd_config".

nano /etc/ssh/sshd_config
  • Retrouvez la ligne "# Authentication:"
  • En dessous, vous allez trouver la ligne PermitRoottLogin"
  • Décochez là et mettez à la place "PermitRootLogin no"

Le résultat avant et après.

Redémarrez le service ssh.

Effectuez un test sur votre poste client, tapez "ssh root@192.168.0.10" (mettez l'adresse IP que vous avez indiqué) et vous ne devriez plus avoir accès au conteneur avec le compte root avec l'authentification par clé SSH.

Maintenant, tapez la commande suivante pour copiez la clé SSH de votre poste client au conteneur LXC en indiquant bien le compte "retronas" et validez en tapant le mot de passe du compte.

ssh-copy-id retronas@192.168.0.10

Bravo!!! Vous avez copier votre clé. Maintenant, tentez de vous connecté sur votre poste client.

ssh retronas@192.168.0.10

Yeahh!!!!! Maintenant, nous allons aller plus loin en désactivant l'authentification par mot de passe.

Pas de panique. Vous pourrez toujours vous authentifier par mot de passe via l'interface de Proxmox VE mais nous allons seulement le bloquer pour les connexions à distance.

Modifiez de nouveau le fichier "sshd_config".

sudo nano /etc/ssh/sshd_conf
  • Retrouvez la ligne "#PasswordAuthentication yes"
  • Décochez là
  • Indiquez "PasswordAuthentication no"

Redémarrez le service ssh.

sudo systemctl restart ssh

Tentez une connexion sur un poste non authentifié et vous verrez le message "Permission denied" s'affiché pour indiquer qu'il n'est plus possible de se connecté via un mot de passe à distance.

Enfin, mettez à jour votre conteneur.

retronas@retronas:~$ sudo apt update && sudo apt upgrade -y

6-Créer un partage NFS

Nous souhaitons pour les besoins de RetroNAS stocker nos contenus dans un partage distant. Le protocole NFS est tout désigné et la plupart des NAS du commerce gére cette fonctionnalité.

Pour cette partie, je vais vous partager ma configuration personnelle avec mon NAS QNAP.

Si vous voulez créer un partage NFS à partir d'un poste client ou un serveur Linux, je vous conseille ce tutoriel de LinuxBabe qui m'a énormement servis à mes débuts.

How to Set Up NFS Share on Ubuntu 22.04, 20.04 - LinuxBabe
NFS stands for Network File System. This tutorial shows you how to configure NFS share on Ubuntu 16.04. We will configure the NFS server and client.

Note : je vais parler à la première personne car je parle de ma configuration personnelle et le configuration d'un partage NFS varie selon le matériel utilisé.

Sur mon NAS QNAP, je vais dans Service réseau, Win/Mac/NFS, Service NFS et je clique sur "Cliquez ici pour régler les droits d'accès NFS du partage réseau".

Dans "Droit d'accès invité", je sélectionne "Refuser l'accès". Je veux que personne y accède dans mon réseau local.

Ensuite, je vais dans "Accès hôte NFS"

Et j'indique les informations suivantes :

  • Droits d'accès : Aucune limite pour celui qui aura accès à ce dossier partagé
  • Adresse IP ou nom de domaine autorisé : j'indique l'adresse IP du serveur qui utilisera le partage

Cela veut dire que le partage NFS ne sera visible que deux dont j'aurai communiqué l'adresse IP (le conteneur RetroNAS et mon PC portable).

Je valide le tout et on passe à la suite.

7-Monter un partage NFS

Installez le paquet "nfs-common"

sudo apt install nfs-common

Créez le dossier "retronas" à la racine de "/mnt" (mount)

sudo mkdir /mnt/retronas

Ouvrez le fichier "/etc/fstab"

sudo nano /etc/fstab

Et ajoutez le point de montage.

  • 192.168.0.219 : l'adresse IP de mon NAS QNAP
  • :/retronas : le partage NFS que j'ai créer
  • /mnt/retronas : le dossier que j'ai créer dans le conteneur et qui servira de point de montage pour le partage NFS
  • nfs : j'indique que c'est un partage NFS
192.168.0.219:/retronas /mnt/retronas nfs rw,soft,intr,noatime,x-gvfs-show

Montez le partage.

sudo mount -a

Et vérifiez qu'il est bien visible dans le conteneur.

df -h

On vois bien le partage NFS.

8-Installation de RetroNAS

Installez curl pour récupérez des fichiers distants.

sudo apt install curl -y

Récupérez le script d'installation de RetroNAS avec la commande "curl".

curl -O https://raw.githubusercontent.com/danmons/retronas/main/install_retronas.sh

Appliquez les droits d’exécution du script avec la commande "chmod a+x" qui signifie ajouter l’exécution (a pour add + x pour exécuter).

Aieeeeee!!!!!! Le travail de compréhension ça paie un jour!!!!!

chmod a+x ./install_retronas.sh

Enfin, exécutez le script bash.

sudo ./install_retronas.sh

Dés que c'est fini :

  • Tapez la commande "retronas"
  • Appuyez sur "Entrée" pour valider
  • Tapez "AGREE" pour valider les CGU

Ensuite, indiquez le nom de l'utilisateur qui utilisera cette instance. Pour ma part, c'est retronas.

Validez la configuration de l'utilisateur puis choisissez un groupe. Pour ma part, personne d'autre que moi utilisera RetroNAS donc j'utilise le groupe de l'utilisateur.

Validez la configuration du groupe.

Par défaut, l'option "1" sera choisis et c'est ce qui nous convient. La deuxième est adapté aux vieux écrans d'ordinateurs.

On souhaite que le dossier par défaut ne soit pas "/data/retronas" mais plutôt "/mnt/retronas" (le partage NFS).

Indiquez le point de montage.

Et validez.

9-Chemin des scripts Ansible

Vous retrouverez tout les scripts Ansible dans "/opt/retronas/ansible".

cd /opt/retronas/ansible

N'hésitez pas à en faire une sauvegarde, à analyser et à les utiliser pour votre usage domestique.

On utilisera l'interface web Cockpit pour le fun et pour permettre à ceux qui ne connaissent pas très bien Linux de pouvoir mieux comprendre le système.

Une prochaine fournée d'articles est en préparation, restez connectés!!!!

Sources :

GitHub - danmons/retronas: Use a Raspberry Pi, old computer or VM as network storage for different retro computers and consoles
Use a Raspberry Pi, old computer or VM as network storage for different retro computers and consoles - GitHub - danmons/retronas: Use a Raspberry Pi, old computer or VM as network storage for diffe...
Installing RetroNAS · danmons/retronas Wiki
Use a Raspberry Pi, old computer or VM as network storage for different retro computers and consoles - Installing RetroNAS · danmons/retronas Wiki
r/retroNAS
r/retroNAS: RetroNAS is a suite of tools designed to turn a low cost Raspberry Pi, old computer or even Virtual Machine into a NAS (Network Attached …