Solaris 10でsetuidプログラムを実行するには?

Solaris 10でsetuidプログラムを実行するには?

私はSolaris 10システムを使用しています:

# uname -a
SunOS edddev03 5.10 Generic_150400-04 sun4v sparc SUNW,SPARC-Enterprise-T5120

私はuidを印刷するプログラムを書いた。

# cat getuid.c
int main (void) {
  printf ("%d\n", getuid());
}

期待どおりに動作します。

# gcc -o /bin/getuid getuid.c
# getuid
0
# su nobody -c /bin/getuid
60001

今それをsetuidプログラムに変更しました。

# chmod 4555 /bin/getuid
# ls -la /bin/getuid
-r-sr-xr-x   1 root     root        6424 May 18 13:04 /bin/getuid

しかし、期待どおりに動作しません。

# su nobody -c /bin/getuid
60001

0を期待した。なぜ動作しないのですか?

ベストアンサー1

私はこの質問に対する答えがまだ残っていないと思います。G-マンそしてブラッツリーエラーが発生しました。getuid()「呼出処理の実ユーザID」が返され、geteuid()「呼出処理の実効ユーザID」が返される。

このプログラムで違いを確認できます。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main (void) {
  printf ("getuid=%d, geteuid=%d\n", getuid(), geteuid());
  setuid(geteuid());
  printf ("getuid=%d, geteuid=%d\n", getuid(), geteuid());
}

$ gcc -o getuid getuid.c
$ sudo chown root getuid
$ sudo chmod u+s getuid
$ su nobody -c ./getuid
getuid=60001, geteuid=0
getuid=0, geteuid=0

おすすめ記事