8 votos

¿Cómo obtengo mi LaunchAgent para ejecutar como root?

Estoy usando Mac 10.9.1. Estoy tratando de establecer un proceso para ejecutar después de inicio de sesión que se ejecuta como root. He creado este archivo en /System/Library/LaunchAgents/eXist.plist con rx-r-r-permisos. El contenido del archivo está por debajo de

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>GroupName</key>
        <string>wheel</string>
        <key>Label</key>
        <string>eXist DB</string>
        <key>Program</key>
        <string>/Applications/eXist-db/bin/startup.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/eXist DB.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/eXist DB.out</string>
        <key>UserName</key>
        <string>root</string>
</dict>
</plist>

Sin embargo, mi proceso continúa funcionando como mi usuario, davea, en lugar de root. ¿Alguna idea qué debo hacer?

8voto

klanomath Puntos 19587

Para obtener un usuario LaunchAgent la ejecución de un script para que se ejecute como root tienes que hacer lo siguiente:

Modificar los permisos del script. Agregar el script (o comando) para el archivo sudoers en el contexto del usuario y, finalmente, añadir y cargar una adecuada lanzar el agente plist.

Este enfoque podría crear graves agujeros de seguridad!


En el siguiente ejemplo yo uso el startup.sh de salida-db 2.2:

  • Crear un plist:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Disabled</key>
        <false/>
        <key>Label</key>
        <string>org.eXist_DB</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/sudo</string>
            <string>/Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/eXist_DB.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/eXist_DB.out</string>
        <key>ThrottleInterval</key>
        <integer>10</integer>
    </dict>
    </plist>
    

    y guardarlo como org.eXist_DB.plist en ~/Library/LaunchAgents

    La última clave:

        <key>ThrottleInterval</key>
        <integer>10</integer>
    

    podría no ser necesario. En mi VM fue - por razones desconocidas.

  • Modificar los permisos de startup.sh:

    sudo chown root /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh
    sudo chmod 4755 /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh
    
  • Modificar el archivo sudoers:

    sudo visudo
    
  • agregar una línea para habilitar la ejecución de un comando sin necesidad de introducir la contraseña de sudo

    # User privilege specification
    root    ALL=(ALL) ALL
    %admin  ALL=(ALL) ALL
    

    ->

    # User privilege specification
    root    ALL=(ALL) ALL
    %admin  ALL=(ALL) ALL
    your_user_name ALL=(ALL) NOPASSWD: /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh
    
  • Finalmente entrar:

    launchctl load -w ~/Library/LaunchAgents/org.eXist_DB.plist
    

    para cargar e iniciar el lanzamiento del agente

4voto

Steve Evans Puntos 155

Añadir el par de valor de la clave para UserName :

<key>UserName</key>
<string>root</string>

Coloque el billete del trabajo de launchd en /Library/LaunchDaemons/ ; la /System carpeta está reservada exclusivamente para el uso de Apple.

1voto

Rich Trouton Puntos 2322

Utilice un loginhook. Está en desuso pero todavía funciona:

Mac OS X: Creación de un gancho de inicio de sesión

1voto

Quanlong Puntos 138

Usted puede utilizar launchd-oneshot para instalar un trabajo de inicio de sesión ejecuta como root con

brew install cybertk/formulae/launchd-oneshot
sudo launchd-oneshot <script> --on-login-as-root

0voto

moodforaday Puntos 2633

un) no meterse con cualquier cosa en /System/ a menos que desee atornillar su sistema de riesgo. En serio. Estancia lejos.

b) trasladarlo en encuentran/LaunchDaemons.

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