OpenSSH sftp Jail/chroot는 어떻게 작동하나요?

OpenSSH sftp Jail/chroot는 어떻게 작동하나요?

사실 이 질문은 너무 광범위하네요...

내가 정말로 알고 싶은 것은 그것이 정말로 chroot인지 여부와 그렇다면 chroot에 필수 바이너리/lib가 분명히 부족함에도 불구하고 해당 감옥에서 SSH 사용자 daamon[1]을 시작하는 방법입니다.

놀랍게도 구글은 이 문제에 대해 침묵을 지켰다. 그러나 이것을 설명하는 좋은 참고 자료가 있으면 충분할 것입니다(그러나 나는 그들의 C를 읽고 이해할 만큼 교육을 받지 못했습니다).

[1]: 메인 루트 OpenSSH 데몬이 연결될 때 시작되는 사용자 권한을 가진 실제 임시 데몬에 대해 이야기하고 있습니다.

답변1

다른 답변은 (질문과 마찬가지로) 다소 모호하므로 해당 현상을 더 자세히 설명하겠습니다. 이 주제가 모든 사람을 위한 것은 아니지만 관심 있는 사람들에게는 알아두면 좋은 내용이라는 것을 알고 있습니다.

가지다이 작업은 여러 곳에서 이루어지고 chroot있으며 귀하도 작업 중이므로 귀하의 아이디어를 조정하려고 노력하겠습니다.

  1. 가지다특권의 분리, 이는 보안 메커니즘이며 부분적으로 chroot는 네트워크 하위 제한 역할도 합니다. 이는 일반적으로 /var/empty.

    이유는 간단합니다. 허점이 있으면아마도이 프로세스는 파일 시스템을 볼 수 없고 달리 제한되어 있으므로 악용할 수 없습니다(자세한 내용은 샌드박스, SECCOMP 키워드 참조).

  2. 나중에 chroot전체 파일 시스템에 대한 액세스를 방지하기 위해 SFTP뿐만 아니라 사용자 세션을 특정 디렉터리에 배치할 수 있습니다. 제목을 보면 이 부분이 여러분이 관심을 가지실 수도 있을 것 같습니다.

    이것마법chroot의 sftp에 대한 점은 Subsystem sftp internal-sftp(전체 경로 대신 Subsystem sftp /usr/lib/openssh/sftp-server) 지정할 수 있다는 것입니다. 이는 바이너리가 아니라 완전히 컴파일 sshd되었음을 의미합니다 .sftp-serverexec수신 전화서버 동작을 정의하는 함수입니다. 이는 사용자의 지원 파일이 필요하지 않습니다 chroot(셸 및 종속 공유 객체가 필요한 일반 세션과 달리). 이런 종류의 정보에 관심이 있다면 로깅 소켓이 필요할 수도 있습니다.

답변2

나는 원격 서버 명령을 사용하여 호출된 ssh에 몇 가지 추가 로깅을 추가하여 권한 분리 작업 모드를 처리하려고 노력해 왔습니다. 당신이 말했듯이, 당신은 그것에 대해 많은 것을 찾지 못했습니다.

확실한 핵심은 "UsePrivilegeSeparation" 옵션입니다.

사용자 인증 중에 sshd 분기는 권한을 포기하고 사용자 sshd를 사용하여 chroot에서 실행됩니다. 소스 코드를 분석해 보니 /var/empty로 루트가 바뀌는 것을 발견했습니다.

또한 chroot 이전과 이후의 코드 사이에서 특정 작업이 일치해야 하는지 확인하기 위해 몇 가지 검사를 수행합니다. 이는 아직 살펴보지 않았습니다.

관련 링크도 남겨드리겠습니다:

http://www.openbsd.org/papers/openssh-measures-asiabsdcon2007-slides.pdf

관련 정보