Linked Questions

Popular Questions

I have non-root access to a server that is shared by many users. I first develop and run some code locally, and then I want to rsync my data to a temporary location on a remote server and run my code on a remote server without changing any file paths.

I want to transparently hijack filesystem reads and writes and redirect them to different folders, like, if I run

redirect /home/a /home/b/remote-home/a python

and then code tries to read from /home/a/a.txt, it should get content of /home/remote-home/a/a.txt, and same with writes.

I am particularly interested in doing this for a python process if that is necessary. I use a lot of third-party libraries that do file IO, so just mocking is not an option. That IO is pretty intensive (reading and writing gigabytes of data), so performance degradation that exceeds something like 200-300% is an issue.

Options that I am aware of are:

  • redefining read,read64, write, etc. calls with a LD_PRELOAD that would call real functions with different paths under the hood
  • same with ptrace
  • unshare and remount parts of the filesystem, but userspace namespacse are disabled in my particular case for whatever security reasons

First two options seem not very reliable (and ptrace must be slow), unless there is some fairly stable piece of code that does exactly that so I could be sure that I did not make any obvious buffer overflow errors there. Containers like docker are not an options because they are not installed on the remote server. Unless, of course, there are some userspace containers that do not rely on linux namespaces under the hood.

UPD: not a full answer, but singularity manages to provide such functionality without giving everyone root privileges.

Related Questions