Für einen Benutzerprozess möchte ich ein Verzeichnis an einem anderen Speicherort, jedoch im Benutzerbereich ohne Root-Berechtigungen, bereitstellen. So etwas wie mount --bind / origin / dest, aber mit einem vfs-Wrapper. Wie eine fein abgestimmte Chroot im Usermode.
Das Programm würde die Systemaufrufe in Dateien verpacken, um die benötigten Pfade zu "ersetzen". Es könnte mit einer Kommandozeile aufgerufen werden wie:
bindvfs / fake-home: / home ls / home
Ich bin sicher, dass es diese bereits gibt! :) :)
linux
mount
chroot
not-root-user
Keymon
quelle
quelle
Das Papageienprogramm kann das tun, wonach Sie fragen: Systemaufrufe abfangen und bestimmte Pfade umleiten (z. B. werden alle Pfade, die mit beginnen, neu
/anonftp
zugeordnet, um transparent über FTP auf entfernte Dateien zuzugreifen). Es läuft auch vollständig im Userspace.Trotz einer beeindruckenden Anzahl gängiger und ungewöhnlicher Netzwerkprotokolle
parrot
gibt es kein Modul zum einfachen Umschreiben von Dateisystemen> Dateisystemen, wie Sie es wünschen. Das sollte ganz einfach hinzuzufügen sein, wenn Sie sich mit C-Programmierung auskennen.Alternativ funktioniert bindfs (das über FUSE ausgeführt wird ) wie ein
mount --bind
In-Userspace. (Dies geht jedoch in umgekehrter Richtung in Bezug auf die Umleitung/home
,/fake-home
wie Sie in Ihrer Frage erwähnt haben.)quelle
VFS ermöglicht bereits das Nicht-Root-Mounten von Dateisystemen. Sie können dem fstab-Eintrag die Option
user
oder hinzufügenusers
und sicherstellen, dass sie aktiviertvfs.usermount=1
ist/etc/sysctl
.Nichts davon gibt Ihnen jedoch chroot-ähnliche Steuerelemente. Die
bind
Option ändert weder die Berechtigungen noch ermöglicht sie einen alternativen Zugriff. Dies ist ein zweiter mtab-Eintrag für genau dasselbe Dateisystem und denselben Inhalt. Änderungen an der Bindehalterung wirken sich auf das Original aus.Ich würde sicherstellen, dass Sie Ihr Endziel klarstellen, bevor Sie fortfahren.
quelle
/var/program-data
Benutzern einen freigegebenen Speicherort (wie ) für alle Zugriffe bereitzustellen, wie~/.program-data
beim Ausführen des Programms? Oder versuchen Sie, für~/.program-data
jede Instanz eines Programms, das von demselben Benutzer ausgeführt wird , separate Kopien bereitzustellen ?Mit mount_namespaces können Sie
mount --bind
von anderen Prozessen nicht gesehen werden. Normalerweisemount --bind
ist dies jedoch nur dem Root-Benutzer vorbehalten (aus Sicherheitsgründen). Damit mount_namespaces für einen Nicht-Root-Benutzer von Nutzen ist, sollten Sie user_namespaces zuerst verwenden , um ein "lokaler Root" in einem neuen Namespace zu werden, in dem dieser Vorgang dann zulässig wäre.Sie können damit in Ihrer Shell so spielen - dieses Beispiel zeigt speziell die Verwendung von Benutzer- und Mount-Leerzeichen bei der Vorbereitung eines Chroot-Verzeichnisses (und der
chroot
Vorgang ist normalerweise auch privilegiert):Beachten Sie, dass ich
mount --rbind
(anstelle vonmount --bind
) verwende, da nur dies im neuen Benutzer- und Mount-Namespace funktioniert, wenn das Verzeichnis andere Mount-Punkte enthält (und/dev/
in meinem Fall auch).Vielleicht ist die Erklärung dafür, dass der Benutzer keine Möglichkeit bekommen sollte, etwas zu sehen, was normalerweise ein nicht privilegierter Benutzer nicht sehen würde, dh die von den "Submounts" ausgeblendeten Unterverzeichnisse. Es ist nur
--rbind
erlaubt , die Submounts nicht zu entfernen .quelle