ubuntu 14.04 体验LXC非特权容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

LXC 1.0 最大的特性是非特权容器,通过巧妙的uidmap,将物理机的普通用户(uid和gid)映射成容器里的root(uid=0,gid=0),极大的提高了lxc的安全性。


LXC 1.0 对内核和python版本有要求,故下文以 ubuntu 14.04 为例,使用普通用户dell创建非特权的lxc容器。

(以下操作,非特别说明,均为root权限操作,命令提示符为#号)


1、安装lxc

1
apt-get  install  lxc uidmap

2、创建普通用户

1
2
3
useradd  -m dell
mkdir  -p  /home/dell/ . local /share/lxc
mkdir  -p  /home/dell .config /lxc


3、配置uidmap


lxc 1.0 之前的版本虚拟机里的root 和宿主机root 共享一个uid/gid 0,这样非常不安全。


为了解决uid/gid为0的问题,非特权虚拟机主要依赖uidmap实现。


由于0-65535已经分配给了系统,lxc虚拟机需要额外分配id,映射成0,这里选择100000-165535


(我的理解是,其它非uid/gid 为0的用户依然保持内外一致。)


这里使用一个普通用户dell

1
2
3
4
usermod  - v  100000-165535 dell
usermod  -w 100000-165535 dell
echo  "lxc.id_map = u 0 100000 65536"  >>  /etc/lxc/default .conf
echo  "lxc.id_map = g 0 100000 65536"  >>  /etc/lxc/default .conf


u 0 100000 65536 表示 将uid 0映射成100000,共65536个


4、修改lxc配置

1
2
echo  "dell veth lxcbr0 10"  >>  /etc/lxc/lxc-usernet
cat  /etc/lxc/lxc-usernet  > /home/dell/ .config /lxc/default .conf

dell veth lxcbr0 10 表示dell用户最多可创建10个veth 桥接网卡


5、修正权限

1
2
chmod  +x  /home/dell
chown  -R dell:dell  /home/dell

6、以dell身份登录,创建容器

非特权容器创建有点区别,它使用一个download模板,去下载指定的已打包好的完整系统,而非使用apt/yum

1
lxc-create -n my-ubuntu -t download

-n 意思是--name,容器的名字

-t 意思是 --template,指定使用哪个模板


接下来会出现文本对话,模板包含主流的发行版,centos/debian/ubuntu等,选择自己需要的发行版,版本号,CPU架构 。


ubuntu 对非特权容器支持很好,这里选择ubuntu trusty amd64


也可以使用下面的命令,跳过对话,直接安装ubuntu非特权容器

1
lxc-create -t download -n my-ubuntu -- -d ubuntu -r trusty -a amd64

ubuntu模板系统默认的用户和密码均是ubuntu,可以sudo 。


7、查看刚刚创建的非特权容器

1
lxc- ls

8、启动非特权容器

1
lxc-start -n my-ubuntu


9、小技巧


a、让容器随系统启动

开机启动

$ echo "lxc.start.auto = 1" >>/home/dell/.local/share/lxc/my-ubuntu/config

开机延时启动

$ echo "lxc.start.delay = 5" >>/home/dell/.local/share/lxc/my-ubuntu/config


b、限制容器的资源

限CPU

$ echo "lxc.cgroup.cpu.shares  = 256" >>/home/dell/.local/share/lxc/my-ubuntu/config

限内存

$ echo "lxc.cgroup.memory.limit_in_bytes = 1024M" >>/home/dell/.local/share/lxc/my-ubuntu/config

限磁盘IO

$ echo "lxc.cgroup.blkio.weight = 500" >>/home/dell/.local/share/lxc/my-ubuntu/config


c、lxc官方已经打包了多个Linux系统,centos/debian/ubuntu各个版本皆有,也可以去官网手动下载。


http://images.linuxcontainers.org/images/


参考文档

https://www.stgraber.org/2014/01/17/lxc-1-0-unprivileged-containers/










本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1528503,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
Ubuntu 关系型数据库 MySQL
M1 macos docker获取x86 x64 amd 等指定架构版本linux ubuntu mysql 容器并启动容器
M1 macos docker获取x86 x64 amd 等指定架构版本linux ubuntu mysql 容器并启动容器
|
4月前
|
Ubuntu Docker 容器
在 Docker 的 Ubuntu 容器中设置 NTP 和时区
在 Docker 的 Ubuntu 容器中设置 NTP 和时区
69 1
|
5月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu系统重启自动启动Docker容器
Ubuntu系统重启自动启动Docker容器
|
7月前
|
Ubuntu NoSQL C++
百度搜索:蓝易云【搭建ubuntu容器内C/C++开发调试环境】
以上是搭建 Ubuntu 容器内 C/C++ 开发调试环境的一般教程。你可以根据实际需求进行进一步的定制和配置。请注意,使用容器进行开发调试可以提供一种隔离的环境,但也需要注意容器的资源限制和安全性。建议参考 Docker 官方文档和其他可靠资源,以获取更详细和特定于你的需求的指导。
31 1
H8
|
9月前
|
安全 网络协议 Shell
Docker 枚举、特权升级和容器逃逸 (DEEPCE)
为了使其与最大数量的容器兼容,DEEPCE 是纯编写的sh,没有依赖性。如果可用,它将使用其他工具,例如 curl、nmap、nslookup 和 dig,但在大多数情况下不依赖于它们进行枚举。 枚举都不应该触及磁盘,但是大多数漏洞利用会创建新的容器,这将导致磁盘写入,并且一些漏洞利用会覆盖 runC,这可能具有破坏性,所以要小心!
H8
138 0
|
9月前
|
存储 缓存 Ubuntu
【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解
【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解
275 0
|
10月前
|
Ubuntu 开发工具 Docker
【Docker】在ubuntu容器内使用apt-get遇到网络连接错误的解决方案
【Docker】在ubuntu容器内使用apt-get遇到网络连接错误的解决方案
|
11月前
|
Ubuntu 网络安全 Docker
ubuntu安装docker并利用镜像生成容器
ubuntu安装docker并利用镜像生成容器
309 0
|
4天前
|
存储 监控 安全
【专栏】Docker Compose:轻松实现容器编排的利器
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
|
4天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。