(Comment) puis-je créer un tmpfs en tant qu'utilisateur standard (non root)?

39

La distribution est un serveur Ubuntu exécutant le noyau Linux 2.6.35-30.

Je voudrais avoir un répertoire qui reste complètement en mémoire. Est-ce possible sans privilèges root?

masque de bits
la source

Réponses:

49

Linux fournit un périphérique tmpfs que tout utilisateur peut utiliser /dev/shm. Il n'est pas monté par défaut sur un répertoire spécifique, mais vous pouvez toujours l'utiliser comme tel.

Il suffit de créer un répertoire /dev/shmet de le lier de façon symétrique où vous le souhaitez. Vous pouvez accorder au répertoire créé toutes les autorisations de votre choix, afin que les autres utilisateurs ne puissent pas y accéder.

Il s’agit d’un périphérique sauvegardé en RAM, donc ce qu’il ya en mémoire par défaut. Vous pouvez créer tous les répertoires dont vous avez besoin à l'intérieur/dev/shm

Naturellement, les fichiers placés ici ne survivront pas à un redémarrage et si votre machine commence à permuter, /dev/shmils ne vous aideront pas.

Le parallèle pour Solaris /dev/shmest -ce /tmpqui est une partition de type « swap », et également une mémoire sur la base. Comme avec /dev/shm, les utilisateurs arbitraires peuvent créer des fichiers /tmpsur Solaris.

OpenBSD peut également utiliser un montage basé sur la mémoire, mais n’en dispose pas par défaut. La commande mount_mfs est disponible pour le super utilisateur.

Je ne suis pas sûr des autres * BSD.

gabe.
la source
1
Un lien symbolique pourrait résoudre le problème .
enzotib
D'oh ... oublié ces petits liens symboliques embêtants.
Gabe.
@enzotib l'a corrigé!
Gabe.
Il ne semble pas y avoir de /dev/tmpfssur le système (pas plus que mon propre système qui a un noyau 3.0.0). Êtes-vous sûr que ce n'est pas quelque chose créé par votre distribution?
Bitmask
1
Je ne sais pas si cela s'applique également aux autres, mais sur ma version actuelle d'ubuntu, cela semble avoir changé /runet peut-être /run/shmbesoin d'enquêter davantage avant de mettre à jour ma réponse.
Gabe.
14

/ dev / shm n'est pas sécurisé

... sur les systèmes avec échange actif ! Il y a de grandes chances que votre ordinateur l'ait activé.

Il existe une alternative plus sûre , standard ramfs. Vous voudrez peut-être l'utiliser ramfssi vous prévoyez d'utiliser un espace sauvegardé en RAM pour stocker temporairement des données sensibles, telles que des clés privées, des portefeuilles Bitcoin ou Ethereum, etc.

ramfsest préférable à la tmpfssécurité, car les ramfsdonnées ne sont jamais échangées (enregistrées sur un lecteur de stockage physique), alors qu'elles tmpfs peuvent l' être. Des tiers peuvent alors inspecter l’espace de permutation et extraire des données sensibles .

La solution

Vous pouvez préparer le ramfsmontage de sorte que tout utilisateur non privilégié puisse le monter / démonter à la demande.

Pour ce faire, vous aurez besoin du privilège root , une fois . Demandez à l'administrateur de votre système de le configurer pour vous, si vous ne disposez pas des privilèges root.

Au début, vous devez ajouter une ligne au /etc/fstab. La ligne dans fstab peut ressembler à ceci:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsest un point de montage, où le système de fichiers ramfs sera monté. Le répertoire devrait exister.
  • noauto Cette option empêche son montage automatique (par exemple au démarrage du système).
  • user rend cela montable par les utilisateurs réguliers.
  • sizedéfinit la taille de ce "ramdisk" (vous pouvez utiliser Met Gici).
  • modeest très important , avec le code octal, 0770seuls root et l’utilisateur qui a monté ce système de fichiers seront capables de lire et d’écrire dessus, pas les autres (vous pouvez aussi utiliser un code différent de votre choix, mais soyez très sûr! )

Lorsque cela sera fait, tout utilisateur pourra monter cela à la demande.

Une fois que l'utilisateur l'a ramfsmontée , un nouveau système de fichiers de 1024 Mo est créé et monté /mnt/ramfs/. Il appartiendra à root:user. Une fois qu'il / elle le démonte ou que le système est redémarré, ce système de fichiers basé sur la RAM disparaîtra avec toutes ses données. Ce qui est cool.

De plus, ce système de fichiers peut être monté par plusieurs utilisateurs indépendamment, mais pas en même temps , c.-à-d. Pour être prêt pour le montage par un utilisateur suivant, l'utilisateur précédent doit démonter ce système de fichiers.

à monter:

mount /mnt/ramfs/

démonter:

umount /mnt/ramfs/

Post-scriptum Si vous essayez de rsyncfichiers à la racine du ramfs nouvellement monté / créé en tant qu'utilisateur non-root, vous pouvez faire face à une rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]erreur. C'est tout à fait correct et attendu, car votre utilisateur ne possède pas la racine du système de fichiers ram. La solution est simple, il suffit de créer un répertoire à cet endroit, /mnt/ramfs/copied/par exemple rsync.

Test de PPS sur Debian 9. Je suis sûr que cela fonctionnera également sur Ubuntu.

Nuageux
la source
10

Votre système peut en avoir un déjà disponible; Les systèmes Linux récents basés sur Glibc ont/dev/shm toujours un tmpfs sur lequel ils sont montés .

Si votre système n'en a pas ou s'il est trop petit, un système de fichiers non monté par root signifie plutôt FUSE . Sur Ubuntu, vous devez faire partie du fusegroupe pour utiliser FUSE. En regardant à travers les systèmes de fichiers FUSE disponibles , je ne vois que Ramfuse , qui est malheureusement abandonné en amont.

Gilles, arrête de faire le mal
la source
5

En général, non, les systèmes de fichiers ne peuvent être montés que par root. Si vous autorisez un utilisateur à placer des systèmes de fichiers de manière arbitraire, vous lui attribuez essentiellement la racine. (Facile: montez-en un sur / etc, mettez votre propre mot de passe et shadow dans su, avec le nouveau mot de passe root que vous venez de créer, démontez-le)

Si vous voulez un fichier tmpfs à un emplacement particulier, vous pouvez l'ajouter à /etc/fstab, avec les drapeaux de noauto,useret un utilisateur pourra alors le monter (mais ce n'est pas très clair pourquoi vous ne le montez pas automatiquement)

Si les utilisateurs ont besoin de fichiers tmpfs arbitraires, vous avez plusieurs options:

  • utiliser les sous-répertoires d'un tmpfs. Probablement la meilleure approche. Vous n'avez probablement pas besoin de plus d'un tmpfs.
  • créez un script qui créera un répertoire et montera un tmpfs dessus, puis imprimera où il se trouve. Utiliser sudopour permettre aux utilisateurs de l'exécuter. Assurez-vous que vous n'autorisez pas l'utilisateur à choisir des chemins arbitraires.
derobert
la source