Linux极简沙箱的实现

目的

目的很简单,就是运行一些有风险的应用程序的时候,针对该程序把个人文件目录给屏蔽掉,防止个人文件被读取和篡改。

实现方式

用到了unshare这个命令,脚本如下:

#!/bin/bash

set -e

MY_USER=$USER

sudo unshare -f -m -p --mount-proc bash -c "\
    mount -t tmpfs none /data && \
    mount --bind $PWD/sandbox/home /home && \
    /usr/bin/docker-init -- su $MY_USER"

原理

unshare命令用到了Linux的Namespace特性,是 Linux 内核用来隔离内核资源的方式,也是Docker的原理之一。可以通过man 1 unshare查看参数的含义。

通过-m参数,隔离与其他进程之间的mount操作,防止mount影响到其他进程。

这里把有个人文件的/data目录mount到tmpfs,实现屏蔽的效果,再通过mount --bind来屏蔽/home目录,对/home的操作转移到沙箱的文件夹。

因为通过-p--mount-proc隔离了PID,所以使用docker-init作为1号进程,处理其他进程产生的SIGCHLD信号,防止僵尸进程的产生等作用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容