kayle
kayle

Reputation: 1146

Fuse file system with "default permission" option

I am new to fuse. I have mounted fuse by the following command.

/mnt/fuse -o default_permissions -o allow_other -o nonempty -o hard_remove –d

Now If I login as "test" user and tried to create a file called "testfile".

test@11540302:/registration> touch testfile
touch: setting times of `testfile': Permission denied

Strace output:

uname({sys="Linux", node="11540302", ...}) = 0
brk(0)                                  = 0x8055000
brk(0x8076000)                          = 0x8076000
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK|O_LARGEFILE, 0666) =    3
dup2(3, 0)                              = 0
close(3)                                = 0
utimensat(0, NULL, NULL, 0)             = -1 EACCES (Permission denied)
close(0)                                = 0

But "testfile" creation is successful with owner as root user,

-rw-r--r--  1 root trusted     0 Jan 19 13:51 testfile

I can understand that fuse application is running in root level, file creation happened with the owner as root. Because of that test user cannot perform any operation on "testfile".

My question:

Since I have given "allow_other" while mounting, why test user cannot having privileges to access the "testfile"?

Please correct me if my understanding is wrong.

Upvotes: 2

Views: 2927

Answers (2)

kayle
kayle

Reputation: 1146

I got the solution for this problem.

Detailed explanation for this issue.

Solution:

As @dirkt said we need to handle permissions on our own.

Code to get the caller uid and gid:

fuse_get_context()->uid;

fuse_get_context()->gid;

Get the caller user id and group id and set the ownership of the file/directory while creating via fuse API's.

Always there is room for improvement. Kindly correct me if I am not correct.

Thank you dirkt for your explanation.

Upvotes: 1

Jamil Said
Jamil Said

Reputation: 2083

Try adding the test user to the fuse group:

usermod -a -G fuse test

Also, make sure that #user_allow_other is uncommented on the fuse configuration file (generally on /etc/fuse.conf):

sed -i -e "s/#user_allow_other/user_allow_other/gi" /etc/fuse.conf

After running either of those, reboot the computer and try again.

Upvotes: 0

Related Questions