* [RFC v2] Improve subvolume usability for a normal user
@ 2017-12-11 6:38 Misono, Tomohiro
2017-12-11 7:30 ` ein
0 siblings, 1 reply; 4+ messages in thread
From: Misono, Tomohiro @ 2017-12-11 6:38 UTC (permalink / raw)
To: linux-btrfs
Hello all,
I reflected the comments of the first version of the RFC[1].
Thanks for all those who commented.
The summary of updated proposal is:
- Change the default behavior to allow a user to delete subvolume which is empty
- Add 2 new non-root ioctls to get subvolume/quota info under the specified path
Please see the 'Proposal' section below for the detail.
More comments are welcome.
Regards,
Tomohiro Misono
[1] https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg70666.html
==========
- Goal and current problem
The goal of this RFC is to give a normal user more control to their own subvolumes.
Currently the control to subvolumes for a normal user is restricted as below:
+-------------+------+------+
| command | root | user |
+-------------+------+------+
| sub create | Y | Y |
| sub snap | Y | Y |
| sub del | Y | N |
| sub list | Y | N |
| sub show | Y | N |
| qgroup show | Y | N |
+-------------+------+------+
In short, I want to change this as below in order to improve user's usability:
+-------------+------+--------+
| command | root | user |
+-------------+------+--------+
| sub create | Y | Y |
| sub snap | Y | Y |
| sub del | Y | N -> Y |
| sub list | Y | N -> Y |
| sub show | Y | N -> Y |
| qgroup show | Y | N -> Y |
+-------------+------+--------+
In words,
(1) allow deletion of subvolume (if it is empty) and
(2) allow getting subvolume/quota info (under the specified path)
I think other commands not listed above (qgroup limit, send/receive etc.) should be done
by root and not be allowed for a normal user.
- Proposal
(1) deletion of subvolume
Change the default behavior for a user to allow to delete a subvolume (by "subvol del") if
1. the user has write+exec right to it, and
2. it is empty
So, it is the same as user_subvol_rm_allowed option with emptiness check.
Emptiness check is needed because Snapshot creation wont' check the permission and
can copy a dir which cannot be deleted by the user, and therefore just allowing deletion
may cause data loss.
Summary of behavior by different condition is as follows:
+===============================+========================+======================+
| | Current | Proposal |
+===============================+========================+======================+
| root | Can delete all | Same as the current |
+-------------------------------+------------------------+----------------------+
| user (user_subvol_rm_allowed) | Can delete if he | Same as the current |
| | has write+exec right | |
+-------------------------------+------------------------+----------------------+
| user (default) | Cannot delete anything | Can delete if he |
| | | has write+exec right |
| | | and is empty |
+-------------------------------+------------------------+----------------------+
(2) getting subvolume/quota info
Introduce 2 new ioctls to get subol/quota info under the specified path (which needs
to be able to be opened by the user) and modify INO_LOOKUP to check permission
during path construction for a normal user.
Current approach cannot be used directly for a normal user as explained below:
TREE_SEARCH ioctl is used to retrieve the subvolume/quota info by btrfs-progs
(sub show/list, qgroup show etc.). This requires the root permission. Also,
in order to construct the path, INO_LOOKUP will be called afterwards,\v which also
requires root permission and omits the permission check during path construction.
The easiest way to allow a user to get subvolume/quota info is just relaxing
the permission of TREE_SEARCH. However, since all the tree information (inc.
file name) will be exposed, this poses a sequrity risk and is not acceptable.
The detail of new ioctls and approach is here:
[subvolume info]
Searching ROOT tree for ROOT_ITEM/ROOT_BACKREF under the specified path, and
checking its read right by searching FS/FILE tree and comparing the mode with caller's uid.
After this ioctl is called, btrfs-progs calls modified INO_LOOKUP to construct the path
with permission check. In case path construction fails due to permission, btrfs-progs
skips to output the infomation of the subvolume.
[quota info]
Same as above, but mainly searching QUOTA tree.
- Summary of Proposal
- Change the default behavior to allow a user to delete subvolume which is empty
- Add 2 new non-root ioctls to get subvolume/quota info under the specified path
==========
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC v2] Improve subvolume usability for a normal user
2017-12-11 6:38 [RFC v2] Improve subvolume usability for a normal user Misono, Tomohiro
@ 2017-12-11 7:30 ` ein
2017-12-11 7:34 ` ein
2017-12-11 8:02 ` Misono, Tomohiro
0 siblings, 2 replies; 4+ messages in thread
From: ein @ 2017-12-11 7:30 UTC (permalink / raw)
To: Misono, Tomohiro, linux-btrfs
On 12/11/2017 07:38 AM, Misono, Tomohiro wrote:
> - Change the default behavior to allow a user to delete subvolume which is empty
>From sysadmin point of view I think it's worth considering the following
scenario(s):
what if admin wants one persistent snapshot undeletable by the user?
- snapshots created by the root in user work tree should not be deleted
by the user (snapshot owner should be root?), but we may want also
permissions, filesystem ACLs and extend ACLs consistency
- snapshots with chattr +i should be not deleted by the user, even if he
created it.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC v2] Improve subvolume usability for a normal user
2017-12-11 7:30 ` ein
@ 2017-12-11 7:34 ` ein
2017-12-11 8:02 ` Misono, Tomohiro
1 sibling, 0 replies; 4+ messages in thread
From: ein @ 2017-12-11 7:34 UTC (permalink / raw)
To: Misono, Tomohiro, linux-btrfs
And also, how to prevent creation of the snapshots by the user.
On 12/11/2017 08:30 AM, ein wrote:
> On 12/11/2017 07:38 AM, Misono, Tomohiro wrote:
>> - Change the default behavior to allow a user to delete subvolume which is empty
> From sysadmin point of view I think it's worth considering the following
> scenario(s):
> what if admin wants one persistent snapshot undeletable by the user?
> - snapshots created by the root in user work tree should not be deleted
> by the user (snapshot owner should be root?), but we may want also
> permissions, filesystem ACLs and extend ACLs consistency
> - snapshots with chattr +i should be not deleted by the user, even if he
> created it.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC v2] Improve subvolume usability for a normal user
2017-12-11 7:30 ` ein
2017-12-11 7:34 ` ein
@ 2017-12-11 8:02 ` Misono, Tomohiro
1 sibling, 0 replies; 4+ messages in thread
From: Misono, Tomohiro @ 2017-12-11 8:02 UTC (permalink / raw)
To: ein, linux-btrfs
Hello,
On 2017/12/11 16:30, ein wrote:
> On 12/11/2017 07:38 AM, Misono, Tomohiro wrote:
>> - Change the default behavior to allow a user to delete subvolume which is empty
>
> From sysadmin point of view I think it's worth considering the following
> scenario(s):
> what if admin wants one persistent snapshot undeletable by the user?
> - snapshots created by the root in user work tree should not be deleted
> by the user (snapshot owner should be root?), but we may want also
> permissions, filesystem ACLs and extend ACLs consistency
> - snapshots with chattr +i should be not deleted by the user, even if he
> created it.
> --
Immutable flag is already supported. So, we can set +i recursively by "sudo chattr -R +i <snapshot>"
If Immutable flag is set, it cannot be deleted by even root and it cannot be set/dropped by a normal user.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-12-11 8:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-11 6:38 [RFC v2] Improve subvolume usability for a normal user Misono, Tomohiro
2017-12-11 7:30 ` ein
2017-12-11 7:34 ` ein
2017-12-11 8:02 ` Misono, Tomohiro
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox