por - clausulas de un contrato de alquiler
Acceso/Privado/etc con c (3)
esto podría ser una pregunta simple, pero ¿cómo "solicito" privilegios del sistema / raíz al usuario en una aplicación de consola de ca? Necesito escribir en / Private / etc pero no puedo. Esto es para mac / unix.
He visto que se usa en otros comandos de la consola, por ejemplo, cuando ejecuta el siguiente comando: "sudo /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder", Terminal le pide su contraseña. ¿Cómo hago esto?
gracias, JNK
La forma de hacer lo que quiere en la Mac es escribir una "aplicación factorizada", que consiste en la parte que ejecuta un usuario y la parte que hace la tarea privilegiada. Instale la parte privilegiada en el dominio de launchd
del sistema y obtenga la herramienta de usuario para invocarla para el trabajo que necesita permisos especiales.
Debe asegurarse de que solo se produzca el uso autorizado del ayudante con privilegios y lo hace mediante los Servicios de autorización . En la herramienta de usuario, adquiere un "derecho", que luego convierte a un formulario externo y lo pasa al ayudante. La herramienta auxiliar debe verificar que tiene el derecho correcto antes de intentar hacer el trabajo privilegiado.
La otra opción es escribir la herramienta completa para que falle con elegancia (lo que tiene que hacer en ambos casos) y pedir a los usuarios que la ejecuten a través de sudo
si necesitan acceso privilegiado. Así es como funciona el resto de UNIX.
Para los sistemas UNIX, necesitará tener el indicador de setuid en su programa, y debe verificar / etc / passwd y / etc / shadow para las credenciales válidas. Creo que la función crypt (3) se usa para el hash de contraseñas. No estoy seguro de Mac.
No hay ninguna llamada al sistema que permita que un proceso obtenga privilegios de administrador. Puede esperar que seteuid
funcione de esta manera, pero solo puede ser utilizado por procesos con procesos de raíz (los procesos sin privilegios solo pueden configurar el euid igual al uid).
sudo
es especial porque su archivo ejecutable tiene permisos setuid. Esto significa que cuando se ejecuta sudo
, se ejecuta como el usuario que lo posee (root) en lugar del usuario que lo ejecuta. sudo
puede verificar que tiene acceso de administrador al verificar su contraseña y leer un archivo de configuración. Si la verificación tiene éxito, llama a fork
y execve
para ejecutar el comando que solicitó.
Para obtener privilegios de root dentro de una aplicación no privilegiada, debe saltar algunos aros. Puede usar fork
/ execve
para llamar a sudo
para su propio comando. Una vez autenticado, tendrías un proceso secundario privilegiado. Podría pasar un argumento especial o una variable de entorno para que el proceso secundario pueda saltar al código que se pretende privilegiar. El proceso principal solo esperará a que se complete el proceso secundario.