공식 Docker 저장소를 사용할 때 chroot가 활성화되면 높은 SFTP CPU 사용량

공식 Docker 저장소를 사용할 때 chroot가 활성화되면 높은 SFTP CPU 사용량

Docker, Fedora 37 및 5억 개 이상의 풀 SFTP 이미지와 관련된 상당히 틈새 문제가 있습니다 atmoz/sftp.

Fedora가 아닌 공식 저장소에서 Docker를 설치했는데 SFTP 서버에 로그인하려고 하면 컨테이너가 CPU 코어 하나를 100% 사용했습니다. 1~2분 후에 마침내 로그인하고 sftp>메시지를 받았습니다.

SFTP 서버 시작

docker container run \
--interactive \
--tty \
--rm \
--name sftp-cpu-problem-debug \
--publish 2222:22 \
--env SFTP_USERS=cpuproblem:123:::IN \
atmoz/sftp:alpine

# You might have to kill it from a separate session using docker kill sftp-cpu-problem-debug

로그인을 시도하세요(별도의 터미널 세션에서)

sftp -P 2222 -oLogLevel=DEBUG3 cpuproblem@localhost
# Password is 123

또한 DEBUG3 로깅을 사용하여 SSH 데몬을 시작하려고 시도했지만 로그 항목은 CPU 문제가 없는 것과 동일합니다.

ChrootDirectory %h컨테이너의 파일에서 해당 줄을 제거 하면 /etc/ssh/sshd_config공식 Docker 패키지를 사용해도 문제 없이 로그인됩니다. 물론 이렇게 하면 chroot가 비활성화됩니다.

다음 시도에서는 각각 CPU 문제 없이 로그인할 수 있는 SFTP 컨테이너가 작동하게 되었습니다.

  • Docker 대신 Podman을 사용하여 동일한 이미지를 사용하여 컨테이너를 시작하고 기본적으로 chroot가 활성화된 SFTP 구성을 사용하세요.
  • moby-engineDocker 저장소의 공식 Docker 패키지 대신 Fedora 저장소의 패키지를 사용하십시오 .
  • Debian의 WSL2에서 공식 Docker 저장소 패키지를 사용하세요.

이는 일종의 Fedora 구성 문제처럼 보입니다. 동일한 버전이 Debian에서 작동하고 Fedora 패키지(이전 마이너 버전)도 작동하기 때문입니다.

  • Fedora moby-engine패키지는 공식 Docker 패키지가 구성하지 않는 무엇을 구성합니까?
    • 관련성이 없을 수도 있지만 Spring Security에 엔트로피가 부족하고 사용되지 않아 Spring Java 애플리케이션이 느리게 시작되는 상황이 생각납니다 /dev/urandom.
    • 이것은 매우 이상한 극단적인 상황이다.
      • SFTP 프롬프트를 표시하기 전에 SSH 데몬이 계산을 시도하는 것은 무엇입니까?
      • chroot를 비활성화하면 이 문제가 해결되는 이유는 무엇입니까?
      • 데비안에서는 왜 이것이 문제가 되지 않습니까?
  • SELinux를 허용적으로 실행하도록 설정하고 SELinux로 실행도 시도했지만 --privileged여전히 CPU 문제가 있습니다.
  • 컨테이너에서 OpenSSH를 수동으로 업데이트하려고 시도했지만 그것도 도움이 되지 않았습니다.

답변1

오늘 이 문제에 부딪혔고 몇 가지 strace검색 끝에 Alexandru Scvorşov의 다음 블로그 게시물을 발견했습니다.

56. 로그인 후 12분 후 SFTP 중단 디버깅

꼭 읽어야 하지만 간단히 말해서 OpenSSH는 BSD 특정 시스템 호출을 사용하여 주어진 정수보다 큰 모든 파일 설명자를 닫습니다. 이 시스템 호출은 Linux에서 사용할 수 없으므로 폴백 구현은 close()시스템 제한에 도달할 때까지 각 후보 파일 설명자를 호출합니다.

이 문서에서는 이 문제를 해결하는 데 도움이 될 수 있는 자세한 내용을 제공합니다.

관련 정보