도커 컨테이너 내부에 포크 폭탄 방지


8

나는 현재 내가 호출 한 사용자의 프로세스 수를 제한하는 데 어려움을 겪고있다 sandbox.

다음 /etc/security/limits.conf과 같이 프로세스 제한을 구성 했습니다.

sandbox            hard    nproc            100

그러나 sandbox사용자 로 컨테이너에 연결하려면 ssh가 다음을 반환합니다.

shell request failed on channel 0

그래서 사용자 로 로그인 root하여 sandbox사용자 가 몇 개의 프로세스를 실행하고 있는지 확인 했지만 5 미만입니다.

ssh를 통해 로그인하지 못하게 할 수있는 것은 무엇입니까?
제한을 설정하지 않으면 sandbox사용자의 SSH 로그인이 정상적으로 작동합니다.

아니면 포크 폭탄 공격을 막는 다른 방법이 있습니까?

답변:


2

sshd에 연결할 때 발생하는 모든 오류는 /var/log/auth.log(debian 기반 OS 또는 redhat 기반 시스템의 보안)에 기록됩니다.

그렇지 않은 경우, 설정 LogLevel VERBOSE에서 /etc/ssh/sshd_config재로드 SSHD. 그러면 sshd가 다음에 연결을 거부하는 이유가 표시됩니다.

즉, 포크 폭탄 리미터로 돌아 가면 도커 머신은 Linux의 컨테이너 시스템 인 LXC를 기반으로합니다. LXC는 CGROUPS를 사용하여 각 컨테이너의 리소스 제한을 관리합니다.

/ sys / fs / cgroups에서 실행중인 LXC에 대한 제한을 설정할 수 있으며 / Var / lib / lxc / vmname / config에서 부팅시 적용되는 제한을 설정할 수 있습니다.

cgroup의 프로세스 수 제한은 작업 카운터 하위 시스템에 의해 수행됩니다 (2011 년 Linux 커널 http://lkml.iu.edu//hypermail/linux/kernel/1109.0/01455.html 에 추가됨 )

최근 충분한 리눅스 커널로 clx에 허용되는 프로세스 수를 제한하는 것은 lxc의 설정 파일에 이런 종류의 라인을 추가함으로써 이루어집니다 :

lxc.cgroup.tasks.limit = 1024 

최대 1024 개의 프로세스

(면책 조항 : 실제 컴퓨터에서 확인되지 않은 정보)


1
감사. 최신 Docker 컨테이너는 LXC를 기반으로하지 않으므로 LXC를 드라이버로 사용할 수 있습니다. Docker 컨테이너 기본 드라이버는 커널 네임 스페이스를 기반으로합니다. 그러나 cgroup을 사용하는 아이디어를 정말 좋아합니다. 제한 프로세스 수가 가능한지 몰랐습니다. 나는 그것을 시도 할 것입니다.
eXPi 2016 년

2
현재까지 작업 카운터 하위 시스템은 여전히 ​​공식 커널에 착륙하지 않았습니다.
Fabian Jakobs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.