bash 권한이 거부되었지만 sh는 작동합니다.

bash 권한이 거부되었지만 sh는 작동합니다.

마운트된 Windows 파티션에 있는 작은 스크립트는 직접 실행을 거부하지만(shebang은 실행 ) 흥미롭게도 / 를 #!/bin/bash사용하여 호출합니다 . 스크립트는 단지 명령 모음 일 뿐입니다.bashshgrepsed

드라이브가 전체 권한으로 마운트되었습니다.

defaults,windows_names,rw,auto,user

그래서 우리가 얻는 파일에 대해

-rwxrwxrwx 1 root root

이 파일의 경우.

거기서 무슨 일이 일어 났어?

답변1

아마도 Windows 파티션은 noexec이 플래그가 설정된 상태로 마운트되었을 것입니다. 출력에서 이를 확인할 수 있습니다.

mount

출력에서 (rw,noexec)줄 끝에 다음과 같은 내용이 표시될 수 있습니다. 이 noexec플래그는 기본값이 아니므로 이 방식으로 설치되도록 명시적으로 구성할 때 일반적으로 발생합니다.

이 경우 스크립트를 실행하는 것이 아니라 인수에 지정된 스크립트를 해석하는 를 실행하기 때문에 스크립트를 실행할 때 bash /path/to/script.sh작동합니다 .bash

추가 참고사항:

그러나 흥미로운 점은 sh로 호출하면 작동한다는 것입니다.

스크립트에는 shebang 이 있으므로 실행하기 보다는 #!/bin/bash사용해야 합니다 . 스크립트 작성자는 이런저런 이유로 이 shebang을 사용할 수 있으며 일부 구현 (또는 시스템에 연결된 모든 것)은 특정 Bash 기능을 지원하지 않을 수 있습니다.bashshsh

마지막으로 스크립트를 직접 실행하려면할 수 있다exec대신 플래그를 사용하여 드라이버를 마운트해 보세요 noexec. 하지만 이것이 정말 좋은 생각인지 먼저 생각해 보세요. noexec신뢰할 수 없는 소스에서 잠재적으로 유해한 파일이 실수로 실행되는 것을 방지하기 위한 보안 기능을 위해 기본적으로 설치됩니다 . 나는 이것을 바꾸면 안된다고 생각합니다. 그냥 실행하세요 bash.

관련 정보