Skip to content

Instantly share code, notes, and snippets.

@JSinghDev
Forked from ajmassi/LXCBindMount.md
Last active June 27, 2024 15:18
Show Gist options
  • Save JSinghDev/10e0824580a84a56022153592ac64faa to your computer and use it in GitHub Desktop.
Save JSinghDev/10e0824580a84a56022153592ac64faa to your computer and use it in GitHub Desktop.
Create a bind mount from a Proxmox host on an unprivileged lxc container

Proxmox Assign Bind Mount To Unprivileged Container

In order for the LXC container to have full access the proxmox host directory, a subgid is set as owner of a host directory, and an ACL is used to ensure permissions.

Bind Mount dataset to LXC

Add the following line to /etc/pve/lxc/<CT_ID>.conf

mp0:/mount/point/on/host,mp=/mount/point/on/lxc

OR

pct set 100 -mp0 /mnt/bindmounts/shared,mp=/shared

(OPTIONAL) If having issues try setting the directory or dataset on the host to be inside /mnt

Create group on host

In the default Proxmox configuration, unpriviliged container subgids will have the prefix "10" followed by the expected 4-digit gid.

addgroup --gid <GID (ie."101000")> <GroupName (ie."container-data")>

Install ACL

Debian 11 which proxmox is based on does not have acl installed so install acl using

apt install acl

Enable acl for zfs dataset

zfs set acltype=posixacl storage/share

Set ACL for shared dataset

Any members of -GID- will have "rwx", new files from -GID- have "rwx" default Note: documentation suggests the "-d" flag should be used to assign default, however I have been able to get the desired result without, so... take that as you will

chgrp -R <GroupName> <Dataset>
chmod -R 2775 <Dataset>
setfacl -Rm g:<GID>:rwx,d:g:<GID>:rwx <Dataset>

Inside your LXC container

Create group

GID needs to match the last 4 digits of the subgid assigned earlier

addgroup --gid <GID (ie."1000")> <GroupName (ie."container-data")>

Add users to new permitted group

usermod -aG <GroupName> <User>

You should now be able to make modifications to the assigned directory on the host system from within the unpriviliged container.


References

https://blog.felixbrucker.com/2015/10/01/how-to-mount-host-directories-inside-a-proxmox-lxc-container/ https://www.reddit.com/r/homelab/comments/4h0erv/resolving_permissions_issues_with_host_bind/

@JSinghDev
Copy link
Author

JSinghDev commented Jun 21, 2023

Why does the directory/dataset need to have the mount point in /mnt on the host?

I don't think that's needed any more and I am going to update this gist. I was having issues initially when my zfs dataset mount point was not inside the /mnt folder. I read it somewhere. Currently, my bind mounts are not located inside /mnt. So if you are having issues, you can try setting the bind mount to be inside /mnt on the host.

I have to check on ACL's as well as there have been some updates in samba and posixacl recently.

@picasso566
Copy link

picasso566 commented Jun 22, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment