특정 사용자에게 제한된 셸을 제공해야 합니다.
이는 다음을 통해 달성됩니다.
sudo ln -s /bin/bash /bin/rbash
sudo useradd test1 -s /bin/rbash
새로운 사용자는 괜찮습니다. 기본적으로 제한된 셸에 들어가게 되지만, cd
허용되지 않는 경우가 짜증나고 자동 완성이 작동하지 않습니다. 예를 들면 다음과 같습니다.
test1@hostone [ ~ ]$ cd /
-rbash: cd: restricted
test1@hostone [ ~ ]$ sudo cd /con<TAB pressed here>-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a3': invalid number specifier
-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a0': invalid number specifier
^C
test1@hostone [ ~ ]$ sudo cd /config
sudo: cd: command not found
test1@hostone [ ~ ]$ docker logs ag<TAB pressed here>-rbash: /dev/null: restricted: cannot redirect output
-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a3': invalid number specifier
-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a0': invalid number specifier
^C
test1@hostone [ ~ ]$
예를 들어 별도의 명령을 허용하는 방법은 무엇입니까 cd
? 자동완성을 어떻게 수정해야 하나요?
운영체제가 Photon OS인지 궁금하시다면.
답변1
bash
첫째, 버전 5.0.3 현재로서는 rbash
여전히 안전하지 않습니다. 실행 중이나 실행 중에 Ctrl/C를 비활성화하지 않습니다. 즉, .profile
기본값이 적절하게 제한되기 .bash_profile
전에 쉘 프롬프트에 도달할 가능성이 매우 높다는 의미입니다. $PATH
이 시점에서는 실행하기 쉽고 깨끗한 쉘을 얻을 수 있습니다 dash
.bash
이 cd
명령은 의도적으로 거부되었습니다. 자세한 내용을 보려면 읽고 rbash
(참조 man bash
및 검색 ), 다음과 같은 거부된 작업 목록이 짧은 목록에 포함되어 있습니다.rbash
- 디렉토리 변경
cd
SHELL
PATH
,ENV
또는 값을 설정하거나 설정 해제합니다.BASH_ENV
- "/"를 포함하는 명령 이름을 지정하십시오.
>
,>|
,<>
,>&
및 리디렉션 연산자&>
를 사용하여>>
출력 리디렉션- 제한 모드를 끄려면 set +r 또는 set +o strict를 사용하세요.
불행하게도 자동 완성은 사용자 컨텍스트에서 실행되며 특정 명령의 출력을 /dev/null
.
다른 쉘(예: rsh
( sh
))은 실행 중에 잠금을 올바르게 구현하여 .profile
Ctrl/C가 일시적으로 비활성화되지만 Ctrl/C에 대한 제한은 cd
여전히 존재합니다.
당신은 cd
직업이 필요하다고 말합니다. 이 경우 제한된 쉘을 사용할 수 없습니다. 물론 요구 사항에 따라 chroot 환경을 사용하는 것이 더 나을 수도 있습니다. 아니면 필요한 작업을 수행하는 스크립트로 충분할 수도 있습니다. 액세스 가능한 디렉터리에 넣을 수 있으면 $PATH
사용자는 스크립트를 직접 사용할 수 있습니다.