내 (debian stretch) 서버에 컨테이너를 설정하고 최대한 많이 잠글려고합니다.setuid 바이너리를 통해 도커 컨테이너를 실행하십시오.
컨테이너 my-container
만 시작하면됩니다. 그런 다음 몇 가지 처리 및 반환을 수행합니다 (모든 작업에는 약 1 초가 소요됩니다).
docker start -a my-container
으로 루트로 쉽게 할 수 있습니다.
내 문제는이 처리가 PHP 스크립트로 실행되어야한다는 것입니다. Docker 컨테이너를 시작할 수있는 www 데이터를주는 대신, 나는 docker 명령을 실행하는 작은 setuid 바이너리를 가진 전용 사용자를 만들었습니다.
이제 다른 사용자로부터의 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?
를 특별한 사용자 계정 작품에서 바이너리를 실행하는 동안.
#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);
}
난 정말 실행에서 저를 방해하는 것을 얻을하지 않습니다 이진은 execve
man 페이지에서 파생 된 아주 간단한 프로그램입니다
-r-s--x--- 1 docker-proxy-launcher another-user 8448 sept. 23 23:43 /home/docker-proxy-launcher/docker-prestage
:
나는 4510
권한을 사용 이 setuid 바이너리로 도커 프로세스.
당신도 대답으로 받아 들일 수 있습니다. –
2 시간 후 (질문 한 후 48 시간 이내에 받아 들일 수 없습니다.) – MayeulC
Okie, 그 때까지는 몰랐습니다. :-) –