(Wie) kann ich als normaler Benutzer (ohne Rootberechtigung) einen tmpfs erstellen?

39

Die Distribution ist ein Ubuntu-Server, auf dem der Linux-Kernel 2.6.35-30 ausgeführt wird.

Ich hätte gerne ein Verzeichnis, das sich vollständig im Speicher befindet. Ist das ohne root-Rechte möglich?

Bitmaske
quelle

Antworten:

49

Linux stellt ein tmpfs-Gerät zur Verfügung, das jeder Benutzer verwenden kann /dev/shm. Standardmäßig ist es nicht an ein bestimmtes Verzeichnis angehängt, Sie können es jedoch weiterhin als solches verwenden.

Erstellen Sie einfach ein Verzeichnis in /dev/shmund verknüpfen Sie es mit einem Symbol, wo immer Sie möchten. Sie können dem erstellten Verzeichnis beliebige Berechtigungen zuweisen, sodass andere Benutzer nicht darauf zugreifen können.

Dies ist ein RAM-gestütztes Gerät. Was sich also dort befindet, ist standardmäßig im Speicher. Sie können alle Verzeichnisse erstellen, die Sie benötigen/dev/shm

Natürlich überstehen die hier abgelegten Dateien einen Neustart nicht, und wenn Ihr Computer zu tauschen beginnt, /dev/shmhilft dies Ihnen nicht.

Die Solaris parallel /dev/shmheißt /tmpes ist , eine „Swap“ Typ - Partition und auch Speicher basiert. Wie bei /dev/shmkönnen beliebige Benutzer Dateien /tmpunter Solaris erstellen .

OpenBSD bietet die Möglichkeit, auch einen speicherbasierten Mount zu verwenden, der jedoch standardmäßig nicht verfügbar ist. Der Befehl mount_mfs steht dem Superuser zur Verfügung.

Bei anderen * BSDs bin ich mir nicht sicher.

gabe.
quelle
1
Ein symbolischer Link könnte die Lösung in dem Problem.
Enzotib
D'oh ... vergaß diese lästigen kleinen Symlinks.
gabe.
@enzotib repariert es!
gabe.
Es scheint kein /dev/tmpfsauf dem System zu sein (ebenso wenig wie mein eigenes System mit einem 3.0.0-Kernel). Sind Sie sicher, dass dies nicht von Ihrer Distribution verursacht wurde?
Bitmaske
1
Ich bin mir nicht sicher, ob dies auch für andere gilt, aber in meiner aktuellen Ubuntu-Version scheint sich dies zu geändert zu haben /runund muss möglicherweise /run/shmweiter untersucht werden, bevor ich meine Antwort aktualisiere.
gabe.
14

/ dev / shm ist unsicher

... auf Systemen mit aktivem Swap ! Die Chancen stehen sehr hoch, dass Ihr Computer es aktiviert hat.

Es gibt eine bessere, sichere Standardalternative ramfs. Sie können diese Option verwenden, ramfswenn Sie RAM-gesicherten Speicherplatz zum temporären Speichern vertraulicher Daten wie privater Schlüssel, Bitcoin- oder Ethereum-Brieftaschen und dergleichen verwenden möchten .

ramfsist besser als tmpfsin Bezug auf die Sicherheit, da ramfsDaten niemals ausgetauscht (auf einem physischen Speicherlaufwerk gespeichert) werden, während sie tmpfs möglicherweise ausgetauscht werden. Dritte können dann den Swap Space inspizieren und sensible Daten extrahieren .

Die Lösung

Sie können die ramfsBereitstellung vorbereiten , damit jeder nicht privilegierte Benutzer sie bei Bedarf aktivieren oder deaktivieren kann.

Dazu benötigen Sie root Privileg, einmal . Bitten Sie den Administrator Ihres Systems, dies für Sie einzurichten, wenn Sie keine Root-Rechte haben.

Zunächst müssen Sie eine Zeile in das Feld einfügen /etc/fstab. Die Zeile in fstab könnte folgendermaßen aussehen:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsist ein Einhängepunkt, an dem das RAMFS-Dateisystem eingehängt wird. Verzeichnis sollte vorhanden sein.
  • noauto Die Option verhindert, dass dies automatisch gemountet wird (z. B. beim Systemstart).
  • user macht diese für normale Benutzer einbindbar.
  • sizeLegt die Größe dieser "Ramdisk" fest (Sie können Mund Ghier verwenden).
  • modeist sehr wichtig , mit dem Oktalcode können 0770nur Root und Benutzer, die dieses Dateisystem gemountet haben, lesen und darauf schreiben, nicht die anderen (Sie können auch einen anderen Code Ihrer Wahl verwenden, aber seien Sie sehr sicher! ).

Wenn dies erledigt ist, kann jeder Benutzer dies bei Bedarf bereitstellen.

Sobald ein Benutzer dies aktiviert hat, wird ein neues 1024-MB- ramfsDateisystem erstellt und unter bereitgestellt /mnt/ramfs/. Es wird im Besitz von sein root:user. Sobald er es ausgehängt oder das System neu gestartet wird, verschwindet dieses RAM-basierte Dateisystem mit all seinen Daten. Welches ist cool.

Dieses Dateisystem kann auch von mehreren Benutzern unabhängig, jedoch nicht gleichzeitig gemountet werden , dh um für das Mounten durch einen nächsten Benutzer bereit zu sein, sollte der vorherige Benutzer das Mounten dieses Dateisystems aufheben.

montieren:

mount /mnt/ramfs/

aussteigen:

umount /mnt/ramfs/

PS Wenn Sie rsyncals Nicht-Root-Benutzer versuchen, Dateien im Stammverzeichnis der neu gemounteten / erstellten RAM-Dateien zu speichern, kann ein rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]Fehler auftreten. Dies ist völlig in Ordnung und wird erwartet, da Ihr Benutzer nicht das Stammverzeichnis des RAM-Dateisystems besitzt. Die Lösung ist einfach: Erstellen Sie /mnt/ramfs/copied/zum Beispiel dort ein Verzeichnis und rsynclegen Sie es dort an.

PPS auf Debian 9 getestet. Ich bin mir ziemlich sicher, dass es auch auf Ubuntu funktionieren wird.

TranslucentCloud
quelle
10

Auf Ihrem System ist möglicherweise bereits eines verfügbar. Auf neueren Linux-Systemen, die auf Glibc basieren, ist immer ein tmpfs installiert/dev/shm .

Wenn Ihr System nicht über eines verfügt oder es zu klein ist, bedeutet ein Dateisystem, das nicht von root gemountet wurde, FUSE . Unter Ubuntu müssen Sie Mitglied der fuseGruppe sein, um FUSE verwenden zu können. Beim Durchsuchen der verfügbaren FUSE-Dateisysteme sehe ich nur Ramfuse , das leider im Upstream-Bereich aufgegeben wird.

Gilles 'SO - hör auf böse zu sein'
quelle
5

In der Regel können Dateisysteme nur von root gemountet werden. Wenn Sie einem Benutzer erlauben, Dateisysteme willkürlich zu platzieren, erhalten sie im Wesentlichen root. (Einfacher Weg: mounten Sie eines über / etc, legen Sie Ihr eigenes Passwort und Schatten dort ab, su mit dem neuen Root-Passwort, das Sie gerade erstellt haben, heben Sie das Mounten auf)

Wenn Sie ein tmpfs an einem bestimmten Ort haben möchten, können Sie es hinzufügen /etc/fstab, mit den Flags von noauto,userund dann kann ein Benutzer es mounten (aber es ist nicht besonders klar, warum Sie es nicht einfach automatisch mounten würden).

Wenn Benutzer beliebige tmpfs benötigen, haben Sie einige Möglichkeiten:

  • Verwenden Sie Unterverzeichnisse von einem tmpfs. Wahrscheinlich der beste Ansatz. Sie brauchen wirklich wahrscheinlich nicht mehr als einen tmpfs.
  • Erstellen Sie ein Skript, mit dem ein Verzeichnis erstellt und ein tmpfs darüber angehängt wird, und drucken Sie dann aus, wo es abgelegt wurde. Verwenden Sie sudodiese Option , um Benutzern die Ausführung zu ermöglichen. Stellen Sie sicher, dass Sie dem Benutzer nicht erlauben, beliebige Pfade auszuwählen.
derobert
quelle