diff --git a/changelog/unreleased/pull-2017 b/changelog/unreleased/pull-2017 new file mode 100644 index 000000000..44afba625 --- /dev/null +++ b/changelog/unreleased/pull-2017 @@ -0,0 +1,11 @@ +Enhancement: mount: Enforce FUSE Unix permissions with allow-other + +The fuse mount (`restic mount`) now lets the kernel check the permissions of +the files within snapshots (this is done through the `DefaultPermissions` FUSE +option) when the option `--allow-other` is specified. + +To restore the old behavior, we've added the `--no-default-permissions` option. +This allows all users that have access to the mount point to access all +files within the snapshots. + +https://github.com/restic/restic/pull/2017 diff --git a/cmd/restic/cmd_mount.go b/cmd/restic/cmd_mount.go index 3e6382192..39ff1a144 100644 --- a/cmd/restic/cmd_mount.go +++ b/cmd/restic/cmd_mount.go @@ -53,13 +53,14 @@ For details please see the documentation for time.Format() at: // MountOptions collects all options for the mount command. type MountOptions struct { - OwnerRoot bool - AllowRoot bool - AllowOther bool - Host string - Tags restic.TagLists - Paths []string - SnapshotTemplate string + OwnerRoot bool + AllowRoot bool + AllowOther bool + NoDefaultPermissions bool + Host string + Tags restic.TagLists + Paths []string + SnapshotTemplate string } var mountOptions MountOptions @@ -71,6 +72,7 @@ func init() { mountFlags.BoolVar(&mountOptions.OwnerRoot, "owner-root", false, "use 'root' as the owner of files and dirs") mountFlags.BoolVar(&mountOptions.AllowRoot, "allow-root", false, "allow root user to access the data in the mounted directory") mountFlags.BoolVar(&mountOptions.AllowOther, "allow-other", false, "allow other users to access the data in the mounted directory") + mountFlags.BoolVar(&mountOptions.NoDefaultPermissions, "no-default-permissions", false, "for 'allow-other', ignore Unix permissions and allow users to read all snapshot files") mountFlags.StringVarP(&mountOptions.Host, "host", "H", "", `only consider snapshots for this host`) mountFlags.Var(&mountOptions.Tags, "tag", "only consider snapshots which include this `taglist`") @@ -118,6 +120,11 @@ func mount(opts MountOptions, gopts GlobalOptions, mountpoint string) error { if opts.AllowOther { mountOptions = append(mountOptions, systemFuse.AllowOther()) + + // let the kernel check permissions unless it is explicitly disabled + if !opts.NoDefaultPermissions { + mountOptions = append(mountOptions, systemFuse.DefaultPermissions()) + } } c, err := systemFuse.Mount(mountpoint, mountOptions...)