Pregunta

La aplicación en la que estoy trabajando requiere la capacidad de editar ciertos archivos protegidos en Linux, OSX y Windows [Vista]. En general, cuando una aplicación necesita hacer algo con privilegios elevados, aparece un cuadro de diálogo de solicitud de contraseña pidiéndole al usuario que verifique que desea permitir que la aplicación realice esas operaciones como administrador.

Creo que, en general, Windows Vista utiliza archivos de manifiesto, OSX tiene la biblioteca de autorización ( https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html ), y Linux tiene una variedad de sudo frontends.

¿Existe una forma de plataforma multiplataforma generalmente aceptable para manejar esto? No quiero que mi aplicación se ejecute como usuario root, pero sí quiero que pueda abrir un archivo protegido para operaciones de lectura / escritura, y luego volver al modo de usuario normal.

¿Fue útil?

Solución

Para Windows Vista, básicamente necesita un proceso dedicado para realizar acciones administrativas. Como usted menciona, el proceso habilitado para administrador necesitará un manifiesto para especificar el nivel de ejecución solicitado (consulte esto artículo de MSDN para más detalles).

Si observa detenidamente cualquier aplicación de Windows que se inicia sin elevación y admite "elevar" en sí mismo, verá que en realidad abre un proceso completamente nuevo una vez que se necesitan privilegios administrativos (por ejemplo, vaya al Administrador de tareas cuando UAC esté habilitado, haga clic en "Mostrar procesos de todos los usuarios" y observe cómo se vuelve a abrir con privilegios de administrador).

Por lo tanto, para Windows, la arquitectura que probablemente necesite requeriría dos procesos: un proceso estándar para realizar la mayor parte del trabajo y un proceso de administración al que realizar las operaciones de administración. Los dos procesos tendrían que comunicarse a través de algún medio seguro (quizás un canalización con nombre seguro ) para que el trabajo administrativo se pueda realizar en nombre del proceso estándar.

Este enfoque puede ser generalizable en otras plataformas, y quizás se pueda abstraer en algún tipo de clase / interfaz para que los detalles específicos de la plataforma no tengan que filtrarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top