5 votos

Ejecutar aplicaciones GUI desde el Terminal con privilegio de root

Por lo tanto, ha sido bien documentado que las aplicaciones GUI (como gedit o textedit) deben NO se ejecute con sudo. Ubuntu y otros tienen gksu y gksudo (y similares), así que la pregunta es: ¿qué tenemos nosotros (los usuarios de Mac)? Dado que el kernel de Darwin está construido sobre algún código de *BSD, asumo que se aplican los mismos problemas, pero ¿cómo podemos evitarlo?

4voto

Sergei Puntos 683

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

Si tienes que hacer esto regularmente, puedes añadir este fragmento a tu ~/.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 root utilizarán /private/var/root como carpeta de inicio, por lo que todos los archivos de configuración y temporales propiedad de Root que se crearán en el proceso permanecerán donde deben estar - en el root directorio principal.
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 y posteriores, así que he cambiado mi ejemplo para usar Sublime Text en su lugar

3voto

Steve Evans Puntos 155

Si bien es posible lanzar una aplicación gráfica como usuario root, no es recomendable. Puede funcionar, la mayoría de las veces, pero evite confiar en este comportamiento.

Evitar root

Ejecutar una aplicación como Root no es recomendable porque aumenta drásticamente el riesgo de causar problemas con su Mac. El uso de Root debe limitarse a la menor cantidad de código posible con controles estrictos.

Las aplicaciones se mueven cada vez más hacia un diseño fragmentado para evitar exponer demasiada potencia al código que no la necesita.

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

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

Herramientas de línea de comandos

Si necesita trabajar con los archivos como usuario Root, utilice herramientas de línea de comandos como vim , emacs o nano . Estas herramientas no dependen del WindowServer y pueden ser lanzadas felizmente como Root dentro de otra sesión de usuario:

sudo nano <path to edit>

Herramientas gráficas

Si prefiere los editores gráficos, utilice un editor que funcione con el diseño de Mac OS X. BBEdit es un excelente editor que manejará correctamente la edición Archivos propiedad de root .

Cuando usted edita un archivo de propiedad de root con BBEdit, se utiliza un segundo proceso para salvar la brecha de permisos entre usted y el propietario del archivo. Este proceso pasa a través de las rutas sancionadas por 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

Existen sutiles problemas técnicos al lanzar una aplicación gráfica dentro de otra sesión de usuario.

Los problemas técnicos subyacentes provienen de que un usuario quiere lanzar 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, por razones de seguridad deseables.

Apple ha mejorado drásticamente el diseño de WindowServer en las últimas versiones importantes de Mac OS X. Ahora es posible tener varios usuarios conectados a diferentes sesiones gráficas en un Mac a través de Screen Sharing. Esta mejora, aparentemente sencilla, ha supuesto un enorme esfuerzo entre bastidores por parte de los ingenieros de Apple.

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

Si quiere profundizar en este tema, busque preguntas relacionadas con launchctl y ejecutar aplicaciones en otras sesiones de usuario activas.

1voto

Milliways Puntos 1548

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

Puede utilizar visudo aunque esto requiere un cierto conocimiento de vi pero está bien para hacer cambios sencillos en /etc/fstab o similar.

Puedes intentar establecer la variable de entorno EDITOR y ejecutar visudo aunque nunca he probado esto con un editor gráfico.

0voto

1.61803 Puntos 36

La respuesta de Sergei no me ha funcionado en OS X 10.8.5

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

Tengo un mensaje de error de permisos

ERROR

Desde sudo Si bien es cierto que primero el binario y luego el doble clic en el archivo en el Finder funcionaron, 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.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X