2011-04-24 12 views
5

Estoy tratando de usar BetterAuthorizationSample en lugar de usar la llamada forma "maliciosa" de usar setuid para obtener privilegios de root.¿Cómo utilizar BetterAuthorizationSample? - Cocoa

Actualmente estoy usando AuthorizationCreate(); con BLAuthentication para tener acceso de root para cambiar algunos archivos, pero estoy un tanto irritado por el hecho de que tengo que ingresar constantemente mi contraseña cada vez que se inicia la aplicación.

Me encontré con el método de una HelperTool de Apple, y no puedo entenderlo.

He estado trabajando con Cocoa durante un par de meses, pero esto está fuera de mi alcance, pero todavía lo necesito. ¿Cómo implementaría esta herramienta para hacer tareas simples con privilegios de raíz?

¿Existe alguna manera más simple de utilizar el concepto de HelperTool, para que mis usuarios puedan ingresar su contraseña una sola vez y otorgue privilegios de raíz para siempre?

+3

Solo para quitar esto de en medio: [BetterAuthorizationSample] (http://developer.apple.com/legacy/mac/library/samplecode/BetterAuthorizationSample/) ahora es parte de la biblioteca de documentación Legacy. Tenga en cuenta cuando se hizo esta pregunta. Puede haber una solución más moderna que la que BetterAuthorizationSample implementa. –

Respuesta

2

La forma "moderna" de hacer una herramienta de ayuda en Mac OS X es enviarla como parte de su aplicación, y use the ServiceManagement framework to deploy it. Sus usuarios ingresan su contraseña una vez, al implementar la herramienta. Eso lo instala como un trabajo launchd; a partir de ese momento, usa any launchd on-demand mechanism para iniciar el asistente y hacer que trabaje para usted.

Observe que la publicación del blog vinculada anteriormente le recomienda que proteja las invocaciones posteriores del asistente con una escalada Authorization Services, para evitar tener una escalada arbitraria de privilegios que cualquiera pueda usar. Parece que afecta un poco el beneficio "los usuarios solo pueden ingresar su contraseña una vez", aunque puede usar AuthorizationRightSet() para crear el token de autorización de su aplicación en la base de datos de políticas, para que realmente pueda definir si los usuarios necesitan presentar contraseñas en la primera implementación.

El código de muestra de esa publicación es on GitHub y muestra el uso de ServiceManagement para implementar la herramienta de ayuda y los Servicios de autorización para controlar el acceso a la misma.

+2

Pensé que me gustaría entrar y simplemente señalar que nada de esto funcionará si estás haciendo un sandbox de tu aplicación principal. SMJobBless() fallará. Lo último que escuché de Quinn fue que estaba trabajando en un ejemplo actualizado que es adecuado para los desarrolladores que desean enviar aplicaciones de espacio aislado fuera de la App Store, pero que aún pueden realizar este tipo de funcionalidad. – rudy