エコーされるBashスクリプトを作成しました。「こんにちは世界」。テストユーザーも作成しましたが、単発、使用adduser
。
以下のようにファイルを実行する権限を持つ人は誰もいませんls
。
$ ls -l hello.sh
-rw-r--r-- 1 george george 19 Mai 29 13:06 hello.sh
上記から、ファイルの所有者が誰であるかがわかります。聖ジョージ読み取りおよび書き込み権限のみがあり、実行権限はありません。しかし、次のようにログインしました。聖ジョージスクリプトを直接実行できます。
$ . hello.sh
Hello World
スノーバーとして、私は次のようにログインしました。単発、読み取り権限のみが、まだファイルを実行できます。
$ su bob
Password:
$ . /home/george/testdir/hello.sh
Hello World
どうなりますか?
ベストアンサー1
あなたの例では、ファイルを実行せずに購入それらを。
実行が通過する
$ ./hello.sh
これには実行ライセンスが必要です。この場合、スクリプトファイルのコマンドが実行されるサブシェルが開きます。
購入、すなわち。
$ . hello.sh
(間にスペースがあります)のみ読むファイルとシェル. hello.sh
どこでコマンドを呼び出しますか?その後、読み取り権限で、つまりサブシェルを開かずにコマンドを直接実行します。ファイルが読み取り専用であるため、読み取り権限のみで十分な操作が可能です。 (また、スクリプトファイル名を次のように宣言することに注意してください。コールPATH
検索hello.sh
、したがって他のものがある場合PATH
それ補給品があるでしょう!明示的なパスを使用してください。たとえば、. ./hello.sh
「正しいパス」が得られたことを確認します。)
これが発生しないようにするには、スクリプトを使用してはいけないすべてのユーザーの読み取り権限も削除する必要があります。とにかくこれは合理的です。このスクリプトの不正使用が本当に気になるなら
- 権限のないユーザーは、スクリプトの内容をコピーして新しいファイルに貼り付けるだけで、不足している実行権限を簡単にバイパスすることができ、このファイルに実行権限を付与できます。
- Kusalanandaが指摘したように、権限のないユーザーは次のように呼び出してスクリプトを簡単に使用できます。
変えるsh ./hello.sh
./hello.sh
この場合でも、スクリプトファイルに対する読み取り権限のみが必要です(参照この回答例えば)。
一般的な注意事項として、スクリプトの取得とスクリプトの実行の間に微妙な違いがあることに注意してください(参照この問題例えば)。