1. Introduction

When using the mount command to attach filesystems and partitions at a given location, it may not always be clear who the owner of this new mount point is going to be. As a result, we might not have the proper permissions.

In this tutorial, we’ll talk about mount point ownership and how to modify it. First, we follow the usual mount process and establish the way owners change. Next, we perform partition mounting as a regular user in different ways. After that, we turn to a workaround for particular protocols. Then, we explore a related technology used in many graphical user interfaces. Finally, we describe a relatively simple but dangerous way to change the owner of a mount point and its contents.

We tested the code in this tutorial on Debian 11 (Bullseye) with GNU Bash 5.1.4. It should work in most POSIX-compliant environments.

2. Partition Mount Process and Permissions

To begin with, let’s create a simple non-removable partition mount.

First, we create a directory as user baeldung with the mkdir command and its –parents flag:

$ whoami
$ mkdir --parents /home/baeldung/point

After verifying the current user with whoami, we create the /home/baeldung/point directory.

Next, let’s check the permissions of the new directory with ls -ld:

$ ls -ld /home/baeldung/point
drwxr-xr-x 2 baeldung baeldung 4096 Apr 10 00:01 /home/baeldung/point

Notably, baeldung owns and has full control over the path.

At this point, we can attempt to mount /dev/sda1 without any options as the same user:

$ whoami
$ mount /dev/sda1 /home/baeldung/point
mount: /home/baeldung/point: must be superuser to use mount.

As expected, we get a warning about not being a superuser. Thus, we do it as root instead:

# whoami
# mount /dev/sda1 /home/baeldung/point

Now, let’s compare the current with the previous permissions:

$ ls -ld /home/baeldung/point
drwxr-xr-x 2 root root 4096 Apr 2 20:22 /home/baeldung/point

Notably, all metadata of the mount directory has changed. Critically, the new owner is root. So, how can we preserve ownership during the mount?

3. Using mount as Non-superuser for a Partition

When it comes to partition mounting as a regular user, we have many options depending on the circumstances.

3.1. Using mount and /etc/fstab

Until recently, adding user as an option to an /etc/fstab entry enabled us to mount as a regular user:

$ cat /etc/fstab
# <file system>  <mount point>         <type>  <options>  <dump>  <pass>
  /dev/sda1      /home/baeldung/point  ext4    user       0       0     

Since the mount command always reads /etc/fstab for non-superusers, mounting with it should honor these options as long as we use only the file system or mount point:

$ whoami
$ mount /dev/sda1

However, even such a mount doesn’t end up with the expected owner:

$ ls -ld /home/baeldung/point
drwxr-xr-x 2 root root 4096 Apr 2 20:22 /home/baeldung/point

Further, this mechanism may not always work, as mount is entirely disabled within certain non-superuser contexts under the latest version of some Linux distributions like Debian and Ubuntu.

3.2. Using sudo

Of course, we can use sudo for the mount:

$ sudo mount /dev/sda1 /home/baeldung/point

Again, the resulting permissions over the mount point would be the same that we saw earlier:

$ ls -ld /home/baeldung/point
drwxr-xr-x 2 root root 4096 Apr 2 20:22 /home/baeldung/point

Thus, this also isn’t viable for our needs.

3.3. pmount and udisks

To mount removable drives as a non-superuser, we can leverage additional tools:

Let’s install them with apt:

$ apt-get install pmount udisks2

Now, we should be able to simply issue a pmount or udisksctl command for a removable storage drive as identified by a tool like fdisk:

$ pmount /dev/sdb1
$ udisksctl mount --block-device /dev/sdb1

Here, we assume /dev/sdb is a USB block device. Also, since that’s how both of these tools work, the mount point will be in the /media directory.

Needless to say, the ownership remains with root, so this solution doesn’t help us either. Actually, for most filesystems like FAT32, ext4 and XFS, and similar, unless we modify the ownership explicitly after the fact, the owner will be the mounting user, and that can only be a superuser when it comes to partitions.

4. SAMBA and mount.cifs Ownership Options

When using SAMBA, we can work around the limitations of partition mounting by using several mount options:

  • uid – set the owner of all data
  • forceuid – force the uid setting
  • gid – set the owning group of all data
  • forcegid – force the gid setting

Let’s see a basic example:

$ mount -o uid=baeldung,forceuid,gid=baeldung,forcegid,rw //smbsvr/smbShare /home/baeldung/point
$ ls -ld /home/baeldung/point
drwxr-xr-x 2 baeldung baeldung 4096 Apr 10 00:01 /home/baeldung

The ownership is as expected. In addition, we can employ umask settings. While NFS also supports user ID mapping, it uses a separate daemon.

Now, let’s see a method that implicitly leverages similar options by default.

5. Using Filesystems in USErspace (FUSE)

Some filesystems have userland implementations.

For example, SSHFS and GVFS employ FUSE, which doesn’t require superuser rights. In fact, tools like gio allow user mounts out of the box.

Most default FUSE mounts end up with the expected permissions, i.e., the owning and mounting user being the same:

$ whoami
$ gio mount smb://
$ ls -ld /run/user/1001/gvfs/smbShare
drwxr-xr-x 2 baeldung baeldung 4096 Apr 10 00:01 /run/user/1001/gvfs/smbShare

Not all filesystems and protocols support user changes. Here, we use the SAMBA protocol, which does.

In essence, the above is the default way FUSE is meant to work. In fact, even root might be unable to access another user’s mount point unless allow_other or allow_root are added to /etc/fuse.conf.

6. Changing the Owner After Mounting

Importantly, global recursive changes to the owner of all data on a filesystem can be extremely damaging, especially for system partitions. That said, we can easily do that after we perform the mount.

Let’s mount with sudo first, tracking the permissions as we did earlier:

$ whoami
$ ls -ld /home/baeldung/point
drwxr-xr-x 2 baeldung baeldung 4096 Apr 10 00:01 /home/baeldung/point
$ sudo mount /dev/sda1 /home/baeldung/point
$ ls -ld /home/baeldung/point
drwxr-xr-x 2 root root 4096 Apr 2 20:22 /home/baeldung/point

We can see that the permissions evolve like before. So, let’s try and influence them now:

$ sudo chown -R baeldung:baeldung /home/baeldung/point
$ ls -ld /home/baeldung/point
drwxr-xr-x 2 baeldung baeldung 4096 Apr 2 23:33 /home/baeldung/point

At this point, we use a sudo-elevated chown command to change the ownership of all data on the filesystem that root has control over, as well as the mount point itself. Again, this can be highly destructive.

7. Summary

In this article, we discussed changing the owner of a mount point and location.

In conclusion, while we can’t usually influence the ownership when mounting regular partitions, especially as a regular user, we do have options when it comes to permissions over mounts.

Comments are closed on this article!