利用chroot构建centos沙箱环境

  • 内容
  • 评论
  • 相关

之前公司一直是采用php fpm + swoole来开发业务系统的,日志这块使用的ELK + filebeats,今年开始全线拥抱java,转java后一直有个需求,因为java开发的同事比较习惯在shell里面查看日志,所以需要为后端开发的同事开放线上系统的日志查看权限。为了保障线上系统服务的安全,防止开发的同事误操作造成线上系统异常一般运维都会专门为开发的同事构建沙箱环境来避免这个问题。奶嘴以前比较喜欢使用jailkit来构建沙箱环境。由于后期打算规范日志收集这块,所以临时使用的沙箱环境就不打算安装jailkit了,直接使用centos自带的chroot功能来实现。

实现步骤:

一、创建受限的沙箱根目录,并设置权限以及用户组

$ mkdir /data/jail
$ chown root: /data/jail
$ chmod 0755 /data/jail

二、创建沙箱环境需要的基本环境目录

$ mkdir /data/jail/{bin,dev,lib64,etc}

同时创建了三个目录:/data/jail/bin、/data/jail/dev、/data/jail/lib64、/data/jail/etc。bin目录是用于存放沙箱环境可执行的命令,dev是用于挂载外部设备的目录,lib64是用于存放沙箱环境依赖的动态链路库文件,etc用于存放沙箱环境的配置文件。

三、复制沙箱依赖的动态链路库文件到lib64

$ ldd $(which bash) // 查看bash所需的依赖
$ cp -r /lib64 /data/jail/ // 复制依赖

如果需要单独复制某些命令则可以单独查询命令的依赖文件,然后拷贝到/data/jail/lib64/目录下

四、开放指定命令到沙箱环境

$ cp /bin/ls /data/jail/bin/

以上是希望开放ls命令给沙箱环境的用户,如果需要开放其他命令则同样处理。

五、创建ssh以及sftp必须的字符设备

$ mknod -m 666 /data/jail/dev/null c 1 3
$ mknod -m 666 /data/jail/dev/tty c 5 0
$ mknod -m 666 /data/jail/dev/zero c 1 5
$ mknod -m 666 /data/jail/dev/random c 1 8

通过man sshd_config的说明,可以查看到创建运行shell和sftp所必须的字符设备。

六、挂载dev以及pts

$ mkdir /var/jail/dev/pts
$ mount --bind /dev /data/jail/dev
$ mount --bind /dev/pts /data/jail/dev/pts

如果不挂载dev以及pts则会出现成功登录ssh后无响应或无交互式shell。

七、修改profile环境变量

$ vi /etc/profile // 编辑profile文件,在profile文件中加入一行export PATH=$PATH:/bin
$ cp /etc/profile /data/jail/etc/  // 复制一份profile到沙箱环境下
$ source /etc/profile  // 使profile中的环境变量立即生效

这一步如果不执行则登录沙箱环境的ssh后会提示-bash: command not found。

八、创建沙箱用户

$ groupadd logger // 创建沙箱用户组
$ useradd -G logger nz_test // 创建沙箱用户
$ passwd nz_test // 修改用户密码

九、复制用户配置文件到沙箱环境

$ cp -vf /etc/{passwd,group} /data/jail/etc/

十、配置chroot

$ vi  /etc/ssh/sshd_config // 在文件末尾加上

Match Group logger
    ChrootDirectory /data/jail

这段配置一定要在文件末尾加上否则可能会引起sshd服务启动报错,另外Match块还可以加入其它匹配条件,如果有需求可以谷歌一下。

十一、重启sshd让chroot配置生效

$ systemctl restart sshd

十二、登录沙箱用户验证

$ ssh nz_test@localhost
bash_4.2# pwd
bash_4.2# ls

十三、共享主机上的文件到沙箱环境

这一步其实很简单,假设需要共享的文件在/data/logs,只需将/data/logs目录挂载到/data/jail/下任意目录即可。/data/jail/目录就是沙箱用户的/目录(根目录)。


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,非商业性质可转载须署名链接,详见本站版权声明。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注