〜これ設定値実行可能ファイルにのみ適用されますか(実行可能フラグのみ)。
同じファイルに対する他の権限(読み取り/書き込み)にどのような影響がありますか?
例:- 実際のファイル権限が次の場合4711、所有者以外のユーザーは読めません。所有者権限 4711 を増やし、他の人がコンテンツを読むことを許可するのはどうでしょうか。
答え1
setuid と setgid は有効な権限にのみ影響するため、所有者以外の人はファイルを読み取ることができません。ファイルが実行されるとき;それ以外の場合は、ファイル権限が使用されます。試すことができるサンプルプログラムは次のとおりです。
読んでください。c
#include <stdio.h>
int main(int argc, char **argv) {
FILE *f;
int i;
char c;
if(argc>1) {
f=fopen(argv[1],"rb");
for(i=1; i++<100;) {
c=getc(f);
printf("%x%s", (int)c, i%50?" ":"\n");
}
fclose(f);
}
}
テストしたい人以外の人にコンパイルして権限を変更します(私はこれを使用しましたroot
)。
# gcc -Wall -o readme readme.c
# chown root:root readme
# chmod ug+s,o-rw readme
権限を確認し、テストユーザーとしてファイルを読みます。
erik ~ $ ls -la readme
-rwsr-s--x 1 root root 8064 May 4 12:05 readme
erik ~ $ cat readme
cat: readme: Permission denied
それでは、プログラムを実行して自分で読むようにしてください。
erik ~ $ ./readme readme
7f 45 4c 46 2 1 1 0 0 0 0 0 0 0 0 0 3 0 3e 0 1 0 0 0 fffffff0 5 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 18 0 0 0 0 0 0 0
0 0 0 40 0 38 0 9 0 40 0 1d 0 1c 0 6 0 0 0 4 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 fffffff8 1 0
有効な権限がユーザーに変更されるため、問題がないことがわかります。そして読み取り権限。
なぜこれが起こるのですか?いくつかの理由が浮かんでいます。まず、カーネル(ローダー)はすでにすべての操作を実行するための完全な権限を持っているため、実行可能ファイルを実行するための読み取り権限は必要ありません。実行可能ファイルの内容を表示するには、通常、ファイルをコピーできる読み取り権限のみが必要です。いくつかの可能な例を挙げると、実行可能ファイルにはユーザーには見えない機密データが含まれている可能性があります(これは強くお勧めしますが、実際に発生しました!)。あるいは、システムはこれをユーザーが脆弱性を発見するのを防ぐために深い防御手段として使用しています。