Chrome中Sandbox沙盒技术Linux Sandbox

文章目录

  • Chromium OS中沙盒相关
  • Linux Sandboxing Summary
  • User ids
  • Capabilities
  • Namespace
  • Seccomp filters

Chromium OS中沙盒相关

以下各个设施均与minijail相关,与之配合运行

  • User ids
  • Capacities
  • Namespace
  • Seccomp filters
  • Securely mounting cryptohome daemon store folders

需要注意:以下技术并不完全都是chrome os的,大部分都是linux支持的。

Linux Sandboxing Summary

image
上图包含了几个Sandbox的分层,括号内写了哪些东西主要用了哪些Sandbox Layer

User ids

作用:指定某个服务或应用以哪个用户的身份运行。即minijail的-u参数。
相当于Windows的右键-以其它用户身份执行。

exec minijail0 -u devbroker -c 0009 /usr/bin/permission_broker \
    --access_group=${PERMISSION_BROKER_GRANT_GROUP}

此时应用的权限被局限于该用户拥有的权限。

Capabilities

当一些非特权应用,需要一些root用户才能调用的函数时,则通过Capacities将一些root才能使用的函数授权给普通权限的程序去使用

作用:使能非root服务、进程调用要求root权限的函数。

在conf文件中对exec minijail0添加-c 参数即可开放对应的函数。

exec minijail0 -u devbroker -c 0009 /usr/bin/permission_broker \
    --access_group=${PERMISSION_BROKER_GRANT_GROUP}

其中,-c后面跟的mask指示了允许非root程序授权调用哪些root函数。mask的计算方法如下。

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/capability.h
计算方法:#define CAP_TO_MASK(x)      (1 << ((x) & 31)) /* mask for indexed __u32 */

其中,-c跟着的mask值并不是一定只包含了一个函数,有可能是多个函数经过计算之后得出的mask值,而后进行相加。例如:样例中的0009就不是只开放了一个函数,经过计算,发现是开放了两个函数。

通过mask得出开放的函数的计算过程如下:

  1. -c 0009:即mask为0000 0000 0000 1001
  2. 判断开放了多少个函数的方法是看二进制中有几多个1。原理是:每个函数对应一个十进制数字,该数字首先执行操作:(x) & 31,然后使用1左移得到的结果:(1 << ((x) & 31)),然后依次按照这个步骤对各个函数计算左移结果,最终将所有左移结果相加。因此二进制中有多少1,那表明开放的函数就有多少个。
  3. 样例中为1001,两个1,两个函数,其中第一个1是8,8是1右移3位得到的,所以(x) & 31就是3。
  4. (x) & 31 == 3因此x=3,查capacities.h得到对应宏定义CAP_FOWNER,即开放的其中一个函数为fowner()

在各个服务的upstart conf文件中找到exec minijail0,添加参数-c MASK 即可授权该服务访问指定的root权限函数

Namespace

Linux namespace可以将各个进程之间分隔开,使得采用了不同命名空间的进程看到的事物视图不相同。

作用:namespace可以让进程拥有自己单独的视图,并且任何对系统的修改不会影响命名空间之外。在命名空间内,进程拥有独立的、不一定等同于真实物理环境的系统环境,且自身的修改不会影响系统。

  • 命名空间是对系统资源的包装。
  • 同一命名空间内的进程可以看到其他进程的修改,但是不同命名空间之间的进程之间不能看到修改。

A namespace wraps a global system resource in an abstraction that
makes it appear to the processes within the namespace that they have
their own isolated instance of the global resource. Changes to the
global resource are visible to other processes that are members of
the namespace, but are invisible to other processes. One use of
namespaces is to implement containers.

/proc/[pid]/ns包含了每个进程所在的命名空间。

Namespace

Seccomp filters

SECure COMPuting

BPF: Berkeley Packet Filter 安全计算模块

*.policy指定规则,告知minijail:

  • 可以调用哪些、不可以调用哪些syscall
  • 哪些syscall可以使用哪些参数而另外的参数不允许使用

policy文件设置对应的syscall为允许调用和禁止调用,通过ebuild文件将*.policy文件安装到指定的位置,在启动时通过minijail的-S参数指定应用的policy文件。

你可能感兴趣的:(学习笔记,linux,Chromium,Chromium,OS,Chrome,OS,Chrome)