Bash는 rbash를 사용하여 Shell을 제한합니다.

Bash는 rbash를 사용하여 Shell을 제한합니다.

/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_NAMErbashconfig.hshshell.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));
}

관련 정보