그래서 저는 사용자를 가두어 감옥에 가두는 방법을 연구해 왔습니다. 흥미로운 문제가 있지만 어디에도 답이 없습니다.
루트 계정을 감옥에 가두는 권한을 어떻게 가질 수 있나요? 현재 다음을 시도 중입니다.
Match user root ChrootDirectory /opt/somedirectory/anotherdirectory ForceCommand internal-sftp
하지만 연결하면 항상 연결이 끊어집니다. - 내가 허용하는 실험실 환경이므로 이 사용 사례의 경우비밀번호 인증그리고루트 사용자 로그인 허용.
내가 아는 한 Chroot 감옥은 수퍼유저 권한을 사용하여 사람들을 자신의 틈새 시장에 가두어 둡니다. 그런데 탈옥할 수 있는 것이 있나요? 아니면 최소한 특정 디렉토리에 그를 잠가서 CD백을 할 수 없도록 해야 할까요? 이것은 제가 더 탐구하고 배우고 싶은 흥미로운 사례입니다! 시간을 내어 답변해 주셔서 감사합니다!
핵심요약: 특정 디렉터리에 루트를 SFTP로 연결하는 방법.
답변1
당신은 할 수 없습니다.
Red Hat에는 이에 대한 기사가 있습니다(여기 링크) - 사용을 고려하고 계시다면 chroots
전체 기사를 읽어 보시기 바랍니다 . 다음은 이것이 작동하지 않는 이유를 설명하는 기사에서 발췌한 것입니다.
chroot 및 루트 사용자
chroot() 시스템 호출은 루트 사용자에 대해서만 작동합니다. 루트가 아닌 사용자는 chroot() 호출을 수행할 수 없습니다. chroot()를 호출할 수 있으면 이를 제거할 수 있기 때문에 이것은 좋은 것입니다. 이것은 chroot()의 버그가 아니며 단지 작동 방식일 뿐입니다. 이것을 버그라고 생각하더라도 일반적으로 루트는 시스템과 모든 리소스에 액세스할 수 있다는 점을 기억해야 합니다. chroot() 위치를 다시 "/"로 변경하기 위해 루트가 프로세스 메모리를 직접 수정하는 것을 방지할 수 있는 방법은 없습니다. 여기서 고려해야 할 중요한 점은 설계상 chroot()가 루트를 중지하지 않는다는 것입니다. 이 점은 이 기사의 뒷부분에서 중요할 것입니다.
이것이 당신이 말하는 실험실 환경이라면 간단한 비밀번호(또는 비밀번호 없는 로그인을 위한 SSH 키)를 사용하여 일반 사용자를 추가하기만 하면 됩니다.
답변2
절대 경로(예: /var/log/www)의 모든 디렉터리를 루트에서 읽을 수 있어야 하는 한 모든 것이 올바르게 관리될 수 있다는 것이 밝혀졌습니다. SSHD_Config에서 다음 줄을 추가해야 합니다.
Subsystem sftp internal-sftp
Match user Root
ChrootDirectory /var/log/www
ForceCommand internal-sftp
이렇게 하면 루트의 SSH 로그인이 비활성화되고 해당 ChrootDirectory(예: 감옥)의 SFTP 시스템에만 연결할 수 있습니다. 이것이 언젠가 누군가에게 도움이 되기를 바랍니다!