sh 스크립트 실행 : 실행 비트 및 루트 권한에도 불구하고«권한 거부»


17

VirtualBox에 데비안을 설치하고 (일반적으로 시스템을 손상시킨 다양한 실험을 위해) VirtualBox 게스트 애드온 스크립트를 시작하려고했습니다. 루트로 로그인하여 시작하려고했지만 autorun.sh«Permission denied»가 있습니다. ls -l스크립트에 실행 권한이 있음을 나타냅니다.

죄송합니다. 출력물을 복사 할 수 없습니다. VirtualBox는 애드온 없이는 공유 디렉토리 나 공유 클립 보드가 작동하지 않으므로 절대 사용할 수 없습니다. 그러나 당신이 확실히하기 위해, 나는 손으로 권리를 복사했습니다.

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

처음에는 스크립트가 오류를 일으킨 것을 실행한다고 생각했습니다. /bin/sh같은 것으로 바꾸려고 #/pathtorealsh/sh -xv했지만 출력이 없습니다. 스크립트를 실행할 수없는 것 같습니다.

나는 그것을 일으킬 수있는 아이디어조차도 없습니다.


2
제대로 작동하는 것 같습니다. `bash -x ./autorun.sh "를 명시 적으로 bash로 실행 해보십시오. 아마도 이것이 추가 힌트를 줄 것입니다.
nobar

2
의 결과는 무엇입니까 mount | grep noexec?
cuonglm

1
@Gnouc, 맞습니다. 탑재 된«cdrom»에 noexec설정되어 있습니다. 아마 당신은 답변으로 그것을 게시 할 수 있습니다; 한편 나는 exec 권리로 다시 마운트하려고합니다. 흠, 나는 파일 시스템이 그런 속성을 가질 수 있다는 것을 몰랐다.
Hi-Angel

그리고 당신이 진행하여 그것을 실행하려고하면 sh ./autorun.sh어떻게됩니까?

답변:


29

파일 시스템이 noexec옵션 세트 로 마운트되어 실행 파일을 실행할 수 없습니다. 에서 마운트 문서 :

noexec

마운트 된 파일 시스템에서 바이너리를 직접 실행하지 마십시오. (최근까지는 /lib/ld*.so / mnt / binary와 같은 명령을 사용하여 바이너리를 실행할 수있었습니다.이 기법은 Linux 2.4.25 / 2.6.0부터 실패합니다.)

시험:

mount | grep noexec

그런 다음 파일 시스템이 출력에 나열되어 있는지 확인하십시오.

그렇다면 exec다음 옵션으로 파일 시스템을 다시 마운트하여이 문제를 해결할 수 있습니다 .

mount -o remount,exec filesystem

그것은 나를 위해 작동하지 않았다. 마운트를 해제 한 다음 정상적으로 다시 마운트해야했습니다. 그런 다음 잘 작동했습니다.
datakid

@ datakid : 당신의 fs는 무엇입니까?
cuonglm 2016 년

데비안 9 에서이 문제가 발생했습니다. 스크립트가 루트로 실행 중이면 일부 파일이 권한이 거부되었지만 루트로 식별됩니다 ... Windows 동작과 같이 제거하고 스크립트가 작동하면! = [
Luciano Andress Martini 2014

나는 인해 밝혀졌다 아주 이상한 메시지를 얻고 있었다 noexec"사용 권한이 거부 SH : 75 : script.sh를"
tmm1

2

bash -x ./filename.filetype작동해야합니다. 루트 사용자로 권한이 거부되면 나에게 도움이되었습니다.


아니, 결국 문제는 noexec마운트 옵션으로 판명 되었으므로 실행해야 할 파일이 더 많기 때문에 작동하지 않습니다. 즉, filename.filetype동일한 파일 시스템에서 다른 파일을 실행하려고 시도 하는 것입니다. 간단한 테스트로 쉽게 확인할 수 있습니다. "hello"를 인쇄하는 두 줄 스크립트를 만든 다음 다시 호출하지만 실행 권한은 설정하지 마십시오. 로 실행하면 -x"hello"가 인쇄되지만 재귀 호출 회선은 오류를 트리거합니다.
Hi-Angel

1

이 문제에 대한 나의 해결책은 source 를 사용하는 입니다. 매우 중요한 데이터의 스토리지 볼륨에있었습니다. 이 볼륨은 noexec로 마운트됩니다. 실행 가능하지만 권한 문제가있는 간단한 셸 스크립트가 있습니다.

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

우분투에서만 테스트되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.