작업 쉘에 액세스하지 않고 특정 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
필요한 라이브러리 등을 얻거나 jail
UNIX 배포에서 사용 가능한 도구를 사용해야 합니다.
자세한 내용은 설명서를 참조하세요.