./script.sh vs bash script.sh 실행-권한 거부


답변:


49

잘못된 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 (Access Control List)이 사용자 또는 그룹이 파일을 실행하지 못하도록 구성되었을 수 있습니다. 예를 들어 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 777을 설정했는데 여전히이 오류가 있습니다.
Piotr Stapp

2
파티션에 exec가 없었습니다.
Piotr Stapp 12

그래서 나는 exec을 가지고 있지 않으며 fstab에 나열되어 있지 않습니다. 왜 내가 가지고있는 비 tmp 파티션 에서이 작업을 수행합니까?
Deryck

1
/ etc / fstab의 noexec 옵션이었습니다.
user208145

스크립트가 포함 된 폴더가 "실행 가능"인지 아닌지 (X 플래그가 있는지 여부) 확인하는 것이 좋습니다. 그렇지 않은 경우 스크립트는 루트 사용자 만 실행할 수 있습니다.
Letokteren

30

시험

chmod 755 script.sh

파일을 실행 가능하게 만듭니다. 그런 다음 시도해보십시오

./script.sh

이것이 효과가 있기를 바랍니다.


2
U & L에 오신 것을 환영합니다. 컨벤션에 따라 다시 포맷하지만 이전 답변에 아무것도 추가하지 않습니다.
Archemar

8
때로는 가장 짧은 답변이 가장 좋은 답변입니다 :)
Sameera Kumarasingha

1

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

아래의 해결책은 win7에서 관리자가 폴더 / 파일에 액세스 할 수 없을 때마다 관리자 슬레지 해머 acl-fixer입니다.

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