日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2023/12/20 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 细粒度权限控制 linux,利用docker插件实现细粒度权限控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

我們在實際的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插件实现细粒度权限控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。