我想在我的(debian stretch)服務器上設置一個容器,並儘可能地將其鎖定。通過setuid二進制運行碼頭容器
容器my-container
只需要啓動時,它則做了一些處理,返回(整個事情大約需要一秒鐘)。
我可以很容易地以docker start -a my-container
作爲根。
我的問題是這個處理需要用php腳本觸發。我沒有給www-data啓動docker容器的權利,而是用一個執行docker命令的小型setuid二進制文件創建了一個專用用戶。雖然從特殊用戶帳戶的作品在執行二進制
FATA[0000] Get http:///var/run/docker.sock/v1.18/containers/my-container/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
:現在
,從其他用戶執行了setuid二進制不工作並返回。
我用4510
權限:
-r-s--x--- 1 docker-proxy-launcher another-user 8448 sept. 23 23:43 /home/docker-proxy-launcher/docker-prestage
二進制是一個非常簡單的程序,從execve
手冊頁導出:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *newenviron[] = { NULL };
char * newargv[] = {NULL, "start", "-a", "my-container", NULL};
char * exec="/usr/bin/docker";
newargv[0] = exec;
execve(exec, newargv, newenviron);
perror("execve"); /* execve() only returns on error */
exit(EXIT_FAILURE);
}
我真的不明白是什麼阻止我啓動docker進程與這個setuid二進制文件。
你也可以接受它作爲答案 –
在兩個小時內(SO限制,我不能接受它在提問後不到48小時);) – MayeulC
Okie,直到現在我還不知道:-) –