Ho notato che alcuni dei miei utenti non hanno avuto un discredito dopo l'arresto anomalo, anche quando tutto il resto nella loro configurazione sembrava corretto.Eliminare i privilegi di root e generare ancora il numero di core
Dopo aver letto la pagina di core(5) uomo un mucchio di volte ho notato questo particolare punto:
[Un file core dump non viene prodotto se] Il processo è in esecuzione un set-user-ID (set -group-ID) programma di proprietà di un utente (gruppo) diverso dall'ID utente reale (gruppo) del processo.
mio demone non è setuid root, ma in un sacco di configurazioni che è iniziato come root, e se il file .conf specifica un nome utente, fa cadere i privilegi, con la solita combinazione di:
setgid(gid);
setuid(uid);
Quando esegue questa operazione, non si generano più coredumps. Tutto il resto nell'ambiente sembra essere corretto, rimuovendo quelle chiamate (e rimanendo come root) mi si ottiene come al solito.
Ho provato a cambiare l'uid "reale"/gid come pagina uomo sembrava suggerire, chiamando il meno-portatile setresgid/uid che sembrano essere suggerito spesso a cadere i privilegi in modo permanente:
setresgid(gid, gid, gid);
setresuid(uid, uid, uid);
Mi aspettavo che risolvesse il problema ma ... non migliorava affatto. Ancora niente salti.
Sooo ... ora cosa?
Codice di prova:
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc > 1) {
setgid(atoi(argv[2]));
setuid(atoi(argv[1]));
}
abort();
}
Usage:
./a.out
come qualsiasi utente a poco interrompere senza setgid/setuid./a.out 1000 100
(dove 1000 è uid e 100 è gid) come root per rilasciare i privilegi e guardare i decadimenti non accadere.- Bonus funzione non intenzionale: passare un parametro, non due, per ottenere SIGSEGV anziché SIGABRT.
ho già provato questo in Arch Linux, CentOS 6.5 e OpenBSD 5.3
E l'utente/gruppo non privilegiato non ha disabilitato i dump di core ('ulimit -c' non riporta' 0')? –
Sì, illimitato da entrambi i lati. E eseguirlo come uid (0 e 1000) senza le chiamate setuid/gid si ottiene un risultato negativo. – dequis
Devi davvero essere più specifico per questo genere di cose, le distribuzioni di Linux fanno cose diverse qui. In particolare, ci sono moduli PAM là fuori, ricorda Ubuntu, che interagiscono con la produzione di core dump. –