[RFC PATCH 02/27] containers: Implement containers as kernel objects
tycho at tycho.ws
Tue Feb 19 23:55:37 UTC 2019
On Fri, Feb 15, 2019 at 04:07:33PM +0000, David Howells wrote:
> FUTURE DEVELOPMENT
> (1) Setting up the container.
> A container would be created with, say:
> int cfd = container_create("fred", CONTAINER_NEW_EMPTY_FS_NS);
> Further mounts can be added by:
> move_mount(mfd, "", cfd, "proc", MOVE_MOUNT_F_EMPTY_PATH);
> (2) Starting the container.
> Once all modifications are complete, the container's 'init' process
> can be started by:
> fork_into_container(int cfd);
> This precludes further external modification of the mount tree within
> the container.
Is there a technical reason for this? In particular, there are some
container runtimes that do this today via clever use of bind mounts
and MS_MOVE, for things like dynamically attaching volumes. It would
be useful to be able to mount things into the container after the
> (3) Waiting for the container to complete.
> The container fd can then be polled to wait for init process therein
> to complete and the exit code collected by:
> container_wait(int container_fd, int *_wstatus, unsigned int wait,
> struct rusage *rusage);
> The container and everything in it can be terminated or killed off:
> container_kill(int container_fd, int initonly, int signal);
> If 'init' dies, all other processes in the container are preemptively
> SIGKILL'd by the kernel.
Isn't this essentially how the pid ns works today? I'm not sure what
the container fd offers here (of course if it lands, then having the
same semantics makes sense).
> (6) Running different LSM policies by container. This might particularly
> make sense with something like Apparmor where different path-based
> rules might be required inside a container to inside the parent.
Apparmor supports this today, as long as the host is also running
Apparmor. For the more general case, Casey (and others) have been
working on LSM stacking for a long time.
More information about the Linux-security-module-archive