我們有海外開發人員想在本地運行我們的服務器,但出於安全原因,我們不想給他們服務器代碼。所以一個解決方案是他們運行一個Docker容器,它是我們服務器的一個獨立版本!所以沒有複雜的設置在他們身邊! :)如何禁用碼頭集裝箱的根訪問權限?
問題是始終可以以root用戶身份訪問Docker實例的Linux shell,因此可以訪問源代碼。
如何禁用Docker容器作爲root訪問權限?或者我們如何才能將我們的源代碼與根訪問隔離開來?
我們有海外開發人員想在本地運行我們的服務器,但出於安全原因,我們不想給他們服務器代碼。所以一個解決方案是他們運行一個Docker容器,它是我們服務器的一個獨立版本!所以沒有複雜的設置在他們身邊! :)如何禁用碼頭集裝箱的根訪問權限?
問題是始終可以以root用戶身份訪問Docker實例的Linux shell,因此可以訪問源代碼。
如何禁用Docker容器作爲root訪問權限?或者我們如何才能將我們的源代碼與根訪問隔離開來?
您可以修改您的容器創建一個用戶(例如foo)併爲他分配正確的權限。然後,您可以使用參數-u foo
在docker 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
命令。
希望這會有所幫助。
雖然這對源代碼沒有實際的保護,但只要用戶擁有該圖像,它們就是圖像內部的內容。 – Matt
開發人員可以選擇不使用seccomp運行。這僅在您控制運行時環境_and_圖像時纔有用,OP僅用於控制圖像。 –
在這種情況下,這沒有任何意義。如何防止訪問他們正在控制的東西?您至少需要控制如何運行容器,然後通過ssh或其他方式爲開發人員提供訪問權限。 – OscarAkaElvis
他們如何在不看到它的情況下執行或使用源代碼? – Robert
您無法阻止訪問圖像內容的人員。 – Matt
如果他們得到了代碼,他們得到了代碼。就那麼簡單。抱歉。 Docker不_孤立。 – johnharris85