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 스타일 패턴을 찾아 해당 목록을 유용한 것으로 필터링하는 것이 더 나을 것입니다.
어쨌든, 운명과 우울함은 우리 뒤에 있습니다. 당신이 설득되지 않거나 제가 뭔가를 놓친 경우, 당신에게 도움이 될 수 있는 몇 가지 옵션을 고려해 볼 수 있습니다.
Bash에는
RESTRICTED SHELL
-mode (rbash
)가 있습니다. 정확한 세부 사항은 Bash 매뉴얼 페이지에서 확인할 수 있지만 기본적으로 여기에서 스크립트를 실행하면 다양한 형태의 보안 위험에 노출되지 않고 원하는 결과를 얻을 수 있습니다.docker
컨테이너( //podman
등) 또는 네임스페이스 환경(unshare
무인 사용자 계정 포함) 에서 스크립트를 실행할 수 있습니다 .shopt
bash 쉘이나 스크립트에서 활성화할 수 있는 옵션을 표시합니다extdebug
. 오랫동안 사용하지 않았지만 올바르게 기억한다면 기본적으로 다른 쉘 스크립트와 해당 파일의 모든 명령문을 실행할 수 있습니다. bash가 해당 라인을 실행할지, 건너뛸지, 변경할지 또는 포함할지 결정하는 필터 기능입니다.
떠오르는 주요 기능은 다음과 같습니다.