Prevent writing to unmounted sshfs mount point
Assuming I have a folder /mnt/mountpoint
that I use as a mountpoint for some sshfs
-mounted directory:
sshfs user@host /mnt/mountpoint
Now, I want to prevent applications to write to /mnt/mountpoint
while it is unmounted. Questions I found here and here have answers that imply using
sudo chattr +i /mnt/mountpoint
which works fine to prevent any write-access. Unfortunately, it also prevents me from mounting with sshfs
as a normal user.
What would be the best solution for this? I would prefer a single sshfs-command or something that at least doesn't require root privileges. Should I forego the chattr
approach and try something entirely different?
Solution 1:
Mount point default permissions
Create the mountpoint with
mkdir --mode=0500 -p /mnt/mountpoint
Only the creating user will be able to write to it. You could pre-populate this from rc.local. When you mount whatever filesystem lives on top of that mount point, it will pick up the permissions of that overlay that you had set when it was mounted.
On a side note, I would avoid chattr +i
as that will confuse folks and cause troubleshooting fun down the road if not everyone is aware you did that.
Solution 2:
I got this to work with chattr +i
by use of the IdentityFile
option in sshfs
.
For this to work you will need to generate and add your keys to the remote host.
ssh-keygen && ssh-copy-id username@host
After that's done you can use sudo with sshfs to mount the host.
# If not running the sshfs command from a script,
# you need to save the following values prior to running sshfs.
# If you don't, they will be interpreted as the root user's env variables.
sshfs_uid="$UID"
sshfs_gid="$GID"
sshfs_key"$HOME/.ssh/id_rsa"
# Please note that all options passed to sshfs are required.
# Using these options will allow your user to read + write to the mounted dir.
# If they are not passed, your user won't be able to access the mounted dir.
sudo sshfs -o uid=$sshfs_uid -o gid=$sshfs_gid -o IdentityFile=$sshfs_key -o allow_other username@host:/path /path/to/mountpoint
If you want to add this as part of a script or make it automatic on login, you probably don't want to enter the password each time.
To fix that:
sudo visudo
# Assuming your sudo group is "wheel".
# And assuming the permissions for your wheel group look something like this.
%wheel ALL=(ALL) ALL
# Add this line after the above line to allow sshfs mounting without a password
%wheel ALL=(ALL) NOPASSWD:/usr/bin/sshfs*