Questo è un programma di set-root-uidRealUID, UID salvato, UID efficace. Cosa sta succedendo?
$ls -l
-rwsr-sr-x 1 root root 7406 2011-12-13 22:37 ./x*
Il codice sorgente:
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 ;
}
USCITA
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
La mia domanda
La pagina man membri che setuid cambia l'uid reale, salvato ed efficace. Quindi dopo la chiamata setuid(1000)
, tutti e tre cambiano in 1000
. Come è che setuid(0)
mi consente di cambiare euid
a 0
?
Puoi dirmi quale è l'ultima colonna in Uid: 1000 0 0 0 rappresenta –
Quando ho provato a testarlo con un codice di esempio, il quarto valore visualizzato è lo stesso di ID utente effettivo. Indovina che deve essere l'id utente effettivo, ma non è sicuro del motivo per cui dovrebbe stampare due volte l'ID utente effettivo. – Ajai
L'ultima colonna è il FSUID – user368507