Bash 파일에서만 환경 변수 및 함수 가져오기

Bash 파일에서만 환경 변수 및 함수 가져오기

Bash에서 파일을 가져오는 것이 가능한지 궁금합니다( . filename또는 사용 source filename). 그러나 다른 줄은 무시하고 환경 변수와 함수만 상속합니다.

예를 들어 검색할 파일에는 다음 줄이 포함될 수 있습니다.

my_var="Something"
do_something_quickly() {
  some_command
  another_command
}
another_var="Something-Else"
some_command
final_var="FinalString"

이 파일과 기타 유사한 파일을 가져올 수 있기를 원하지만 변수와 함수만 가져오도록 하여 다른 모든 줄(예: some_command임의적이거나 악의적인 명령)은 완전히 무시됩니다. 이것을 달성할 수 있는 방법이 있나요?

답변1

나는 당신이 원하는 것이 불가능하거나 적어도 그다지 현실적이지 않다고 생각합니다.

첫째, 보안상의 이유로 변수와 함수를 보존하고 함수 호출을 무시하고 싶다고 말씀하셨습니다. 누군가 파일에 나쁜 내용을 넣을 수 있는 능력이 있다면 그 사람은 그것을 유용한 기능에 넣어서 총알을 피할 수도 있습니다.

둘째, 기타를 실행하지 않고 변수를 유지하고 싶다고 말씀하셨습니다. 하지만 내 생각엔 그 줄이 당신이 생각하는 것만큼 명확하지 않은 것 같아요. Bash 스크립트의 대부분의 변수는 외부 변수를 사용하거나 일부 코드 등을 실행하여 설정됩니다. 이와 같은 줄은 DIR="$( realpath ${0} )";"안전한" 하드코딩 변형만큼 일반적입니다 USERNAME="batman";.

필요한 것이 간단하게 하드코딩된 값뿐이라면 파일에서 VAR=EXPR 스타일 패턴을 찾아 해당 목록을 유용한 것으로 필터링하는 것이 더 나을 것입니다.

어쨌든, 운명과 우울함은 우리 뒤에 있습니다. 당신이 설득되지 않거나 제가 뭔가를 놓친 경우, 당신에게 도움이 될 수 있는 몇 가지 옵션을 고려해 볼 수 있습니다.

  1. Bash에는 RESTRICTED SHELL-mode ( rbash)가 있습니다. 정확한 세부 사항은 Bash 매뉴얼 페이지에서 확인할 수 있지만 기본적으로 여기에서 스크립트를 실행하면 다양한 형태의 보안 위험에 노출되지 않고 원하는 결과를 얻을 수 있습니다.

  2. docker컨테이너( // podman등) 또는 네임스페이스 환경( unshare무인 사용자 계정 포함) 에서 스크립트를 실행할 수 있습니다 .

  3. shoptbash 쉘이나 스크립트에서 활성화할 수 있는 옵션을 표시합니다 extdebug. 오랫동안 사용하지 않았지만 올바르게 기억한다면 기본적으로 다른 쉘 스크립트와 해당 파일의 모든 명령문을 실행할 수 있습니다. bash가 해당 라인을 실행할지, 건너뛸지, 변경할지 또는 포함할지 결정하는 필터 기능입니다.

떠오르는 주요 기능은 다음과 같습니다.

관련 정보