Bash 스크립트를 실행할 때 모든 기본 명령을 차단하시겠습니까?

Bash 스크립트를 실행할 때 모든 기본 명령을 차단하시겠습니까?

쉘 스크립트가 실행되는 동안에만 작동하고 사용자가 스크립트를 중지하면 bash의 별칭과 같은 기본 명령을 변경하지 않고 모든 명령이 기본값으로 돌아가는 사용자 정의 명령 디렉토리를 만들고 싶습니다.

예를 들어 터미널을 열면 bash는 자동으로 /sbin또는 또는 /usr/bin의 모든 명령 에 대한 액세스를 허용합니다 /bin. 내 사용자 정의 명령의 이름이 동일하므로 모두 차단해야 합니다(예 cd: cp, ) mv.

다음은 코드에서 수행해야 하는 작업에 대한 가짜 예입니다.

#!/bin/bash
disable_path_commands "/sbin"
disable_path_commands "/usr/local/bin"
disable_path_commands "/usr/bin"

global_commands_dir="/my_custom_commands_dir"
bash --block_default_commands "*" --allow_only_commands_from_default "sh,cd,sudo,su" --only-access-commands-from-dir "$global_commands_dir"
cd ~/

스크립트를 실행한 후 사용자는 에 저장된 사용자 정의 명령에만 액세스할 수 있지만 /my_custom_commands_dir사용자의 현재 디렉토리는 ~/또는 현재 작업 디렉토리가 됩니다. 사용자가 를 입력하면 exit액세스 가능한 bash가 자동으로 닫히고 /my_custom_commands_dir이제 모든 것이 정상으로 돌아갑니다. 사용자는 chroot전체 운영 체제 환경과 유사하지만 전체 운영 체제 환경 없이 다음과 유사한 명령에 대해서만 모든 명령에 액세스할 수 있습니다.

export DEFAULT_COMMANDS_DIR="/my_custom_commands_dir" 
unset /SBIN
unset /USR/BIN

답변1

스크립트가 현재 실행 중인 셸의 환경을 변경하도록 하려면 "소스" 사용을 고려하세요. 그러면 다른 프로세스와 스크립트가 셸에서 내보낸 변수에 액세스할 수 있습니다.

source myscript

이는 myscript를 소스로 합니다. 파일은 실행 가능하지 않아도 되지만 유효한 쉘 스크립트여야 합니다. 파일은 현재 디렉터리나 $PATH의 디렉터리에 있을 수 있습니다.

. myscript

이는 myscript의 소스이기도 합니다. 이 "철자법"은 POSIX에서 정의한 공식 철자법입니다. Bash는 소스를 도트의 별칭으로 정의합니다.

그런 다음 기존 .bashrc/profile 파일 등을 복사하고 수정하여 선택한 옵션으로 PATH를 재정의할 수 있습니다. 그러면 현재 실행 중인 셸로 새 설정이 내보내집니다. 완료되면 원본 .bashrc/profile 등을 가져와 정상으로 되돌립니다.

"exec" 명령을 사용하여 스크립트를 실행할 수도 있습니다. "exec" 명령은 "myscript"를 실행하기 전에 현재 쉘을 종료하거나 종료합니다. 따라서 처음부터 환경(경로 등)을 만들어야 합니다.

#!/bin/bash
#myscript to check exec
exec /path/myRestrictedShellscript.sh
echo "This text will not be printed"

답변2

이 옵션을 살펴보면 변수 --restricted재정의를 포함한 많은 기능이 비활성화됩니다 PATH. 또한 심볼릭 링크를 통해 as를 호출하여 bash제한 모드를 얻을 수도 있습니다.rbash

관련 정보