bash script.sh로 ./script.sh 실행 - 권한이 거부되었습니다.

bash script.sh로 ./script.sh 실행 - 권한이 거부되었습니다.

달리려고 하면 ./script.sh알겠지만 Permission denied달리면 bash script.sh모든 것이 괜찮습니다.

내가 뭘 잘못했나요?

답변1

POSIX 권한이 잘못되었습니다.

이는 실행 권한 비트가 설정되어 있지 않음을 의미합니다 script.sh. 실행 시에는 bash script.sh읽기 권한만 필요합니다 script.sh. 바라보다"bash script.sh"와 "./script.sh" 실행의 차이점은 무엇입니까?더 많은 정보를 알고 싶습니다.

를 실행하여 이를 확인할 수 있습니다 ls -l script.sh.

새로운 Bash 프로세스를 시작할 필요조차 없을 수도 있습니다. 대부분의 경우 현재 대화형 셸 내에서 스크립트 명령을 간단히 실행 source script.sh하거나 실행할 수 있습니다 . script.sh. 스크립트가 현재 디렉터리를 변경하거나 현재 프로세스의 환경을 수정하는 경우 새 Bash 프로세스를 시작할 수 있습니다.

액세스 제어 목록

POSIX 권한 비트가 올바르게 설정된 경우 ACL(액세스 제어 목록)은 귀하 또는 귀하의 그룹이 파일을 실행하지 못하도록 구성될 수 있습니다. 예를 들어 POSIX 권한은 테스트 셸 스크립트가 실행 가능함을 나타냅니다.

$ ls -l t.sh
-rwxrwxrwx+ 1 root root 22 May 14 15:30 t.sh

그러나 파일을 실행하려고 하면 다음과 같은 결과가 발생합니다.

$ ./t.sh
bash: ./t.sh: Permission denied

getfacl명령은 이유를 보여줍니다.

$ getfacl t.sh
# file: t.sh
# owner: root
# group: root
user::rwx
group::r--
group:domain\040users:rw-
mask::rwx
other::rwx

이 경우 내 기본 그룹은 domain users제한적인 ACL을 사용하여 실행 권한을 취소하는 그룹 입니다 sudo setfacl -m 'g:domain\040users:rw-' t.sh. 이 제한은 다음 명령 중 하나를 사용하여 해제할 수 있습니다.

sudo setfacl -m 'g:domain\040users:rwx' t.sh
sudo setfacl -b t.sh

바라보다:

noexec 옵션으로 마운트된 파일 시스템

마지막으로, 이 특정한 경우에 스크립트를 실행할 수 없는 이유는 스크립트가 있는 파일 시스템이 noexec이 옵션으로 마운트되어 있기 때문입니다. 이 옵션은 POSIX 권한을 재정의하여 이 파일 시스템에서 파일이 실행되지 않도록 합니다.

이는 mount마운트된 모든 파일 시스템 나열을 실행하여 확인할 수 있습니다. 마운트 옵션은 파일 시스템에 해당하는 항목과 함께 괄호 안에 나열됩니다.

/dev/sda3 on /tmp type ext3 (rw,noexec)

스크립트를 마운트된 다른 파일 시스템으로 이동하거나 파일 시스템을 다시 마운트하여 실행을 허용할 수 있습니다.

sudo mount -o remount,exec /dev/sda3 /tmp

참고: /tmp여기에서는 이것을 예로 사용하고 있습니다.좋은 보안상의 이유/tmp설치된 상태를 유지하는 옵션 세트입니다 noexec,nodev,nosuid.

답변2

노력하다chmod +rx script.sh, 이는 사용자, 그룹 및 기타 사용자에게 읽기 및 실행 권한을 부여합니다.

그런 다음 ./script.sh.

답변3

내 win7에서는 관리자가 cmd를 실행합니다. cygwin64/bin/bash와 연결된 .sh 파일이 있지만 cmd에 의해 차단되었습니다. 위의 제안 중 어느 것도 도움이 되지 않았습니다(chmod, setfacl, mount).

아래 솔루션은 작동합니다. 이는 win7의 관리자가 폴더/파일에 액세스할 수 없을 때마다 일반적으로 발생하는 관리자 큰 망치 ACL 수정입니다.

  Start > run cmd as Admin
  c:\> script.sh
    Access is denied.

  cmd> chmod 0777 script.sh c:\cygwin64\bin\bash.exe
  cmd> script.sh
    Access is denied.

  > assoc .sh
  .sh=bash

  > ftype bash
  bash=C:\cygwin64\bin\bash.exe -- "%1" %*

  > bash
  $ FILE=c:/cygwin64/bin/bash.exe
  $ FILE=${FILE////\\} # s,/,\,g

  # Compare these permissions using accesschk by Mark Russinovich 2015
  $ accesschk.exe -lq  $FILE 
  $ accesschk.exe -lq c:/windows/system32/cmd.exe
  # [large output not shown]

  # === Solution: Change windows acl for bash ===
  $ takeown /F $FILE /A > /dev/null
  $ icacls $FILE /t /q /c /reset
  $ icacls $FILE /t /q /c /grant    :r Everyone:F
  $ icacls $FILE /t /q /c /setowner Administrators  
  # ====

  cmd> script.sh
    OK .. invokes bash

답변4

Permission deniedDocker의 진입점에서 스크립트를 실행하려고 할 때 여전히 오류가 발생하는 경우 다음을 시도해 보십시오.원하지 않는다사용껍질 모양진입 지점:

대신에 다음 ENTRYPOINT ./bin/watcher을 쓰세요 ENTRYPOINT ["./bin/watcher"]:

https://docs.docker.com/engine/reference/builder/#entrypoint

여기에 이미지 설명을 입력하세요.

관련 정보