これは、セットルートのuidプログラムは、ソースコードRealUID、保存されたUID、有効なUID。どうしたの?
$ls -l
-rwsr-sr-x 1 root root 7406 2011-12-13 22:37 ./x*
次のとおりです。
int main(void) {
printf(
" UID GID \n"
"Real %d Real %d \n"
"Effective %d Effective %d \n",
getuid(), getgid(),
geteuid(), getegid()
);
seteuid(600);
printf(
" UID GID \n"
"Real %d Real %d \n"
"Effective %d Effective %d \n",
getuid(), getgid(),
geteuid(), getegid()
);
setuid(1000);
printf(
" UID GID \n"
"Real %d Real %d \n"
"Effective %d Effective %d \n",
getuid(), getgid(),
geteuid(), getegid()
);
setuid(0); // HOW DOES THIS SUCCEED IN SETTING THE EUID BACK TO 0
printf(
" UID GID \n"
"Real %d Real %d \n"
"Effective %d Effective %d \n",
getuid(), getgid(),
geteuid(), getegid()
);
return 0 ;
}
OUTPUT
UID GID
Real 1000 Real 1000
Effective 0 Effective 0
UID GID
Real 1000 Real 1000
Effective 600 Effective 0
UID GID
Real 1000 Real 1000
Effective 1000 Effective 1000
UID GID
Real 1000 Real 1000
Effective 0 Effective 1000
私の質問
のsetuid意志manページ状態本当の、保存された、効果的なuidを変更してください。 したがって、setuid(1000)
を呼び出すと、3つとも1000
に変更されます。 どうすればsetuid(0)
euid
を0
に変更しますか?
Uidの最後の列は何ですか:1000 0 0 0は –
を表します。サンプルコードでテストしようとしたとき、4番目の値は有効なユーザーIDと同じに表示されました。有効なユーザーIDである必要がありますが、実際のユーザーIDを2回印刷する理由はわかりません。 – Ajai
最後の列は、groovyなしで(例えば、bashシェルで)続行しようとする人のためのFSUID – user368507