前言

我们在实际的docker运行环境下,大都会遇到多用户的情况,为了安全起见,有些用户我们不想给予其全面的docker控制权限,比如不想某些用户执行docker stop 以及docker rm 等危险指令,当然我们可以从系统账号权限来控制,但docker在实际生产环节中大都以集群方式部署,都是通过docker守护进程接口来操作docker,系统控制实现起来略显麻烦,还好docker官方提供了非常方便的扩展插件来实现对用户权限细粒度控制,可细到只允许指定用户执行指定的docker命令,本文详细介绍如何来实现。

Docker 插件

Docker 引擎允许用户使用第三方插件的形式扩展 Docker 功能。Docker 的插件类型分为以下三种大类:Network plugins 网络插件可以提供容器间互联网络模型。

Volume plugins 数据卷插件可以使 Docker 数据卷跨多个主机。

Authorization plugins 验证插件可以提供基于权限的访问控制,也是本文主要讲的插件,比较出名的就是 Twistlock AuthZ Broker 。

Twistlock AuthZ Broker

Twistlock AuthZ Broker 是一个直接运行在主机或容器中的 Dockers 授权插件,基于简单的用户审计策略,可以过滤命令是否允许执行。

源码地址

https://github.com/deathmemory/authz

Authz Build

编译需要依赖 go 语言。在 Ubuntu 下可直接执行 sudo apt-get install golang 进行安装。

安装完成后需要配置 GOPATH 环境变量, GOPATH 是 golang 的扩展库目录。golang 会首先搜索标准库目录,然后搜索 GOPATH 扩展库目录。所以开发时可以把非标准库都放在 GOPATH 目录下。

配置好开发环境后就可以下载源码到本地,执行以下命令就可以成功编译并 Build 成 Docker 镜像文件。$cd broker/$go build$mv broker ../authz-broker$cd ..$docker build .

本地Build 源码修改

在上面的 Build 中可以根据个人需要来修改一些配置,比如修改虚拟机引用和生成文件。diff --git a/Dockerfile b/Dockerfile

index 2cfb355..c459421 100755--- a/Dockerfile+++ b/Dockerfile@@ -1,4 +1,4 @@-FROM alpine:3.3+FROM ubuntu:16.04

MAINTAINER Liron Levin

# Indicates basic authorization is enforced

@@ -13,6 +13,7 @@ ENV AUDITOR-HOOK ""

VOLUME /var/lib/twistlock/policy.json

VOLUME /run/docker/plugins/

-ADD ./authz-broker  /usr/bin/authz-broker+ADD ./authz-broker  /usr/bin/authz-dm++CMD ["/usr/bin/authz-dm"]

-CMD ["/usr/bin/authz-broker"]\ No newline at end of file

项目依赖默认是引用了 github 上的库,想要修改库里的代码实现自定义功能,需要把引用改为本地引用,然后再修改相应的功能即可。diff --git a/authz/basic.go b/authz/basic.go

index 0ed708d..042a904 100755--- a/authz/basic.go+++ b/authz/basic.go@@ -3,11 +3,13 @@ package authz

import (

"encoding/json"

"fmt"+

"github.com/Sirupsen/logrus"

logrus_syslog "github.com/Sirupsen/logrus/hooks/syslog"

"github.com/docker/docker/pkg/authorization"

"github.com/howeyc/fsnotify"-       "github.com/twistlock/authz/core"++       "authz/core"

"io/ioutil"

"log/syslog"

"os"diff --git a/broker/main.go b/broker/main.go

index 0526811..f3e76f0 100755--- a/broker/main.go+++ b/broker/main.go@@ -3,11 +3,13 @@ package main

import (

"fmt"+       "os"+

Twistlock AuthZ Broker 插件的使用

安装插件

Twistlock AuthZ Broker 可以在容器中直接安装也可以在Docker外的主机中安装。

在容器中安装

在容器中安装直接运行

$ docker run -d --restart=always -v /var/lib/authz-broker/policy.json:/var/lib/authz-broker/policy.json -v /run/docker/plugins/:/run/docker/plugins twistlock/authz-broker

在主机中安装

在主机中安装需要编辑 docker 服务配置文件。

sudo systemctl edit --full docker.service

添加 authz 运行参数。# add plugin flagExecStart=/usr/bin/dockerd --authorization-plugin=authz-broker

重启服务# reload deamonsystemctl daemon-reload

systemctl restart docker

授权配置

在路径 /var/lib/authz-broker/policy.json 下配置授权内容{"name":"policy_1","users":["alice"],"actions":[""]}

此处配置指明方案 policy_1 的用户 alice 可以执行的命令 actions 为所有命令。{"name":"policy_3","users":["alice","bob"],"actions":["container_create"]}

方案 policy_3 用户 alice 和 bob 可以执行的命令只有创建容器。

检查结果

允许结果docker versionClient:

Version: 1.12.1

API version: 1.24

Go version: go1.6.3

Git commit: 23cf638

Built:

OS/Arch: linux/amd64

Server:

Version: 1.12.1

API version: 1.24

Go version: go1.6.3

Git commit: 23cf638

Built:

OS/Arch: linux/amd64

#and log output: Sep 04 15:08:29 mj authz-broker[28646]: {"allow":true,"err":"","fields.msg":"action 'docker_version' allowed for user '' by policy 'policy_1'","level":"info","method":"GET","msg":"Request","time":"2016-09-04T15:08:29+01:00","uri":"/v1.24/version","user":""}

拒绝结果Client: Version:      17.03.1-ce

API version:  1.27

Go version:   go1.7.5

Git commit:   c6d412e Built:        Mon Mar 27 17:14:09 2017

OS/Arch:      linux/amd64

Error response from daemon: authorization denied by plugin authz-broker: no policy applied (user: '' action: 'docker_version')

错误处理

no such file or directory

这是 authz Dockerfile 引用的是 FROM alpine:3.3 这个系统没有 bash ,改成 FROM ubuntu:16.04 就可以了。

还有其他的情况导致这个报错:32位64位程序和系统不兼容导致

Dockerfile 指定的文件没有打包到 image 中

可以用 docker run -it image/name [/bin/sh | /bin/bash] 进入image 环境,看看里面的文件是否齐全。

前期文章

《docker容器的全面安全防护》

《配置一个安全的docker宿主机》

后续预告

《docker镜像安全扫描器的实现》

《docker最佳安全实践详解》

《docker内容信任详解》

《docker安全管理平台的架构设计》

欢迎订阅关注我们!!!

细粒度权限控制 linux,利用docker插件实现细粒度权限控制相关推荐

  1. linux文件夹改不了权限吗,linux修改文件和文件夹权限及所有者

    类别:CentOS / 日期:2019-10-10 / 浏览:377 / 评论:0 修改权限命令: chmod [-R] xyz文件/目录(xyz是数值或字符) 修改文件/目录所有者命令: chown ...

  2. php 位运算与权限,PHP巧妙利用位运算实现网站权限管理的方法

    首先我们先定义4个常量来设定四种权限: ===================================== define(ADD,1);//增加数据库记录的权限 define(UPD,2);/ ...

  3. 手机控制linux电脑,通过Amora用symbian手机控制linux系统的电脑

    通过Amora用symbian手机控制linux系统的电脑 发布时间:2008-01-07 20:49:09来源:红联作者:Desktop 原文章地址http://yegle.net/2007/12/ ...

  4. linux apache目录权限配置,Linux下Apache网站目录读写权限的设置

    网站目录文件权限的设置对网站的安全至关重要,下面简单介绍网站目录文件权限的基本设定. 我们假设http服务器运行的用户和用户组是www,网站用户为CentOS,网站根目录是/home/centos/w ...

  5. Linux系统文件夹权限475,linux系统中文件的特殊权限

    在上篇博客中叙述linux系统中文件的基本属性,见http://vinsent.blog.51cto.com/13116656/1951574,这篇给大家带来linux系统文件的特殊权限,包括SUID ...

  6. linux sftp权限设置,Linux设置SFTP服务用户目录权限

    我们有时会遇到这样的需求,限制一个Linux用户,让他只能在指定的目录下进行添加.修改.删除操作,并且只能使用sftp登录服务器,不能用ssh操作.这些可以通过配置sftp服务实现. 提供sftp服务 ...

  7. Git 提交失败提示无写入权限与 Linux 下创建文件的默认权限

    2019独角兽企业重金招聘Python工程师标准>>> 最近给公司部署了 git 服务器(CentOS 6.3),由于之前没有配置 git server 的经验,搞了半天才把配置搞定 ...

  8. linux tar权限不够,Linux用户,群组,权限 ,tar命令

    -u:用户的UID -g:用户的GID(主组) -G:将一个用户加入到指定的群组中(附加组) -d:用户的家目录 -c:用户的备注信息 -s:用户所用的shell /bin/bash就说明这个用户可以 ...

  9. linux修改usb权限,在Linux中永久修改USB设备权限该怎么做?

    问题 当我尝试在 Linux 中运行 USB GPS 接收器时我遇到了下面来自 gpsd 的错误. 看上去 gpsd 没有权限访问 USB 设备(/dev/ttyUSB0). 我该如何永久修改它在Li ...

最新文章

  1. python默认的一个代码缩进是几个空格_python缩进长度是否统一
  2. 高端手机市场,拼配置还是拼安全
  3. 完成MSP430的IAP升级程序(总结)
  4. 阿里巴巴、支付宝员工都在用的知识管理工具,究竟有何特别?
  5. VC/C++的中文字符处理方式
  6. Oracle多行记录合并/连接/聚合字符串的几种方法
  7. python opencv 找到圆点标定板所有点后通过距离找四个角点2
  8. 微信小程序:调用API接口
  9. 【认识硬件】之 电压比较器芯片LM393
  10. fv计算机公式,p=fv是什么公式
  11. 服务器修改拔刀剑修改数,In-Game NBTEdit自定义拔刀剑
  12. matplotlib色彩(colors)之色彩基础知识(色彩模型,matplotlib色彩格式,matplotlib默认色彩映射)
  13. 本地生成RDL报表文件的创建工具
  14. OpenNI和Kinect安装中文教程
  15. adf输稿器是什么_ADF输稿器 多页复印法宝_多功能一体机_办公打印导购-中关村在线...
  16. 听说蝴蝶国的小公主可漂亮了!黑亮的头发
  17. 阿里云有奖调查!赠10个阿里巴巴logo胸针
  18. 用cookie登录KinhDown教程
  19. 前端资深技术专家苏千的“三迁”故事
  20. bukgu 杂项 图穷匕见

热门文章

  1. 常见cmd命令,开发人员必备
  2. python 发送邮件的两种方式【终极篇】
  3. javascript设计模式-继承
  4. 关于java assertion
  5. Mysql数据导入导出
  6. .NET混淆器 Dotfuscator如何保护应用程序?控制流了解一下!
  7. 你的GitHub,怎么和我用的不太一样?
  8. 【转载文章】记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案...
  9. 配合OAuth2进行单设备登录拦截
  10. 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】...