저는 SSH 서버에서 작업하고 있는데 사용자가 하길 바라는 유일한 일은
ssh user@ip cat somefile
내 위협 완화 계획의 일부는 사용자에게 제한된 bash를 제공하는 것입니다.
예제를 보았지만 chsh rbash
내 서버에서 rbash를 찾을 수 없습니다. 그래서 "rbash"라는 스크립트를 만들었습니다.
#!/bin/bash
bash -r
bash -r은 제한된 쉘을 시작하는 옵션이므로 이 스크립트를 /bin에 넣었습니다. 그러다가 도망갔어chsh user -s /bin/rbash
이제 ssh user@ip
서버에 들어가서 제한된 셸에 있는 자신을 찾을 수 있지만, 프로세스를 ssh하려고 하면 ssh user@ip cat somefile
멈추게 됩니다.debug1: sending command: cat somefile
내가 이 문제를 올바른 방식으로 처리하고 있나요? ssh를 통해 로그인할 때 cat somefile
이 명령을 원격으로 작동시키고 제한된 셸을 유지하려면 어떻게 해야 합니까 ?
관련될 수 있는 기타 정보
- 운영 체제Fedora 29
- SSH 인증 방법 공개 키
답변1
rbash 생성
매뉴얼 페이지에서 맨 아래로 스크롤하면 bash
다음 섹션을 찾을 수 있습니다 RESTRICTED SHELL
.
bash가 rbash라는 이름으로 시작되거나 호출 시 -r 옵션이 제공되는 경우 쉘이 제한됩니다.
"rbash"라는 이름으로 bash를 시작하려면 심볼릭 링크를 생성할 수 있습니다 ln -s /bin/bash /bin/rbash
.
사용자 제한cat somefile
에서 man authorized_keys
:
command="command"
Specifies that the command is executed whenever this key is used for
authentication.
Authorized_key 파일을 조정할 수 있습니다.
command="cat somefile" KEY_TYPE KEY COMMENT
이제 이 사용자 키 조합은 작동합니다 cat somefile
.
래퍼가 작동하지 않는 이유
스크립트가 실행되지만 bash -r
명령은 실행되지 않습니다 cat somefile
. set -xe
스크립트를 입력하면 어떤 일이 발생하는지 확인할 수 있습니다 .
#!/bin/bash
set -xe
bash -xer
이는 bash
정체된 것이 아니라 입력을 기다리고 있으며 두 개의 쉘을 생성했음을 보여줍니다. 프롬프트는 없지만 다음 명령을 실행할 수 있습니다.
$ ssh user@ip cat somefile
+ /bin/bash -r
ls
+ ls
somefile
exit
+ exit
exit
+ exit
$
이 셸에 명령을 파이프할 수 있지만 이는 좋은 솔루션이 아닙니다.
ssh user@ip <<< 'cat somefile'