2010-09-25 17 views
8

Sto scrivendo qualcosa di simile allo http://ideone.com/. Attualmente eseguo i processi utente con la chiamata CreateProcess. Uccido il processo se viene eseguito più a lungo della quantità di tempo specificata, ma non so come negare la lettura/scrittura dei diritti del file system/creazione dei diritti di processo ecc. Al processo creato. L'eseguibile dato può essere letteralmente qualsiasi cosa e ho bisogno di consentire solo stdin/stdout. Inoltre sarebbe bello se potessi impostare la memoria di lavoro impostata.Esecuzione di un processo con i minimi privilegi possibili in winapi

Ho letto un sacco di articoli su MSDN come CreateProcessAsUser Function, CreateProcessWithLogonW Function ecc, ma mi confondo molto veloce (probabilmente perché la mia conoscenza win32 è estremamente limitata). E 'sufficiente chiamare semplicemente CreateProcessAsUser e creare un utente speciale con quei privilegi limitati (e come creare tale utente).

Spero di riuscirci in una chiamata di funzione con i parametri corretti, quindi per favore aiutatemi.

Inoltre, se si conosce un progetto open source simile, sarebbe fantastico.

Grazie.

============================================== ============

Modifica: Ciao di nuovo :) Sono ancora bloccato con questo. Non ho avuto abbastanza tempo per lavorare su questo, ma immagino che il post di snemarch sia molto utile. Se qualcuno ha una soluzione pronta, sarebbe fantastico. Pubblicherò se faccio qualcosa con i link di snemarch.

+0

vmware Instumentation è fuori questione? o qualche altro prodotto vm? –

+0

no, non è fuori discussione, ma mi piacerebbe attenermi alla API di vittoria, se possibile. Sono aperto a tutti i suggerimenti. – Klark

risposta

5

Considerare la procedura utente in esecuzione all'interno di job object. I processi figlio creati dal processo utente finiranno nello stesso oggetto di lavoro. È possibile applicare restrizioni specifiche sulla quantità di risorse che il lavoro può utilizzare, come può interagire con la GUI ecc. (Vedere la funzione SetInformationJobObject). Puoi uccidere tutti i processi all'interno di un oggetto di lavoro con un solo colpo.

3

Abbiamo un pezzo di codice per fare questo, anche se non posso postarlo :(

Creare un "ristretto" token di accesso basato sul token di accesso per questo processo. Quindi creare un nuovo processo per la . app con questo token di accesso

Aveva un commento con il codice - maggiori informazioni si possono trovare in questo articolo di MSDN chiamato, "Browsing the Web and Reading E-mail safely as an Administrator". Tuttavia, come al solito MS ha rotto il web e l'articolo non c'è più

.

Le ricerche associate hanno trovato l'app "DropMyRights" collegata su un blog linking to this article che può fare ciò che si Ant, offre una fonte, ma ancora una volta quei collegamenti sono stati spezzati nella pagina del blog.

si consiglia di guardare a funzioni come OpenProcessToken GetTokenInformation CreateRestrictedToken

e privs come SE_CHANGE_NOTIFY_NAME

Problemi correlati