パスワードを忘れた? アカウント作成
13606628 journal
日記

beroの日記: gVisor: Linux互換カーネル 1

日記 by bero

gVisor は go で実装されたlinuxエミュレータ(互換カーネル)で、syscallを横取りしてこちらで実行する。
仮想化、コンテナに続く第三の方式、といえるのではなかろうか

- 仮想化:HWエミュレーション。HWのIOポート番号までエミュる(完全仮想化)のはうざいので、host OS でブロックデバイスとかまで抽象化したのをguestの抽象化レイヤにバイパス(準仮想化デバイスドライバ)する。
 あえてバイパス(もしくはバグをついてエミュレータを乗っ取る)しない限り、原則として分離。
- コンテナ: chrootにいっぱい毛が生えたやつ。chrootは ファイルシステム空間を分離するが、他にもいろいろ分離する。
 分離を実装しない限り、原則として丸見え。
- gVisor: OSエミュレーション(互換カーネル)。
 あえてバイパスしない限り、原則として分離。しかもsandbox上(syscallを制限)なので、乗っ取られても被害が最小。

コンテナの軽量さと、より安全な分離を実現する「gVisor」、Googleがオープンソースで公開

gVisorを使ってdockerコンテナをより安全に利用する
>要するにDockerアプリケーションからのシステムコールをgVisorが一度受け取り、それをホストカーネルに渡す仕組みになっている。
この辺読んで、syscallをトラップして チェックしてから ホストカーネルに渡すレイヤ、と誤解してたが

https://github.com/google/gvisor
>gVisor is a user-space kernel, written in Go, that implements a substantial portion of the Linux system surface.>
>gVisor's approach is similar to User Mode Linux (UML),
gVisorは、Goで書かれたユーザ空間カーネルであり、Linuxシステムの大部分を実装しています。
gVisorのアプローチはUML(User Mode Linux)と似ています

アプリからの syscall を ptraceで横取りして、ユーザ空間の互換カーネルで処理する。互換カーネルはseccompサンドボックス(syscallが制限された環境)で動く。

http://mmi.hatenablog.com/entry/2016/08/01/044000
>seccomp (Secure Computingの略らしい)は,Linuxにおいてサンドボックスを実現するために プロセスのシステムコールの発行を制限する機能です. seccompを使っている代表的なアプリケーションにはchromeやOpen SSHなどがあります.最近利用が増えてきているようです.

ファイルシステム:
 tmp,proc を実装し、他は別プロセスのファイルサーバに投げる。
 ファイルサーバとは 9P (Plan 9 Filesystem Protocol)で通信する
 ファイルサーバは普通に(sandboxなしで)syscallする (説明図では)
ネットワーク:TCP/IPを実装し、実カーネルの仮想NICに投げる

で、その実装に必要な最小限のsyscallだけ使えるように seccompで制限している。
具体的には この辺

結論:公式読め

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...