./script.shと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)が構成されて、ユーザーまたはグループがファイルを実行できないようになっている可能性があります。たとえば、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ここでは、オプションのセットをマウントしたままにするセキュリティ上の理由があるため、ここで例を使用しました。/tmpnoexec,nodev,nosuid


2
chmod 777を設定しても、まだこのエラーが発生します。
ピョートルスタップ

2
パーティションにexecがありませんでした。
ピョートルスタップ

だから私はまったくexecを持っておらず、fstabにリストされていません。なぜ私が持っている非tmpパーティションにこれをやっているのですか?
デリック

1
/ etc / fstabのnoexecオプションです。
-user208145

スクリプトを含むフォルダーが「実行可能」かどうか(Xフラグがあるかどうか)を確認することも賢明です。そうでない場合、スクリプトはrootユーザーのみが実行可能になります。
レトクテレン

30

試して

chmod 755 script.sh

これにより、ファイルが実行可能になります。その後、試して、

./script.sh

これがうまくいくことを願っています。


2
U&Lにようこそ、私は慣習に従って再フォーマットしますが、これは以前の回答にほとんど何も追加しません。
アーケマー

8
時々、最短の答えが最高の答えです:)
サメーラクマラシンハ

1

管理者がcmdを実行しているwin7で。cygwin64 / bin / bashに関連付けられた.shファイルがありますが、cmdによってブロックされました。上記の提案はいずれも役に立ちませんでした(chmod、setfacl、mount)。

以下の解決策は機能しました。win7で管理者がフォルダ/ファイルにアクセスできなくなるたびに、それはadmin sledge-hammer 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.