Existe-t-il un outil vfs linux qui permet de lier un directory dans un location différent (comme mount – bind) dans l'espace user?

Pour un process user, je veux monter un directory dans un autre location mais dans l'espace user sans privilèges root. Quelque chose comme mount – bind / origin / dest, mais avec un wrapper vfs. Comme un usermode chroot affiné.

Le programme serait wrapper le syscalls aux files pour «substituer» les paths nécessaires. Il pourrait être appelé avec une command line comme:

bindvfs / fake-home: / home ls / home

Je suis sûr que cet alredy existe! 🙂

Vous pouvez utiliser PRoot presque de la même manière que dans votre exemple:

proot -b /fake-home:/home ls /home 

Contrairement à BindFS / FUSE, PRoot est capable de lier des files et des directorys que vous ne possédez pas.

Le programme perroquet peut faire ce que vous requestz: intercepter les appels système et redirect certains paths (par exemple, tous les paths commençant par /anonftp sont remappés pour accéder de manière transparente aux files distants via FTP). Il fonctionne également entièrement dans l'espace user.

Cependant, en dépit d'un nombre printingnant de protocoles réseau communs et rares, parrot n'a pas de module pour faire un système de files simple -> la réécriture du système de files comme vous le requestz. Cela devrait être assez simple à append, si vous connaissez une programmation en langage C.

Alternativement, bindfs (qui fonctionne sur le dessus de FUSE ), fonctionne comme un mount --bind dans l'espace user. (Mais cela va dans le sens inverse par rapport à la redirection /home à /fake-home comme vous mentionnez dans votre question.)

VFS autorise déjà le assembly non root des filesystems. Vous pouvez append l'option user ou users à l'input fstab et assurez-vous que vfs.usermount=1 est dans /etc/sysctl .

Rien de tout cela ne vous donnera des controls chroot-like cependant. L'option bind ne va pas changer les permissions ni autoriser un access alternatif, c'est une deuxième input mtab pour le même système de files et le même contenu. Les modifications apscopes au assembly bind affectent l'original.

Je voudrais vous assurer que vous clarifiez votre objective final avant de continuer.

mount_namespaces vous permettra de faire mount --bind non vu par d'autres process. Mais normalement mount --bind est limité à l'user root uniquement (pour des raisons de security). Ainsi, pour que mount_namespaces soit utile à un user non root, vous devez d'abord utiliser user_namespaces pour devenir une "racine locale" dans un nouvel espace de noms, où cette opération serait alors autorisée.

Vous pouvez jouer avec ceci dans votre shell comme ceci – cet exemple montre spécifiquement l'utilisation des espaces user et de assembly dans la préparation d'un directory chroot (et l'opération chroot est aussi privilégiée):

 unshare --user --map-root-user --mount-proc --pid --fork mkdir -p newroot/dev mount --rbind /dev newroot/dev ....other chroot preparation.... chroot newroot su - user1 

Notez que j'utilise mount --rbind (au lieu de mount --bind ), car seulement cela fonctionnera dans le nouvel user et montera l'espace de noms, si le directory inclut d'autres points de assembly (et /dev/ fait dans mon cas).

Peut-être l'explication est-elle que l'user ne devrait pas avoir le moyen de voir quelque chose que normalement un user non privilégié ne verrait pas, c'est-à-dire les sous-directorys cachés par les «sous-titres». Pour ne pas supprimer les sous-titres, seul le --rbind est autorisé.