[pve-devel] applied: [RFC container] mountpoints: create parent dirs with correct owner

Thomas Lamprecht t.lamprecht at proxmox.com
Mon Aug 26 13:30:54 CEST 2019

On 24.07.19 13:37, Fabian Grünbichler wrote:
> otherwise unprivileged containers might end up with directories that
> they cannot modify since they are owned by the user root in the host
> namespace, instead of root inside the container.
> note: the problematic behaviour is only exhibited when an intermediate
> directory needs to be created, e.g. a mountpoint /test/mp gets mounted,
> and /test does not yet exist.
> Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
> ---
> Notes:
>     requires fchownat support in PVE::Tools - see other patch and bump
>     build-depends + depends accordingly after applying!
>     I am not sure whether this is 100% correct w.r.t. error edge cases, since we
>     potentially die after mkdirat without calling fchownat. it is for sure better
>     than the status quo though ;)
>     thank you Dietmar for noticing the buggy behaviour!
>  src/PVE/LXC.pm            | 27 ++++++++++++++++-----------
>  src/PVE/VZDump/LXC.pm     |  7 +++++--
>  src/lxc-pve-prestart-hook |  4 +++-
>  3 files changed, 24 insertions(+), 14 deletions(-)

applied, thanks!

For existing CTs, where problematic directories outside the CT GID/UID range got
already created, we could add a "repair-ids" command, which would reset UIDs/GIDs
from (specified) paths to a CT (root) ID again, if they where outside the CTs
range, e.g.:

# pct repair-file-permissions <vmid> [<path>] [--repair-with-id <id>]

Which could roughly follow those rules:
* only "repair" files with IDs outside of the CTs file range, e.g., "0" from PVE
  host POV
* only check at given path, if set
* maybe add a "no-recursive" flag to really only do a single file?

With that at least a possibility would be there to allow people fixing the
directory tree permissions so that CT-root can change/delete/... them again.
Just as an idea.

More information about the pve-devel mailing list