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?
Respuestas
¿Demasiados anuncios?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
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.
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.
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
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.