google/gvisor
GitHub: google/gvisor
Google开源的容器应用内核,通过在用户态实现Linux接口为容器提供强隔离沙箱能力,填补容器与虚拟机之间的安全空白。
Stars: 17818 | Forks: 1521

[](https://buildkite.com/gvisor/pipeline)
[](https://github.com/google/gvisor/actions/workflows/issue_reviver.yml)
[](https://github.com/google/gvisor/actions/workflows/codeql.yml)
[](https://gitter.im/gvisor/community)
[](https://cs.opensource.google/gvisor/gvisor)
## gVisor 是什么?
**gVisor** 在运行中的应用程序和主机操作系统之间提供了一层强大的隔离。它是一个实现了 [类 Linux 接口][linux] 的应用内核。与 Linux 不同,它使用内存安全语言编写,并运行在用户态。
gVisor 包含一个名为 `runsc` 的 [Open Container Initiative (OCI)][oci] 运行时,这使得它可以轻松地与现有的容器工具配合使用。`runsc` 运行时与 Docker 和 Kubernetes 集成,使得运行沙箱容器变得非常简单。
## gVisor **不是**什么?
* gVisor **不是系统调用过滤器**(例如 `seccomp-bpf`),也不是 Linux 隔离原语的封装(例如 `firejail`、AppArmor 等)。
* gVisor 也**不是**日常术语意义上的虚拟机(例如 VirtualBox、QEMU)。
**gVisor 采用独特的第三种方法**,在提供虚拟机的许多安全优势的同时,保持了常规用户态应用程序的低资源占用、快速启动和灵活性。
## gVisor 为什么存在?
容器不是 [**沙箱**][sandbox]。虽然容器彻底改变了我们开发、打包和部署应用程序的方式,但在没有额外隔离的情况下使用它们来运行不可信或潜在恶意的代码并不是一个好主意。虽然使用单一共享内核可以提高效率和性能,但也意味着只要存在一个漏洞,容器逃逸就可能发生。
gVisor 是一个用于容器的应用内核。它在限制应用可访问的主机内核攻击面的同时,仍然为应用提供其期望的所有功能。与大多数内核不同,gVisor 不假设或要求固定的物理资源集;相反,它利用现有的主机内核功能并作为一个普通进程运行。换句话说,gVisor 通过 Linux 来实现 Linux。
不应将 gVisor 与那些用于加固容器以抵御外部威胁、提供额外完整性检查或限制服务访问范围的技术和工具混淆。用户应始终小心哪些数据对容器可见。
## 文档
用户文档和技术架构(包括快速入门指南)可以在 [gvisor.dev][gvisor-dev] 找到。
## 从源代码安装
gVisor 可在 x86_64 和 ARM64 上构建。其他架构可能会在未来支持。
出于这些说明的目的,[bazel][bazel] 和其他构建依赖项被封装在一个构建容器中。也可以直接使用 [bazel][bazel],或者输入 `make help` 查看标准目标。
### 要求
确保已安装以下依赖项:
* Linux 4.14.77+ ([较旧的 linux][old-linux])
* [Docker 17.09.0 或更高版本][docker]
### 构建
构建并安装 `runsc` 二进制文件:
```
mkdir -p bin
make copy TARGETS=runsc DESTINATION=bin/
sudo cp ./bin/runsc /usr/local/bin
```
要构建特定的库或二进制文件,您可以指定目标:
```
make build TARGETS="//pkg/tcpip:tcpip"
```
### 直接使用 Bazel 构建(不使用 Docker)
由于额外的开销,不建议直接使用 Bazel,但要开始使用,请:
- 查看 [构建 dockerfile](images/default/Dockerfile) 以获取所需依赖项的规范列表。
- 安装并使用 [bazelisk][bazelisk]。或者,确保您的 bazel 版本与 [.bazelversion](.bazelversion) 文件中列出的版本匹配。
设置好依赖项后,使用 Bazel 与使用 Makefile 类似:
```
bazel build //runsc:runsc
```
### 测试
要运行标准测试套件,您可以使用:
```
make unit-tests
make tests
```
要运行特定测试,您可以指定目标:
```
# Makefile
make test TARGETS="//runsc:version_test"
# Bazel
bazel test //runsc:version_test
```
### Mac OS
某些包支持直接在 macOS 上运行测试。在撰写本文时,gVisor 需要 bazel 8,您可以通过 homebrew 安装它:
```
brew install bazel@8
# 然后你可以运行测试,例如:
$(brew --prefix bazel@8)/bin/bazel test --macos_sdk_version=$(xcrun --show-sdk-version) -- //tools/nogo/... //tools/check{aligned,const,escape,linkname,locks,unsafe}/...
```
### 使用 `go get`
该项目使用 [bazel][bazel] 来构建和管理依赖项。为了方便起见,维护了一个与标准 `go` 工具兼容的合成 `go` 分支。
例如,要直接从此分支构建并安装 `runsc`:
```
echo "module runsc" > go.mod
GO111MODULE=on go get gvisor.dev/gvisor/runsc@go
CGO_ENABLED=0 GO111MODULE=on sudo -E go build -o /usr/local/bin/runsc gvisor.dev/gvisor/runsc
```
随后,您可以构建并安装 `containerd` 的 shim 二进制文件:
```
GO111MODULE=on sudo -E go build -o /usr/local/bin/containerd-shim-runsc-v1 gvisor.dev/gvisor/shim
```
请注意,此分支是在尽力而为的基础上提供支持的,不支持直接在此分支上进行开发。开发应在 `master` 分支上进行,然后反映到 `go` 分支中。
## 社区与治理
有关项目治理信息,请参阅 [GOVERNANCE.md](GOVERNANCE.md)。
[gvisor-users 邮件列表][gvisor-users-list] 和 [gvisor-dev 邮件列表][gvisor-dev-list] 是提问和讨论的良好起点。
## 安全策略
请参阅 [SECURITY.md](SECURITY.md)。
## 贡献
请参阅 [Contributing.md](CONTRIBUTING.md)。
标签:DNS解析, Docker, EVTX分析, EVTX分析, Google, Go语言, gVisor, JSONLines, Nuclei, runsc, Web截图, Web报告查看器, 子域名突变, 安全防御评估, 容器安全, 容器防护, 应用内核, 开源项目, 日志审计, 沙箱, 用户态内核, 程序破解, 系统隔离, 虚拟化, 请求拦截, 防御逃逸, 零信任