L'exécution unshare -m
donne au processus appelant une copie privée de son espace de noms de montage et dissocie également les attributs du système de fichiers afin qu'il ne partage plus son répertoire racine, son répertoire actuel ou ses attributs umask avec aucun autre processus.
Alors, que dit le paragraphe ci-dessus? Essayons de comprendre à l'aide d'un exemple simple.
Terminal 1:
Je fais les commandes ci-dessous dans le premier terminal.
#Creating a new process
unshare -m /bin/bash
#creating a new mount point
secret_dir=`mktemp -d --tmpdir=/tmp`
#creating a new mount point for the above created directory.
mount -n -o size=1m -t tmpfs tmpfs $secret_dir
#checking the available mount points.
grep /tmp /proc/mounts
La dernière commande me donne la sortie comme,
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
Maintenant, j'ai également fait les commandes suivantes.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
La sortie de la ls
commande est,
ls -lFa
total 4
drwxrwxrwt 2 root root 80 Sep 3 22:23 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
-rw-r--r-- 1 root root 0 Sep 3 22:23 hello
-rw-r--r-- 1 root root 0 Sep 3 22:23 helloagain
Alors, quel est le gros problème en faisant tout cela? Pourquoi devrais-je le faire?
J'ouvre maintenant un autre terminal ( terminal 2 ) et exécute les commandes ci-dessous.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
La sortie est comme ci-dessous.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
Les fichiers hello
et helloagain
ne sont pas visibles et je me suis même connecté en tant que root pour vérifier ces fichiers. L'avantage est donc que cette fonctionnalité nous permet de créer un système de fichiers temporaire privé que même les autres processus appartenant à la racine ne peuvent pas voir ou parcourir.
Depuis la page de manuel de unshare
,
mount namespace Le montage et le démontage de systèmes de fichiers n'affecteront pas le reste du système (indicateur CLONE_NEWNS), à l'exception des systèmes de fichiers qui sont explicitement marqués comme partagés (avec mount --make-shared; voir / proc / self / mountinfo pour les indicateurs partagés).
Il est recommandé d'utiliser mount --make-rprivate ou mount --make-rslave après unshare --mount pour vous assurer que les points de montage dans le nouvel espace de noms ne sont pas vraiment partagés de l'espace de noms parent.
La mémoire utilisée pour l'espace de noms est VFS qui provient du noyau. Et - si nous le configurons en premier lieu - nous pouvons créer des environnements virtuels entiers dans lesquels nous sommes l'utilisateur root sans autorisations root.
Les références:
L'exemple est encadré à l'aide des détails de ce billet de blog . De plus, les citations de cette réponse proviennent de cette merveilleuse explication de Mike . Une autre lecture merveilleuse à ce sujet peut être trouvée dans la réponse d' ici .