현재 문제

현재 문제

작업 쉘에 액세스하지 않고 특정 ssh 사용자를 프로그램에 잠그는 더 좋은 방법(추가 소프트웨어 스택 없이)이 있습니까? 사용자가 SSH를 통해 액세스할 수 있는 유일한 인터페이스인 cli 프로그램을 상상해 보십시오.

내 해커 솔루션:

존재하다/etc/비밀번호사용자 셸을 바꾸려면 다음 스크립트를 사용하세요.

#!/bin/bash
/bin/bash -c /usr/bin/cli
exit 1

답변1

현재 문제

원격 사용자가 서버에 연결할 때 특정 셸을 사용하지 못하도록 잠그고 싶습니다. 이미 발견하셨겠지만 chsh다른 솔루션은 로컬 사용자를 위한 것입니다.

해결책

~에 따르면사용자 muru의 솔루션sshd_config, 해당 옵션을 사용하도록 편집하겠습니다 ForceCommand.

ForceCommand를 Match와 함께 사용할 수 있습니다.

 Match Address 10.1.0.0/16
 ForceCommand /usr/bin/[some shell]

man sshd_config에서:

Match   Introduces a conditional block.  ...

Match에 대한 인수는 하나 이상의 조건부 패턴 쌍이거나 모든 조건과 일치하는 단일 토큰 All입니다. 사용 가능한 기준에는 사용자, 그룹, 호스트, 로컬 주소, 로컬 포트 ​​및 주소가 포함됩니다.

ForceCommand

클라이언트 및 ~/.ssh/rc(있는 경우)에서 제공하는 모든 명령을 무시하고 ForceCommand에서 지정한 명령을 강제로 실행합니다. 명령은 사용자의 로그인 쉘과 -c 옵션을 사용하여 호출됩니다.

따라서 지정한 명령은 -c 옵션을 허용해야 하는 사용자의 로그인 셸을 사용하여 실행됩니다. 명령이 종료되면 연결이 닫히므로 모든 실제적인 목적을 위해 명령은 해당 쉘입니다.

구성 파일에서 사용하면 ForceCommand이 옵션을 지원하는 셸을 강제로 사용할 수 있습니다 -c. 저도 참고하고 싶네요이번 서버 장애 포스팅이 작업을 완료하는 방법에 대한 자세한 내용을 알아보세요.

결론적으로

완료되면 셸과 세션이 닫히므로 옵션을 사용하여 sshd_config이를 지원할 수 있는 셸을 강제 실행하세요 .-c

이 답변에 대해 질문이나 문의사항이 있으면 댓글을 남겨주세요. 오해를 바로잡고 게시물을 개선할 수 있도록 피드백을 보내주셔서 감사합니다. 필요한 경우 답변을 업데이트할 수 있습니다.

행운을 빌어요!

답변2

문제의 사용자를 위해 실제 BSD 감옥이나 chroot 환경을 만드는 것이 더 나을 것입니다. 물론 이를 위해서는 사용자, 그룹, 미니 Linux 파일 시스템을 수동으로 생성하고 cli필요한 라이브러리 등을 얻거나 jailUNIX 배포에서 사용 가능한 도구를 사용해야 합니다.

자세한 내용은 설명서를 참조하세요.

리눅스 chroot

BSD 감옥

관련 정보