2017-05-05 87 views
1

我們有海外開發人員想在本地運行我們的服務器,但出於安全原因,我們不想給他們服務器代碼。所以一個解決方案是他們運行一個Docker容器,它是我們服務器的一個獨立版本!所以沒有複雜的設置在他們身邊! :)如何禁用碼頭集裝箱的根訪問權限?

問題是始終可以以root用戶身份訪問Docker實例的Linux shell,因此可以訪問源代碼。

如何禁用Docker容器作爲root訪問權限?或者我們如何才能將我們的源代碼與根訪問隔離開來?

+2

他們如何在不看到它的情況下執行或使用源代碼? – Robert

+1

您無法阻止訪問圖像內容的人員。 – Matt

+0

如果他們得到了代碼,他們得到了代碼。就那麼簡單。抱歉。 Docker不_孤立。 – johnharris85

回答

1

您可以修改您的容器創建一個用戶(例如foo)併爲他分配正確的權限。然後,您可以使用參數-u foodocker run命令上運行碼頭容器。如果運行例如:docker run --rm -ti -u foo myCustomImage sh。這將使用$而不是#打開sh shell。當然,在你的Dockerfile中,你必須先創建foo用戶。

如果您想要更多的限制,例如禁用某些內核功能,您可以使用docker 1.10 seccomp安全功能。檢查出來:

https://docs.docker.com/engine/security/seccomp/

使用此您可以禁用和限制了很多系統功能...和簡單的例子否認mkdir命令。創建這樣一個JSON文件(命名爲sec.json爲例):

{ 
    "defaultAction": "SCMP_ACT_ALLOW", 
     "syscalls": [ 
       { 
        "name": "mkdir", 
        "action": "SCMP_ACT_ERRNO" 
       } 
      ] 
} 

然後運行您的容器,這樣做的:docker run --rm -ti --security-opt seccomp=/path/on/host/to/sec.json ubuntu:xenial sh。您可以檢查容器內部是否無法運行mkdir命令。

希望這會有所幫助。

+1

雖然這對源代碼沒有實際的保護,但只要用戶擁有該圖像,它們就是圖像內部的內容。 – Matt

+0

開發人員可以選擇不使用seccomp運行。這僅在您控制運行時環境_and_圖像時纔有用,OP僅用於控制圖像。 –

+0

在這種情況下,這沒有任何意義。如何防止訪問他們正在控制的東西?您至少需要控制如何運行容器,然後通過ssh或其他方式爲開發人員提供訪問權限。 – OscarAkaElvis