/bin/rbash
일부 사용자를 위해 사용하고 있습니다 . 예상대로 작동하지만 사용자가 실행하거나 bash
무제한 쉘을 얻는 것과 같은 일부 해킹이 있으므로 이러한 명령을 피하기 위해 dash
파일에 다음 기능을 추가했습니다..bashrc
bash() {
echo "WARNING: NOT ALLOW!!"
}
sh() {
echo "WARNING: NOT ALLOW!!"
}
그래서 내 질문은 다음과 같습니다
1#아래와 같이 여러 이름을 가진 함수를 사용할 수 있습니다
func1,func2 () {
# do stuff
}
2# 나도 시도해봤다:
case $BASH_COMMAND in # check each command`
bash|dash|sh)
echo "WARNING: NOT ALLOW!!"
;;
esac
3# /bin/rbash -> bash
이것은 단지 bash 소프트 링크인데 어떻게 제한되나요?
사용자가 유사한 명령을 실행하지 못하도록 하는 명령도 있습니다 unset HISTFILE
. kill -9 $$
동일한 목적을 달성할 수 있는 다른 방법이 있습니까?
답변1
이렇게 하지 마십시오. rbash
~해야 한다오직자신이 무엇을 하고 있는지 모르면 이미 안전한 환경에서는 사용할 수 없습니다. 제한된 bash 쉘을 크랙하는 방법에는 여러 가지가 있지만 미리 예측하기는 쉽지 않습니다.
command bash
함수는 or 를 수행하여 쉽게 재정의할 수 있습니다 command sh
.
귀하의 질문에 관해서는:
- 여러 함수를 동시에 직접 정의할 수는 없습니다. 다음과 같이 해야 합니다.
x() { foo; }
alias f1=x
alias f2=x
rbash
이는 시작 시 확인되는 값으로 인해 작동합니다bash
. 기본 이름(앞에 대시 제외)이 (기본값 , 참조 )argv[0]
와 같으면 제한 모드에서 실행됩니다. 호출되면 POSIX 호환 모드에서 작동하는 방식과 동일합니다 . bash 4.2 라인 1132-1147의 다음 코드에서 이를 확인할 수 있습니다 .RESTRICTED_SHELL_NAME
rbash
config.h
sh
shell.c
/* Return 1 if the shell should be a restricted one based on NAME or the
value of `restricted'. Don't actually do anything, just return a
boolean value. */
int
shell_is_restricted (name)
char *name;
{
char *temp;
if (restricted)
return 1;
temp = base_pathname (name);
if (*temp == '-')
temp++;
return (STREQ (temp, RESTRICTED_SHELL_NAME));
}