Ejecutar aplicaciones GUI desde la Terminal con privilegios de raíz

4

Por lo tanto, está bien documentado que las aplicaciones GUI (como gedit o textedit) deberían NOT se ejecutará con sudo. Ubuntu y otros obtienen gksu y gksudo (y similares) así que pregunta: ¿qué obtenemos NOSOTROS (usuarios de Mac)? Dado que el kernel de Darwin se basa en algún código * BSD, asumo que se aplican los mismos problemas, pero ¿cómo abordamos esto?

    
pregunta agentroadkill 16.06.2014 - 06:16

4 respuestas

3

Para editar /etc/hosts con texto sublime:
sudo /Applications/Sublime\ Text.app/Contents/MacOS/Sublime\ Text /etc/hosts

Si tiene que hacer esto de forma regular, puede agregar este fragmento a su ~ / .bash_profile

#   sudoapp: Runs .app with root privileges
#   Usage: sudoapp /Applications/Name.app /etc/hosts
#   --------------------------------------------------------------------
    sudoapp () {
        sudo "$1/Contents/MacOS/$(defaults read "$1/Contents/Info.plist" CFBundleExecutable)" $2
    }

Las aplicaciones que se ejecutan con privilegios de raíz utilizarán /private/var/root como carpeta de inicio, por lo tanto, todos los archivos de configuración y temporales que pertenezcan a la raíz que se crearán en el proceso permanecerán donde deberían estar: en el directorio de inicio root .
Esto es lo mismo que iniciar sesión como root y ejecutar la aplicación, pero sin la molestia de cambiar de usuario.

Este método funciona en 10.6 - 10.11

Actualización: el propio TextEdit de Apple se niega a iniciarse si se ejecuta como root en 10.11 o más reciente, así que cambié mi ejemplo para usar Sublime Text en su lugar

    
respondido por el Sergei 16.06.2014 - 10:01
3

Aunque es posible iniciar una aplicación gráfica como usuario root, no se recomienda. Puede funcionar la mayoría de las veces, pero evite confiar en este comportamiento.

Evitar la raíz

No se recomienda ejecutar una aplicación como root porque aumenta dramáticamente el riesgo de causar problemas con tu Mac. El uso de la raíz debe limitarse al código más pequeño posible con controles estrictos en el lugar.

Las aplicaciones se están moviendo cada vez más hacia un diseño fragmentado para evitar exponer demasiada energía al código que no lo requiere.

  • Un error en el código que se ejecuta con permisos de raíz es un riesgo de seguridad.
  • Un error en el código sin permisos de root es mucho menos capaz de causar problemas graves.

Hay casos de borde, pero estos son cada vez más raros. La introducción de sandboxing y XPC son parte de los esfuerzos de Apple por reducir la necesidad de proporcionar autoridad excesiva a los procesos que se ejecutan en OS X.

Herramientas de línea de comandos

Si necesita trabajar con archivos como usuario root, use herramientas de línea de comandos como vim , emacs o nano . Estas herramientas no se basan en el WindowServer y se pueden lanzar como root dentro de otra sesión de usuario:

sudo nano <path to edit>

Herramientas gráficas

Si prefieres editores gráficos, utiliza un editor que funcione con el diseño de Mac OS X. BBEdit es una excelente editor que manejará correctamente la edición de archivos de propiedad raíz .

Cuando edita un archivo de propiedad raíz con BBEdit, se usa un segundo proceso para cerrar la brecha de permisos entre usted y el propietario del archivo. Este proceso pasa por las rutas autorizadas de Apple y, por lo tanto, garantiza una experiencia predecible, con suerte en varias versiones principales de Mac OS X.

¿Por qué? Límites de WindowServer y alcance del diseño

Hay problemas técnicos sutiles con el lanzamiento de una aplicación gráfica en otra sesión de usuario.

Los problemas técnicos subyacentes provienen de un usuario que desea iniciar un proceso gráfico dentro de la sesión de otro usuario. El WindowServer de Mac OS X nunca fue diseñado con este objetivo. Las sesiones de usuario son extremadamente difíciles de romper incluso como usuario root, todo por razones de seguridad deseables.

Apple ha mejorado dramáticamente el diseño de WindowServer en las últimas versiones principales de Mac OS X. Ahora es posible que múltiples usuarios hayan iniciado sesión en diferentes sesiones gráficas en una Mac a través de Compartir pantalla. Esta mejora aparentemente simple se basó en una gran cantidad de esfuerzo detrás de escena por parte de los ingenieros de Apple.

Sin embargo, es poco probable que Apple proporcione una manera fácil de lanzar aplicaciones de forma cruzada como usuarios diferentes desde una sola sesión gráfica de usuario. ¿Cómo beneficiaría esto a sus clientes?

Si desea explorar más este tema, busque preguntas que incluyan launchctl y ejecute aplicaciones en otras sesiones de usuario activas.

    
respondido por el Graham Miln 16.06.2014 - 13:32
1

Hay buenas razones para NO editar archivos como root. ¿Por qué no copiarlos en un archivo temporal, editarlo y volver a copiarlo?

Podría usar visudo aunque esto requiere un cierto conocimiento de vi , pero está bien para hacer cambios simples en /etc/fstab o similar.

Puedes intentar configurar la variable de entorno EDITOR y ejecutar visudo , aunque nunca lo he intentado con un editor gráfico.

    
respondido por el Milliways 16.06.2014 - 07:00
0

La respuesta de Sergei no me funcionó en OS X 10.8.5

$ sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

Recibí un mensaje de error de permisos

Ya que sudo ing el binario primero, luego, al hacer doble clic en el archivo en el Finder funcionó, se me ocurrió el siguiente comando menos simple

$ sudo -b /Applications/TextEdit.app/Contents/MacOS/TextEdit && sleep .5 && open -a /Applications/TextEdit.app /etc/hosts

Puedes hacer una función como la de Sergei, si es necesario.

    
respondido por el 1.61803 16.06.2015 - 01:16

Lea otras preguntas en las etiquetas