1. 程式人生 > >Docker安全--關於Docker使用root與非root使用者的場景中的容器與host中的執行使用者的研究

Docker安全--關於Docker使用root與非root使用者的場景中的容器與host中的執行使用者的研究

/*************************************************
* Author : Samson
* Date : 08/15/2015
* Test platform:
* gcc 4.8.2
* GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu)
* ***********************************************/

結論

實際進行測試的Dockerfile是shadowsocks的Dockerfile,在此Dockerfile中新增兩行即
可使後續執行應用程式時的許可權為非root使用者,將進行對比docker中的程序狀態與Host
環境中的應用程式的執行狀態進行對比,可以看出在docker中以普通使用者許可權執行的程
序在host主機中執行的也是普通使用者許可權,在docker中以root使用者許可權執行的程式在host
主機中執行的也是root使用者許可權。

前提說明

為了區分root與非root使用者的區別,若在Dockerfile中不使用USER進行指定使用者的情況
下,將會預設按root的許可權進行啟動應用程式,為了安全考慮,除非必須使用root許可權,
絕不使用root許可權,那麼就在Dockerfile中要執行程式前使用USER指定非root使用者來執行
應用程式,只需要在執行程式前新增一個非root許可權使用者並使用USER命令切換到此非root使用者即可。

具體修改方法

新增如下兩行在ENTRYPOINT [“/bin/tini”, “–”, “/usr/local/bin/shadowsocks.sh”]的前面:

RUN useradd noroot -u 1000 -s /bin/bash
USER noroot

編譯映象方法

然後在Dockerfile目錄下分別在修改前後執行:
修改前:

docker build -rm -t rootyygy .

修改後:

docker build -rm -t norootyygy .

其中rootyygy為預設root使用者執行應用程式的映象,norootyygy為普通使用者執行應用程式的映象。

啟動映象:

docker run -d --name rootyygy rootyygy
docker run -d --name norootyygy norootyygy

得到兩個容器的程序號:

$ docker inspect -f {{.State.Pid}} rootyygy
9818
$ docker inspect -f {{.State.Pid}} norootyygy
9875

進入兩個容器中:

noroot容器中:

sudo nsenter --target 9875 --mount --uts --ipc --net --pid

在容器中顯示程序:

[email protected]:/# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
noroot        1  0.0  0.0   1104     4 ?        Ss   08:14   0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
noroot        7  0.0  0.0  20032  2816 ?        S    08:14   0:00 /bin/bash /usr/local/bin/shadowsocks.sh
noroot        8  0.0  0.3  45764 14368 ?        S    08:14   0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
root         20  0.0  0.0  20256  3192 ?        S    08:17   0:00 -bash
root         25  0.0  0.0  17488  2040 ?        R+   08:21   0:00 ps aux

在host主機的程序檢視:

$ ps aux | grep shadowsocks
ufo       10594  0.0  0.0   1104     4 ?        Ss   16:51   0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
ufo       10599  0.0  0.0  20032  2808 ?        S    16:51   0:00 /bin/bash /usr/local/bin/shadowsocks.sh
ufo       10600  0.0  0.3  45764 14292 ?        S    16:51   0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
ufo       10874  0.0  0.0  10152  1960 pts/1    S+   16:52   0:00 grep shadowsocks

root容器中:

sudo nsenter --target 9818 --mount --uts --ipc --net --pid

在容器中顯示程序:

[email protected]:/# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0   1104     4 ?        Ss   08:13   0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
root          6  0.0  0.0  20032  2748 ?        S    08:13   0:00 /bin/bash /usr/local/bin/shadowsocks.sh
root          7  0.0  0.3  45764 14392 ?        S    08:13   0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
root         19  0.0  0.0  20256  3232 ?        S    08:16   0:00 -bash
root         24  0.0  0.0  17488  2044 ?        R+   08:24   0:00 ps aux

在host主機的程序檢視:

$ ps aux | grep shadowsocks
root       9818  0.0  0.0   1104     4 ?        Ss   16:13   0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
root       9823  0.0  0.0  20032  2748 ?        S    16:13   0:00 /bin/bash /usr/local/bin/shadowsocks.sh
root       9824  0.0  0.3  45764 14392 ?        S    16:13   0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
ufo       10298  0.0  0.0  10152  1964 pts/1    R+   16:48   0:00 grep shadowsocks

相關推薦

Docker安全--關於Docker使用rootroot使用者的場景容器host的執行使用者的研究

/************************************************* * Author : Samson * Date : 08/15/2015 * Test platform: * gcc 4.8.2 * GNU b

/etc/profile/etc/bashrc、交互式交互式、loginnon-login shell的差別

cached 運行 mit -m 相同 結果 cron 作文 ssh 線上的memcached又掛了。仍然沒有得到core文件。排查原因,同事發現啟動memcached的腳本存在可疑問題。 問題一:沒有設置memcached工作文件夾,有可能core dump時沒

統計分析之引數檢驗引數檢驗、匹配樣本獨立樣本、2樣本K樣本介紹----附SPSS操作指南

       最近幾天博主需要做一些計算生物學分析,重新溫習了一遍統計學的知識。由於博主此次使用的是非引數檢驗,將重點介紹非引數檢驗相關內容,仍然是深入淺出的風格,先放一些概念,再總結實際使用的技巧。寫在這裡,供大家參考學習。    

幾個例子理解對稱加密對稱加密、公鑰私鑰、簽名驗籤、數字證書、HTTPS加密方式

# 原創,轉載請留言聯絡 為什麼會出現這麼多加密啊,公鑰私鑰啊,簽名啊這些東西呢?說到底還是保證雙方通訊的安全性與完整性。例如小明發一封表白郵件給小紅,他總不希望給別人看見吧。而各種各樣的技術就是為了保障通訊的安全。(本文務必從上到下看) 1.對稱加密與非對稱加密 對稱加密: 對稱加密是

綁定綁定方法 繼承 繼承抽象 查找屬性關系 派生覆蓋 訪問父類的內容

__init__ 名稱空間 self. 問題 修改 people sel 人的 bsp 類屬性與對象屬性類中應該僅存儲所有對象共有的內容  如所有人的國籍相同那就放到類中對象中存儲每個對象獨有的內容 ? 如每個人的名字都不同初始化函數class Person:

Docker使用root用戶

root用戶 -a this group 我們 fault upa pad 命令 通常我們使用Docker的時候都是使用的root,官方說法如下: The docker daemon binds to a Unix socket instead of a TCP port

幸運28平臺租用Linuxroot

所有 服務 3.1 native 程序 dev apach com 找到 1.安裝jdk與tomcat 安裝目錄為/usr/local/apache-tomcat-8.0.52 步驟略 2.創建用戶 tomcat並設置其不可登錄 其命令 #useradd -s /usr/s

簡單測試Java線程安全阻塞同步阻塞同步性能

訪問 完成 老師 system 測試 int oid 1.2 run 摘抄自周誌明老師的《深入理解Java虛擬機:JVM高級特性與最佳實踐》13.2.2 線程安全的實現方法 1.名詞解釋 同步是指鎖哥線程並發訪問共享數據時,保證共享數據同一時刻只被一個線程訪問 互斥同步(阻

docker root賬戶

https://blog.csdn.net/u012763794/article/details/80943472 https://blog.csdn.net/timothy93bp/article/details/77679000 https://www.cnblogs.com/lazzy

執行緒安全執行緒安全

1、執行緒不共享資料 對同一資源,各個執行緒各自執行一遍,程式碼如下: package com.zzm.th01; /** * 執行緒不共享資料 * Created by ming on 2017/6/15. */ public class th04 extends Thr

設定Docker作為root使用者

安裝Docker之後,預設使用docker的授權使用者為root,當我們使用非root使用者執行docker的指令後,都需要使用在命令前加上sudo 如:sudo docker image ls 如果要省去sudo,使docker 對其他使用者可用,可以按照官方文件的以下操作 1.建立使用者組 dock

(轉)PHP執行緒安全執行緒安全的區別:如何選擇用哪一個?

PHP執行緒安全與非執行緒安全的區別:如何選擇用哪一個? 很多時候,我們在做PHP環境配置的時候,很多人都是直接去亂下載PHP版本的,但是他不清楚:從2000年10月20日釋出的第一個Windows版的PHP3.0.17開始的都是執行緒安全的版本,直至5.2.1版本開始有Thread Safe

root使用者訪問Docker命令

#visudo k8s     ALL=(ALL)       ALL k8s ALL=(ALL) NOPASSWD: ALL # cp ~/.kube/config ./kube/ # chown -R k8s.k8s config

root用戶訪問Docker命令

str The upa 使用 contain path create 登陸 eas #visudo k8s ? ? ALL=(ALL) ? ? ? ALL k8s ALL=(ALL) NOPASSWD: ALL # cp ~/.kube/config .

關係型資料庫關係型資料庫(Nosql)的區別於使用場景

個人理解: 如果資料量較小,那麼使用關係型資料庫即可,因為這個時候讀寫的IO瓶頸顯現不出來。如果資料量較大,這時,可能對於關係型資料庫(如mysql)來說,單表的大小就可以達到幾GB,這時K-V儲存的非關係型資料庫的優勢就體現出來了。一般來說,現在的網際網路公司,傾向於使用Nosql作為快取,儲

docker使用root使用者啟動容器出現“running exec setns process for init caused \"exit status 40\"": unknown”

環境為centos7,linux核心版本為3.10 出現該問題的原因是核心3.10的bug,升級linux核心即可,升級辦法如下,升級完成後重啟系統,選擇對應的核心版本啟動即可。 1、匯入key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elre

suse上root使用者安裝python2.7.14jupyter

安裝路徑:/home/user1/mysoft/python2.7.14 安裝python2.7.14 解壓存放路徑:/home/user1/soft/ tar -xvf python2.7.14.tar.gz ./configure --prefix=/home/use

從NDK在Root手機上的除錯原理探討Android的安全機制

                       最近都在忙著研究Android的安全攻防技術,好長一段時間沒有寫部落格了,準備迴歸老本行中--Read the funcking android source code。這兩天在看NDK文件的時候,看到一句話“Native debugging ... does n

從自身漏洞架構缺陷,談Docker安全建設

作者介紹 林偉壕,網易遊戲資深運維工程師,先後在中國電信和網易遊戲從事資料網路、網路安全和遊戲運維工作。對Linux運維、虛擬化和網路安全防護等研究頗多,目前專注於網路安全自動化檢測、防禦系統構建。 與其它介紹Docker的文章不同,本文專注於分析Docker安全。第一部分介紹Docker存在的安全

ActiveMQ的訊息的持久化和持久化 以及 持久訂閱持久訂閱之間的區別聯絡

①DeliveryMode 這是傳輸模式。ActiveMQ支援兩種傳輸模式:持久傳輸和非持久傳輸(persistent and non-persistent delivery),預設情況下使用的是持久傳輸。 可以通過MessageProducer類的 setDeliv