SSH Bash 감옥 세션

SSH Bash 감옥 세션

일부 게임 터널링 서비스 제공업체에서는 로그인 시 고객의 계정을 정보 화면으로 제한하고 모든 입력이 무시되는 것을 보았습니다. Ctrl+C SSH 세션을 닫고 연결을 끊습니다. 이는 본질적으로 사용자를 감옥에 가두지만 터널은 유지합니다.

어떻게 이루어졌는지 궁금해지네요. 이 작업을 수행하는 방법을 아는 사람이 있나요?

답변1

사용자의 로그인 셸을 다음과 같이 매우 제한적인 것으로 설정하면 이를 달성할 수 있을 것 같습니다.수면 더미 쉘". 홈페이지를 인용하면,

이것은 연결을 열어두기 위해 로그인 셸(Linux 또는 Unix)로 사용할 수 있지만 대화형 셸이 없는 간단한 아무것도 하지 않는 영구 절전 프로그램입니다. 우리는 이를 SSH 터널에만 사용하는 사용자를 위한 SSH 계정을 생성하여 우리 서버에 대한 암호화된 터널을 생성하는 데 사용합니다.

대부분의 제한된 셸에서는 여전히 SSH 계정에서 로컬 명령을 실행할 수 있습니다. 프로그램 실행이 끝나면 터널이 닫히기 때문에 계정 셸을 이와 유사한 것 /bin/false(또는 다른 간단한 프로그램)으로 설정하는 것은 일반적으로 작동하지 않습니다. Sleep Dummy Shell은 사용자가 실행을 종료하거나 터널이 닫힐 때까지 단순히 절전 모드로 유지됩니다.

보시다시피 sleepshell.c약 20줄의 C 코드 작업의 일부를 수행하는 간단한 프로그램입니다.

이것이 충분히 안전한지 잘 모르겠습니다ssh <server> /bin/bash, 예를 들어, 이것이 사용 또는 이와 유사한 것을 의미하는 것은 무엇입니까?

자세한 팁과 정보는 michael-n의 답변을 참조하세요.

답변2

bash를 셸로 사용하여 이 작업을 수행하는 빠르고 쉬운 방법이 있지만 그다지 안전하지는 않습니다. (지난 몇 년 동안authorized_keys "command" 지시어와 Bash의 환경 변수에서 여러 가지 보안 결함이 발견되었습니다. 또 다른 버그가 숨어 있지 않는 한 지금은 안전할 것입니다...)

이 작업을 안전하게 수행하고 싶지만 여전히 bash에서 출력을 표시하는 스크립트를 작성하고 싶다면 bash 스크립트의 출력을 실행하고 표시하는 셸로 작은 C 프로그램을 작성하는 것이 좋습니다. C 프로그램은 인수를 무시하고 환경을 안전한 기본값으로 재설정한 다음 STDIN이 /dev/null인 bash 스크립트를 분기/exec()해야 합니다. 이렇게 하면 사용자는 스크립트와 상호 작용할 방법이 전혀 없습니다. 필요하다면 예시를 제공해드릴 수 있습니다.

관련 정보