setuid (0) con CAP_SETUID
-
26-09-2019 - |
Domanda
Sto cercando di cambiare la mia uid a 0 per non root con la capacità CAP_SETUID
. Ho il seguente programma:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/capability.h>
#include <sys/prctl.h>
int main(int argc, char *argv[])
{
printf("cap setuid in bset: %d\n", prctl(PR_CAPBSET_READ, CAP_SETUID, 0, 0, 0));
printf("%s\n", cap_to_text(cap_get_file(argv[0]), NULL));
printf("%s\n", cap_to_text(cap_get_proc(), NULL));
printf("uid: %d\n", (int) getuid());
setresuid(0, 0, 0);
printf("uid: %d\n", (int) getuid());
return 0;
}
I assegnare la capacità setuid come segue:
sudo /sbin/setcap cap_setuid=ep ./capsetuid
E ottengo il seguente output
cap setuid in bset: 1
= cap_setuid+ep
=
uid: 1000
uid: 1000
mi aspetto il secondo printf () per mostrare anche la capacità CAP_SETUID
. In qualche modo il mio processo non ottiene la capacità di file setuid. Che cosa sto facendo male qui?
Soluzione
appena scoperto che le funzionalità di file devono essere abilitati dalla linea di comando kernel con file_caps = 1.
Altri suggerimenti
setuid()
imposta il efficace user-id del processo, ma getuid()
ottiene il reale user-id.
Cambia il getuid()
per geteuid()
e dovrebbe funzionare.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow