Apertura / scrittura di file come amministratore / root utilizzando C ++ (UAC / gksudo / ecc.)

StackOverflow https://stackoverflow.com/questions/1403266

  •  05-07-2019
  •  | 
  •  

Domanda

L'applicazione su cui sto lavorando richiede la possibilità di modificare alcuni file protetti su Linux, OSX e Windows [Vista]. In genere, quando un'applicazione deve fare qualcosa con privilegi elevati, viene visualizzata una finestra di dialogo per la richiesta di password che chiede all'utente di verificare che desidera consentire all'applicazione di eseguire tali operazioni come amministratore.

Credo in generale, Windows Vista utilizza i file manifest, OSX ha la libreria di autorizzazione ( https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html ) e Linux ha una varietà di sudo frontend.

Esiste un modo multipiattaforma generalmente accettabile per gestirlo? Non voglio che la mia applicazione debba essere eseguita come utente root, ma voglio che sia in grado di aprire un file protetto per le operazioni di lettura / scrittura, quindi tornare alla normale modalità utente.

È stato utile?

Soluzione

Per Windows Vista, in pratica è necessario un processo dedicato per eseguire azioni amministrative. Come accennato, il processo abilitato all'amministrazione avrà bisogno di un manifest per specificare il livello di esecuzione richiesto (vedere < articolo MSDN per dettagli).

Se osservi attentamente qualsiasi applicazione Windows che viene avviata non elevata e supporta "elevating" stesso, vedrai che in realtà apre un processo completamente nuovo quando sono necessari i privilegi di amministratore (ad esempio vai a Task Manager quando UAC è abilitato, fai clic su " Mostra processi da tutti gli utenti " e nota come si riapre con i privilegi di amministratore).

Quindi per Windows, l'architettura probabilmente necessaria richiederebbe due processi: un processo standard per eseguire la maggior parte del lavoro e un processo di amministrazione da chiamare per eseguire le operazioni di amministrazione. I due processi dovrebbero comunicare tramite alcuni mezzi sicuri (forse un secure named pipe ) in modo che il lavoro di amministrazione possa essere svolto per conto del processo standard.

Questo approccio può essere generalizzabile su altre piattaforme e forse potrebbe essere astratto in una sorta di classe / interfaccia in modo che i dettagli specifici della piattaforma non debbano essere trapelati.

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