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?
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?
Réponses:
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/shm
et 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/shm
ils ne vous aideront pas.
Le parallèle pour Solaris /dev/shm
est -ce /tmp
qui 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 /tmp
sur 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.
/dev/tmpfs
sur 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?
/run
et peut-être /run/shm
besoin d'enquêter davantage avant de mettre à jour ma réponse.
... 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 ramfs
si 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.
ramfs
est préférable à la tmpfs
sécurité, car les ramfs
donné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 .
Vous pouvez préparer le ramfs
montage 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/ramfs
est 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.size
définit la taille de ce "ramdisk" (vous pouvez utiliser M
et G
ici).mode
est très important , avec le code octal, 0770
seuls 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 ramfs
monté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 rsync
fichiers à 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.
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 fuse
groupe pour utiliser FUSE. En regardant à travers les systèmes de fichiers FUSE disponibles , je ne vois que Ramfuse , qui est malheureusement abandonné en amont.
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,user
et 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:
sudo
pour permettre aux utilisateurs de l'exécuter. Assurez-vous que vous n'autorisez pas l'utilisateur à choisir des chemins arbitraires.