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
| Fichier | Rôle |
|---|---|
nodes/os/configs/leukos_rpi3bplus_defconfig | Sélectionne les paquets Buildroot et contient le hash du mot de passe root. |
nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/init.d/S48supervisor-ssh | Crée l’utilisateur supervisor, installe sa clé SSH et ajoute ses groupes. |
nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/leukos/ssh/supervisor_authorized_keys | Clé publique autorisée pour l’accès SSH. |
nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/sudoers.d/supervisor | Autorisations 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
dialoutpermet d’ouvrir/dev/ttyACM*et/dev/ttyUSB*pour le microcontrôleur ;wheelidentifie 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 :
supervisorappartient àdialoutetwheel;sudo -n idrenvoieuid=0(root)pour la règleNOPASSWD;- 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.