Đây là một chương trình thiết root-uidRealUID, UID đã lưu, UID hiệu quả. Chuyện gì vậy?
$ls -l
-rwsr-sr-x 1 root root 7406 2011-12-13 22:37 ./x*
Mã nguồn:
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
Câu hỏi của tôi
Các trang người đàn ông khẳng định rằng ý chí setuid thay đổi uid thực, được lưu và hiệu quả. Vì vậy, sau khi gọi setuid(1000)
, cả ba thay đổi thành 1000
. Làm thế nào là setuid(0)
hãy để tôi thay đổi euid
thành 0
?
Bạn có thể cho tôi biết cột cuối cùng trong Uid: 1000 0 0 0 đại diện cho –
Khi tôi thử kiểm tra nó bằng mã mẫu giá trị thứ tư được hiển thị giống như id người dùng có hiệu lực hay không. Đoán nó phải là id người dùng hiệu quả, nhưng không chắc chắn tại sao nó sẽ in id người dùng hiệu quả hai lần. – Ajai
Cột cuối cùng là FSUID – user368507