Automator: Ejecute TextEdit como raíz

Específicamente, quiero simplificar la edición del hostsarchivo, que requiere privilegios de root.

El siguiente comando funciona en el shell:

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

Por lo que puedo aprender, lo siguiente debería funcionar con Automator:

-- Run AppleScript
on run {input, parameters}
    do shell script ¬
        "/Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts" with administrator privileges   
end run

… la clave es que with administrator privilegeses equivalente a sudoy le pedirá una contraseña.

Sin embargo, cuando ejecuto el script, aparece el siguiente error:

El comando terminó debido a la recepción de una señal.

y luego

TextEdit se cierra inesperadamente.

… que parece serio.

Si intento lo mismo con el editor de texto Atom , funciona según lo previsto.

¿ Cómo hago para que TextEdit se ejecute como root?

Respuestas (3)

En la versión actual de macOS (10.12.6 en el momento de escribir este artículo), esto tampoco funcionará desde el shell:

$ sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit 
Password:
Illegal instruction: 4

Y si revisa los registros de fallas, encontrará lo siguiente:

Sandbox registration internal error: Incoming message euid:0 does not match secinitd uid:501.

Esto es por diseño; TextEdit es una aplicación de espacio aislado, y ejecutarla como root anularía gran parte del propósito del espacio aislado. No creo que puedas encontrar una manera de hacer que se ejecute como root. Sin embargo, esto no es algo malo, ya que ejecutar una aplicación GUI como root es generalmente una idea terrible para la seguridad, ya que hay muchas formas de inyectar código de forma subrepticia en una aplicación Cocoa, y si esa aplicación se ejecuta como root, puede abrir algunas vulnerabilidades de seguridad bastante serias de esta manera.

Para editar archivos como /etc/hosts, recomiendo encontrar otra forma:

  1. Utilice un editor de línea de comandos como emacs, picoo vi.

  2. Use un editor de texto basado en GUI que tenga la función de solicitar su contraseña de administrador cuando sea necesario (creo que BBEdit puede hacer esto, por ejemplo)

  3. Simplemente copie el /etc/hostsarchivo a otra ubicación, edítelo allí y luego utilícelo sudopara copiar el archivo modificado nuevamente a /etc.

En realidad, tiene razón en que el comando tampoco funciona en el shell, solo para Atom. La razón por la que quería usar TextEdit es para que mis alumnos accedan fácilmente. Sin embargo, gracias por la respuesta, al menos explica por qué.

No es realmente una respuesta a lo que preguntó, pero como alternativa, ¿ha probado Gas Mask - editor de archivos Hosts gratuito?
Puede editar, almacenar múltiples versiones y cambiar sobre la marcha.

ingrese la descripción de la imagen aquí

Buena atrapada. He estado buscando algo como esto, pero no pude encontrar nada, por lo que me di por vencido y probé el enfoque de TextEdit.

Solo para cerrar el círculo sobre esto (porque fue uno de los principales éxitos en Google).

Aquí se explica cómo abrir cualquier archivo.

terminal (bash/zsh):

sudo open /Applications/Developers\ Tools/Sublime\ Text.app /etc/hosts
sudo open "/Applications/Developers Tools/Sublime Text.app" /etc/hosts

alias - entrada:

alias edit="sudo open /Applications/Developers\ Tools/Sublime\ Text.app"

alias - uso:

edit /etc/hosts

Automator - Acción rápida (para usar en Finder):

  1. Nuevo > Acción rápida

  2. Agregue la acción 'Ejecutar script de Shell' al flujo de trabajo

  3. Configure las opciones de flujo de trabajo para que sean: el flujo de trabajo recibe archivos o carpetas actuales en Finder.app (las palabras en negrita son opciones para seleccionar)

  4. Pegue el fragmento a continuación en el cuadro de acción Shell Script

    abrir -a /Aplicaciones/Desarrolladores\ Herramientas/Sublime\ Text.app "$@"

  5. Guardar flujo de trabajo - nombre sugerido "Abrir en Sublime Text (como root)

  6. Abra Preferencias del sistema > Teclado > Servicios y verifique que el script aparezca y esté marcado.

  7. Vaya a Finder y haga clic derecho y encontrará la opción en el menú contextual para iniciar la entrada (el archivo seleccionado) como root / superusuario

Espero que esto ayude a cualquier otra persona que se encuentre con esto.

El uso sudo openno ejecuta la aplicación como root.