スクリプトでsetuidを有効にするとセキュリティの問題が発生するため、デフォルトでは無効になっていますが、実行可能ファイルで機能することを期待しています。この投稿で説明されている手順に従って、出力としてuidを示す実行可能ファイルを作成しました。シェルスクリプトでsetuidを許可します
しかし、実行前と実行後の両方で同じuid(1000)を返しますsudo chmod +s ./setuid-test
。これは、setuidが実行可能ファイルに影響を与えないことを意味すると思います。なぜ、どのように解決するのですか?
ソースコード:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
構築して実行
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
実行するとls -la
、これは私が得るものです:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
me@me:~$ ls -la setuid-test
---- returns -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
ディレクトリを入力してマウントポイントを見つけ、次にmount | grep nameofmountpoint
。そこにnosuid
リストされているフラグはありますか?