1

I am using some cloud storage services (like Dropbox, MEGA, Amazon Cloud Drive, etc). Most of these do not support symlinks and file permissions (simple read/write/execute permissions for user, group, all).

Dropbox supports file permissions but not symlinks. MEGA supports neither and the (third-party) Linux clients I found for Amazon Cloud Drive support neither symlinks or permissions.

I was wondering whether there is a light-weight file system that implements symlinks and file permissions on top of a file system that does not support them natively. I am thinking about something where permissions are stored in an additional file (maybe per directory) and if that file system is mounted (presumably through FUSE) then it would read that permission list and show the correct permissions in the FUSE-mounted file system. Similarly, it could use a special file for symlinks and transparently make these work on an underlying file system that does not support it.

Before I start writing my own FUSE file system that does that, I wanted to know whether someone else already had the same idea and I don't have to reinvent the wheel...

(Note that I am aware of security issues with storing permissions in a separate file, as they could be changed by changing that file. However, if the underlying file system does not support permissions, then I'm not sure whether there is a way to securely implement permissions on top of that, because if one has access to the underlying file system, one can do anything anyway. This is more of a convenience thing for me. If I make a file executable on one client that syncs with cloud storage, I want it to become executable on the other clients as well. Similarly for symlinks.)

  • FUSE doesn't support ACL yet :( – Gilles Sep 14 '16 at 2:00
  • You're right, but I actually just meant UNIX file permissions (which FUSE does support), not full-fledged ACLs. Sorry for being imprecise. – Flecto Sep 14 '16 at 15:41
  • Oh, that's completely different. Please edit your question then. And have a look at unix.stackexchange.com/questions/198590/what-is-a-bind-mount, maybe posixovl could work for you. – Gilles Sep 14 '16 at 16:28
  • Thanks Gilles! I have edited the question. posixovl is almost exactly what I'm looking for. It does what I want in terms of file permissions, but it doesn't do what I want with symlinks. I guess the problem is that the underlying file system is ext4, which natively supports symlinks, but the cloud sync client just ignores those. So what I need is a FS that stores symlinks as regular files in the underlying FS. – Flecto Sep 14 '16 at 18:32
1

It turns out that posixovl (https://sourceforge.net/projects/posixovl/) does exactly what I was looking for. So the answer to the question is: Yes, such a FUSE file system exists.

Thanks Gilles for suggesting it!

0

This is a recommendation and opinion, which is not really what unix.SE is about.

However, having said that, if you're using Cloud filesystems you might want to take a look at S3QL. I've been using it heavily for the last six months or so and it works well for me.

https://bitbucket.org/nikratio/s3ql/

S3QL is a file system that stores all its data online using storage services like Google Storage, Amazon S3, or OpenStack. S3QL effectively provides a hard disk of dynamic, infinite capacity that can be accessed from any computer with internet access.

S3QL is a standard conforming, full featured UNIX file system that is conceptually indistinguishable from any local file system. Furthermore, S3QL has additional features like compression, encryption, data de-duplication, immutable trees and snapshotting which make it especially suitable for online backup and archival.

You may well find a reasonably recent version in your distribution's package repository. If you are able to get the most recent version, though, it does have a number of bug fixes that may be relevant to your scenario.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.