All Projects → lxc → Lxc

lxc / Lxc

Licence: other
LXC - Linux Containers

Programming Languages

c
50402 projects - #5 most used programming language
shell
77523 projects
Makefile
30231 projects
M4
1887 projects
Meson
512 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Lxc

Lxdock
Build and orchestrate your development environments with LXD - a.k.a. Vagrant is Too Heavy™
Stars: ✭ 350 (-90.23%)
Mutual labels:  containers, lxc
Amicontained
Container introspection tool. Find out what container runtime is being used as well as features available.
Stars: ✭ 638 (-82.19%)
Mutual labels:  containers, lxc
Vas Quod
🚡 Minimal linux container runtime.
Stars: ✭ 404 (-88.72%)
Mutual labels:  containers, lxc
Go Lxc
Go bindings for liblxc
Stars: ✭ 336 (-90.62%)
Mutual labels:  containers, lxc
Ruby Lxc
ruby bindings for liblxc
Stars: ✭ 115 (-96.79%)
Mutual labels:  containers, lxc
Lxdui
LXDUI is a web UI for the native Linux container technology LXD/LXC
Stars: ✭ 443 (-87.64%)
Mutual labels:  containers, lxc
Lxcfs
FUSE filesystem for LXC
Stars: ✭ 602 (-83.2%)
Mutual labels:  containers, lxc
Lxc Pkg Ubuntu
LXC Ubuntu packaging
Stars: ✭ 11 (-99.69%)
Mutual labels:  containers, lxc
Lxc Ci
LXC continuous integration and build scripts
Stars: ✭ 110 (-96.93%)
Mutual labels:  containers, lxc
Addon Lxdone
Allows OpenNebula to manage Linux Containers via LXD
Stars: ✭ 36 (-99%)
Mutual labels:  containers, lxc
Lxd
Powerful system container and virtual machine manager
Stars: ✭ 3,115 (-13.06%)
Mutual labels:  containers, lxc
Distrobuilder
System container image builder for LXC and LXD
Stars: ✭ 211 (-94.11%)
Mutual labels:  containers, lxc
Lxdmosaic
Web interface to manage multiple instance of lxd
Stars: ✭ 270 (-92.46%)
Mutual labels:  containers, lxc
Rancher
Complete container management platform
Stars: ✭ 18,191 (+407.7%)
Mutual labels:  containers
Shifter
Shifter - Linux Containers for HPC
Stars: ✭ 308 (-91.4%)
Mutual labels:  containers
Yoyogo
🦄🌈 YoyoGo is a simple, light and fast , dependency injection based micro-service framework written in Go. Support Nacos ,Consoul ,Etcd ,Eureka ,kubernetes.
Stars: ✭ 277 (-92.27%)
Mutual labels:  containers
Titus Control Plane
Titus is the Netflix Container Management Platform that manages containers and provides integrations to the infrastructure ecosystem.
Stars: ✭ 282 (-92.13%)
Mutual labels:  containers
Img
Standalone, daemon-less, unprivileged Dockerfile and OCI compatible container image builder.
Stars: ✭ 3,512 (-1.98%)
Mutual labels:  containers
Dockerfile
Dockerfile best-practices for writing production-worthy Docker images.
Stars: ✭ 3,506 (-2.15%)
Mutual labels:  containers
K8s Sidecar Injector
Kubernetes sidecar injection service
Stars: ✭ 280 (-92.19%)
Mutual labels:  containers

LXD

LXC

LXC is the well-known and heavily tested low-level Linux container runtime. It is in active development since 2008 and has proven itself in critical production environments world-wide. Some of its core contributors are the same people that helped to implement various well-known containerization features inside the Linux kernel.

Status

Type Service Status
CI (Linux) GitHub Build Status
CI (Linux) Jenkins Build Status
Project status CII Best Practices CII Best Practices
Code Quality LGTM Language grade: C/C++
Fuzzing OSS-Fuzz Fuzzing Status
Fuzzing CIFuzz CIFuzz

System Containers

LXC's main focus is system containers. That is, containers which offer an environment as close as possible as the one you'd get from a VM but without the overhead that comes with running a separate kernel and simulating all the hardware.

This is achieved through a combination of kernel security features such as namespaces, mandatory access control and control groups.

Unprivileged Containers

Unprivileged containers are containers that are run without any privilege. This requires support for user namespaces in the kernel that the container is run on. LXC was the first runtime to support unprivileged containers after user namespaces were merged into the mainline kernel.

In essence, user namespaces isolate given sets of UIDs and GIDs. This is achieved by establishing a mapping between a range of UIDs and GIDs on the host to a different (unprivileged) range of UIDs and GIDs in the container. The kernel will translate this mapping in such a way that inside the container all UIDs and GIDs appear as you would expect from the host whereas on the host these UIDs and GIDs are in fact unprivileged. For example, a process running as UID and GID 0 inside the container might appear as UID and GID 100000 on the host. The implementation and working details can be gathered from the corresponding user namespace man page.

Since unprivileged containers are a security enhancement they naturally come with a few restrictions enforced by the kernel. In order to provide a fully functional unprivileged container LXC interacts with 3 pieces of setuid code:

  • lxc-user-nic (setuid helper to create a veth pair and bridge it on the host)
  • newuidmap (from the shadow package, sets up a uid map)
  • newgidmap (from the shadow package, sets up a gid map)

Everything else is run as your own user or as a uid which your user owns.

In general, LXC's goal is to make use of every security feature available in the kernel. This means LXC's configuration management will allow experienced users to intricately tune LXC to their needs.

A more detailed introduction into LXC security can be found under the following link

Removing all Privilege

In principle LXC can be run without any of these tools provided the correct configuration is applied. However, the usefulness of such containers is usually quite restricted. Just to highlight the two most common problems:

  1. Network: Without relying on a setuid helper to setup appropriate network devices for an unprivileged user (see LXC's lxc-user-nic binary) the only option is to share the network namespace with the host. Although this should be secure in principle, sharing the host's network namespace is still one step of isolation less and increases the attack vector. Furthermore, when host and container share the same network namespace the kernel will refuse any sysfs mounts. This usually means that the init binary inside of the container will not be able to boot up correctly.

  2. User Namespaces: As outlined above, user namespaces are a big security enhancement. However, without relying on privileged helpers users who are unprivileged on the host are only permitted to map their own UID into a container. A standard POSIX system however, requires 65536 UIDs and GIDs to be available to guarantee full functionality.

Configuration

LXC is configured via a simple set of keys. For example,

  • lxc.rootfs.path
  • lxc.mount.entry

LXC namespaces configuration keys by using single dots. This means complex configuration keys such as lxc.net.0 expose various subkeys such as lxc.net.0.type, lxc.net.0.link, lxc.net.0.ipv6.address, and others for even more fine-grained configuration.

LXC is used as the default runtime for LXD, a container hypervisor exposing a well-designed and stable REST-api on top of it.

Kernel Requirements

LXC runs on any kernel from 2.6.32 onwards. All it requires is a functional C compiler. LXC works on all architectures that provide the necessary kernel features. This includes (but isn't limited to):

  • i686
  • x86_64
  • ppc, ppc64, ppc64le
  • riscv64
  • s390x
  • armvl7, arm64

LXC also supports at least the following C standard libraries:

  • glibc
  • musl
  • bionic (Android's libc)

Backwards Compatibility

LXC has always focused on strong backwards compatibility. In fact, the API hasn't been broken from release 1.0.0 onwards. Main LXC is currently at version 4.*.*.

Reporting Security Issues

The LXC project has a good reputation in handling security issues quickly and efficiently. If you think you've found a potential security issue, please report it by e-mail to all of the following persons:

  • serge (at) hallyn (dot) com
  • stgraber (at) ubuntu (dot) com
  • christian.brauner (at) ubuntu (dot) com

For further details please have a look at

Becoming Active in LXC development

We always welcome new contributors and are happy to provide guidance when necessary. LXC follows the kernel coding conventions. This means we only require that each commit includes a Signed-off-by line. The coding style we use is identical to the one used by the Linux kernel. You can find a detailed introduction at:

and should also take a look at the CONTRIBUTING file in this repo.

If you want to become more active it is usually also a good idea to show up in the LXC IRC channel #lxc-dev on irc.libera.chat. We try to do all development out in the open and discussion of new features or bugs is done either in appropriate GitHub issues or on IRC.

When thinking about making security critical contributions or substantial changes it is usually a good idea to ping the developers first and ask whether a PR would be accepted.

Semantic Versioning

LXC and its related projects strictly adhere to a semantic versioning scheme.

Downloading the current source code

Source for the latest released version can always be downloaded from

You can browse the up to the minute source code and change history online

Building LXC

Without considering distribution specific details a simple

./autogen.sh && ./configure && make && sudo make install

is usually sufficient.

In order to test current git master of LXC it is usually a good idea to compile with

./autogen.sh && ./configure && make

in a convenient directory and set LD_LIBRARY_PATH="${BUILD_DIR}"/lxc/src/lxc/.libs.

Getting help

When you find you need help, the LXC projects provides you with several options.

Discuss Forum

We maintain an discuss forum at

where you can get support.

IRC

You can find us in #lxc on irc.libera.chat.

Mailing Lists

You can check out one of the two LXC mailing list archives and register if interested:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].