답변:
에 대해 실행 권한 비트가 설정되어 있지 않음을 의미합니다 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
옵션 으로 마운트 되었기 때문 입니다. 이 옵션은 해당 파일 시스템의 파일이 실행되지 않도록 POSIX 권한을 무시합니다.
mount
마운트 된 모든 파일 시스템을 나열하기 위해 실행 하여 확인할 수 있습니다 . 마운트 옵션은 파일 시스템에 해당하는 항목에서 괄호 안에 표시됩니다 (예 :
/dev/sda3 on /tmp type ext3 (rw,noexec)
스크립트를 마운트 된 다른 파일 시스템으로 옮기거나 파일 시스템을 다시 마운트하여 실행할 수 있습니다.
sudo mount -o remount,exec /dev/sda3 /tmp
참고 : 제가 사용한 적이 /tmp
있기 때문에 여기에 예로서 좋은 보안을 유지하기위한이 /tmp
장착 noexec,nodev,nosuid
옵션을 설정합니다.
시험
chmod 755 script.sh
파일을 실행 가능하게 만듭니다. 그런 다음 시도해보십시오
./script.sh
이것이 효과가 있기를 바랍니다.
관리자가 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
getfacl script.sh
?