走ろうとすると./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
。