以下のシナリオでは、シェルスクリプトまたはJavaプログラムにはどのような権限(所有者/グループ/その他)があるのか疑問に思います。
run.sh
Javaプログラムを呼び出すスクリプトがありますa.java
。スクリプトとjavaはユーザーAに属し、-rwxrw-r--
権限を持っています。ユーザーAが実行している場合、その権限グループはどのグループに属していますか?ユーザーAの所有者権限がありますか?
ユーザAと同じグループに属するユーザBもある。彼はrun.sh
Javaプログラムを順番に実行して呼び出します。現在、彼らはどの権限グループに属していますか?ユーザーBから集団許可を受けましたか?
プログラムが/common/abc
許可されているディレクトリーに書き込みを試みdrwxrw-r--
、プログラムに「その他」権限があると失敗する可能性があります。
注目すべき点の1つは、どちらも式を使用してsh run.sh
スクリプトを実行するため、実行権限が必要ないことです。読み取りアクセスのみ必要ですか?
答え1
すべてのプロセスは、以下を介して作成されない限り、そのプロセスを呼び出したプロセスと同じユーザーとグループで実行を開始します。設定値またはsetgid実行可能ファイル、つまり特権を持つ実行可能ファイル、つまり、または、または特権を持つrws
実行可能r-s
ファイル。ビット以外の権限ビットは関係ありません。実行可能ファイルの所有者は、スクリプトがsetuidの場合(つまり、ユーザー列のビットが設定されている場合)にのみ重要であり、グループ所有権は、スクリプトがsetgidの場合(つまり、グループ列のビットが設定されている場合)にのみ重要です。-ws
--s
s
s
s
したがって、説明するシナリオでは、ユーザーAがスクリプトを実行すると、スクリプトとJavaプログラムの両方がユーザーAとAが属するグループで実行されます。ユーザーBが実行されると、ユーザーBとユーザーBが属するすべてのグループで実行されます。
デフォルトの実行可能ファイルを実行するには実行権限が必要です。スクリプト(で始まるプログラム#!
)を実行するには、実行権限(メカニズムが引き継がれる前に実行開始)と#!
読み取り権限(インタプリタがスクリプトを読み取ることができるようにする)が必要です。インタプリタが明示的に呼び出される場合、スクリプトは実行可能である必要はありません。システムに関する限り、これは別のデータファイルです。