Domanda

Un processo già in esecuzione richiede un'istruzione privilegiata, come l'utilizzo dell'opzione socket SO_RCVBUFFORCE. Questo processo viene eseguito come un normale processo utente.

Come dare capacità / autorizzazioni a questo processo? Le impostazioni delle funzionalità basate su file sono ancora un sogno?

Ho provato l'utilità / usr / sbin / setpcaps dal pacchetto libcap e l'APP cap_set_proc () , ma la funzionalità CAP_SETPCAP è bloccato sul sistema (un sistema legacy basato su Fedora 4 con kernel 2.6.20), quindi non può concedere / rimuovere funzionalità per un processo diverso da quello in sé.

Hai pensato di impostare uid di root temporaneo su quel processo, ma c'è un modo per cambiare l'UID efficace di un processo esterno già in esecuzione? Le funzioni setuid () / seteuid () / ... possono semplicemente modificare il processo corrente (chi chiama la funzione).

È stato utile?

Soluzione

Non puoi. Il modello di sicurezza alla base delle funzionalità (piuttosto, il "set consentito di funzionalità") è che possono essere eliminate mediante un processo, mai aggiunto.

Se non riesci a impostare le cose nella tua architettura in modo tale che le capacità siano ereditate correttamente dai genitori del processo, potresti provare a fare la chiamata setsocktopt () in un processo separato usando il passaggio del descrittore di file. Cioè, imposta un demone "sockopt" in esecuzione al livello di privilegio necessario, connettiti ad esso con il tuo nuovo socket, passa il descrittore di file con sendmsg () e lascia che esegua le chiamate necessarie. Questa è una brutta API e la soluzione è inutilmente complicata. Ma potrebbe essere preferibile cercare nuovamente la struttura di avvio e inizializzazione della tua app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top