GNU/Linux >> Tutoriels Linux >  >> Linux

points de montage du système de fichiers privé par processus

Exécution de unshare -m donne au processus appelant une copie privée de son espace de noms de montage et annule également le partage des 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 un 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 sous la forme,

tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0

Maintenant, j'ai également effectué les commandes suivantes.

cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa

La sortie du ls la 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 problème dans tout cela ? Pourquoi devrais-je le faire ?

J'ouvre un autre terminal maintenant (terminal 2 ) et exécutez 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.

À partir de la page de manuel de unshare ,

mount namespace Monter et démonter des systèmes de fichiers n'affectera 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-rslaveafter unshare--mount pour s'assurer que les points de montage dans le nouvel espace de noms ne sont vraiment pas partagés de l'espace de noms parental.

La mémoire utilisée pour l'espace de noms est VFS qui provient du noyau. Et - si nous le configurons correctement en premier lieu - nous pouvons créer des environnements virtuels entiers dans lesquels nous sommes l'utilisateur root sans autorisations root.

Références :

L'exemple est encadré en utilisant les détails de ce billet de blog. En outre, 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.


Si vous avez installé bubblewrap sur votre système, vous pouvez le faire facilement en une seule étape :

bwrap --dev-bind / / --tmpfs /tmp bash

Dans l'exemple ci-dessus, bash interne aura sa propre vue sur /tmp.

Solution inspirée de la réponse de @Ramesh - merci pour cela !


Linux
  1. Exemples Linux AuFS :autre didacticiel sur le système de fichiers Union (implémentation UnionFS)

  2. Comment réduire le système de fichiers racine sur CentOS / RHEL 6

  3. CentOS / RHEL :Comment réduire le système de fichiers racine LVM

  4. Système de fichiers multiplateforme

  5. Comment monter manuellement un système de fichiers Linux en lecture/écriture en tant qu'utilisateur normal ?

Dbxfs - Monter le dossier Dropbox localement en tant que système de fichiers virtuel sous Linux

Comment monter Google Drive localement en tant que système de fichiers virtuel sous Linux

Comment monter un système de fichiers Linux distant à l'aide de SSHFS

Comment monter et afficher le fichier ISO en tant qu'utilisateur root et régulier sous Linux

Monter et modifier un fichier loopback sans sudo/root, est-ce possible ?

Deux sous-répertoires avec la même racine sont-ils garantis d'être sur le même système de fichiers monté ?