Aller au contenu principal

Session OS — utilisateurs, root et permissions

Cette page décrit la modification de l’image Buildroot pour :

  • définir le mot de passe du compte root ;
  • créer un utilisateur distant ;
  • donner à cet utilisateur l’accès aux ports série du microcontrôleur ;
  • lui permettre d’administrer le nano-ordinateur avec sudo.

La procédure concerne la defconfig leukos_rpi3bplus_defconfig. Pour un autre modèle, reprendre les mêmes fichiers dans son dossier board/leukos/<carte>/.

Fichiers à modifier​

FichierRôle
nodes/os/configs/leukos_rpi3bplus_defconfigSélectionne les paquets Buildroot et contient le hash du mot de passe root.
nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/init.d/S48supervisor-sshCrée l’utilisateur supervisor, installe sa clé SSH et ajoute ses groupes.
nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/leukos/ssh/supervisor_authorized_keysClé publique autorisée pour l’accès SSH.
nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/sudoers.d/supervisorAutorisations sudo de l’utilisateur.

L’overlay est copié dans la racine de l’image Buildroot. Les fichiers placés sous rootfs-overlay/etc deviennent donc des fichiers /etc sur le nano-ordinateur.

Définir le mot de passe root​

Buildroot attend la valeur de BR2_TARGET_GENERIC_ROOT_PASSWD. Il faut fournir un hash, jamais le mot de passe en clair :

cd /var/workspaces/supervisor/apps/leukOS
printf '%s\n' 'MOT_DE_PASSE_TEMPORAIRE' | openssl passwd -6 -stdin

Remplacer ensuite la valeur dans :

nodes/os/configs/leukos_rpi3bplus_defconfig

Exemple de forme attendue :

BR2_TARGET_GENERIC_ROOT_PASSWD="$6$sel$hash_sha512"

Ne pas committer un mot de passe en clair. Après génération d’une image contenant ce hash, le compte root accepte le mot de passe correspondant à ce hash.

Ajouter ou modifier un utilisateur​

Le script S48supervisor-ssh est exécuté au démarrage par BusyBox. Il crée l’utilisateur s’il n’existe pas :

USER_NAME="supervisor"
USER_HOME="/home/${USER_NAME}"
adduser -D -h "${USER_HOME}" -s /bin/sh "${USER_NAME}"

Pour créer un autre utilisateur, dupliquer le bloc avec un nom dédié et un dossier home séparé. Ne pas réutiliser le home ou la clé SSH de supervisor.

La clé publique doit être placée dans :

nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/leukos/ssh/<utilisateur>_authorized_keys

Puis le script doit copier cette clé vers :

/home/<utilisateur>/.ssh/authorized_keys

Permissions attendues :

/home/<utilisateur>/.ssh 0700
/home/<utilisateur>/.ssh/authorized_keys 0600

Groupes nécessaires​

Pour l’utilisateur supervisor, le script ajoute :

addgroup "${USER_NAME}" dialout
addgroup "${USER_NAME}" wheel
  • dialout permet d’ouvrir /dev/ttyACM* et /dev/ttyUSB* pour le microcontrôleur ;
  • wheel identifie les comptes administrateurs ;
  • la règle sudo ci-dessous donne effectivement les droits root.

L’utilisateur doit ouvrir une nouvelle session SSH après l’ajout au groupe. Vérification :

id
ls -l /dev/ttyACM* /dev/ttyUSB*

Autoriser sudo​

Le paquet sudo doit être activé dans la defconfig :

BR2_PACKAGE_SUDO=y

Créer le fichier suivant avec les permissions 0440 :

nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/sudoers.d/supervisor

Contenu recommandé pour l’accès SSH par clé :

supervisor ALL=(ALL) NOPASSWD: ALL

Pour un utilisateur nécessitant un mot de passe, utiliser plutôt :

<utilisateur> ALL=(ALL) ALL

Ne jamais rendre /etc/sudoers modifiable par l’utilisateur. Une erreur de syntaxe peut bloquer sudo ; valider la syntaxe dans l’image ou avec visudo lorsque l’outil est présent.

Recompiler l’image​

Depuis la racine du dépôt :

DEFCONFIG=leukos_rpi3bplus_defconfig ./scripts/build.sh

Ou avec le workflow npm :

npm run os:build:rpi3bplus

Le build doit notamment contenir :

BR2_PACKAGE_SUDO=y
BR2_TARGET_GENERIC_ROOT_PASSWD="$6$..."

Vérification après démarrage​

Sur le nano-ordinateur :

id supervisor
getent group dialout
getent group wheel
sudo -n id
ls -l /etc/sudoers.d/supervisor

Résultats attendus :

  • supervisor appartient à dialout et wheel ;
  • sudo -n id renvoie uid=0(root) pour la règle NOPASSWD ;
  • le fichier sudoers est en 0440 ;
  • un microcontrôleur branché est visible sous /dev/ttyACM* ou /dev/ttyUSB*.

Sécurité et déploiement​

Le mot de passe root donne un accès complet au nano-ordinateur. Après le premier accès, remplacer le secret temporaire et conserver uniquement son hash dans la configuration. Préférer une clé SSH dédiée par utilisateur et retirer les anciennes clés de authorized_keys.

Une modification de la defconfig ou de l’overlay ne change pas une image déjà installée. Il faut reconstruire puis déployer l’image, ou appliquer explicitement les fichiers et redémarrer les services sur la cible.