nsenter et la notion de namespaces
Un namespace donne à un groupe de processus sa propre vue d’une catégorie de ressources du noyau. Les processus partagent toujours le même noyau ; il ne s’agit pas d’une VM distincte.
| Type | Vue isolée |
|---|---|
| Mount | Montages et visibilité des chemins |
| PID | Visibilité et numérotation des processus |
| Network | Interfaces, routes et ports réseau |
| UTS | Nom d’hôte et nom de domaine NIS |
| IPC | Certains mécanismes de communication entre processus |
| User | Correspondance des UID/GID et portée de certains privilèges |
| Cgroup | Vue de la hiérarchie des cgroups |
| Time | Décalages de certaines horloges, notamment monotone et boottime |
Les types sont indépendants. Un namespace de montage permet une organisation des montages distincte sans copier nécessairement les fichiers sous-jacents. Dans notre service, systemd masque /home, isole les répertoires temporaires et met certains montages en lecture seule.
Les namespaces définissent des vues isolées ; les permissions et autres contrôles limitent les opérations possibles dans ces vues. Cette formule est un repère pédagogique, pas une description complète de toute la sécurité Linux : namespaces utilisateur, capabilities, SELinux et filtres peuvent interagir.
Les conteneurs combinent généralement plusieurs namespaces avec des cgroups pour le contrôle des ressources, ainsi que d’autres protections. Un namespace seul ne constitue pas un conteneur complet.
Lire notre commande nsenter
pid=$(systemctl show lab-demo.service -p MainPID --value)
sudo nsenter --target "$pid" --mount -- ls /home
$(...)substitue la sortie de la commande ; l’affectation la stocke dans la variable shellpid.--target "$pid"choisit le processus dont on veut rejoindre les namespaces ; les guillemets protègent la valeur comme un seul argument.--mountne rejoint que son namespace de montage.--termine les options de nsenter ; la suite est la commande à exécuter.sudofournit les privilèges nécessaires pour entrer dans ce namespace.- La commande finale s’exécute puis revient à la session d’origine.
Limite essentielle : rejoindre le namespace de montage ne copie pas l’ensemble des protections du service. La commande reste root avec sudo ; elle ne devient pas automatiquement labdemo et n’hérite pas automatiquement de NoNewPrivileges, des filtres seccomp ou du contexte SELinux du service.
Pour tester aussi avec le compte du service :
sudo nsenter --target "$pid" --mount -- \
runuser -u labdemo -- touch /var/lib/lab-demo/test
runuser change l’identité d’exécution, mais ce test ne reproduit toujours pas toute la sécurité du processus réel.
Sans commande finale, nsenter ouvre un shell : le shell peut afficher root@lab-linux-01:/#, puis un /tmp ne contenant pas le fichier de la session normale. Le prompt root vient de sudo ; / est le répertoire courant du shell, pas une preuve d’une connexion à une autre machine. Sortie : exit.
Toujours récupérer à nouveau le MainPID après un redémarrage. Si le service est arrêté (MainPID=0), ne pas lancer ces commandes ; commencer par son statut.