Come posso avviare un processo daemon come utente specificato all'avvio senza un login interattivo?

2

Sto provando a configurare un agente di TeamCity Build su un Mac Mini Server con 10.7.3. Sono riuscito a farlo funzionare e costruire ma solo se effettuo il login e avvio il processo manualmente.

Preferiamo avviare il processo all'avvio, che sembra essere facilmente fatto inserendo un file plist nella cartella / Library / LaunchDaemon. Sfortunatamente questo non funziona per noi in quanto il processo si avvia come root piuttosto che come utente specificato. Preferiremmo davvero mantenere le cose vincolate nella cartella dell'utente e inoltre abbiamo bisogno di accedere a un portachiavi per gestire i meccanismi di firma del codice iOS. Sfortunatamente, l'utilizzo di ~ / Library / LaunchAgents non funziona in quanto sembra richiedere l'accesso al terminale da parte di qualcuno e il login - questo deve iniziare dall'avvio e rimanere attivo quando l'utente è disconnesso.

C'è un modo per avviare un processo come utente specificato all'avvio?

    
posta Wyatt Barnett 08.02.2012 - 18:08
fonte

2 risposte

1

Puoi facilmente eseguire come un altro utente con sudo -u in questo modo:

#!/bin/sh

UZER=jsmith

sudo -u "$UZER" /path/to/program/you/want/to/run

exit 0

Basta cambiare 'jsmith' con il nome utente breve appropriato, quindi salvarlo come uno script da qualche parte e chiamare da / Library / LaunchDaemons

Ricorda che tutti i file in / Library / LaunchDaemons devono essere di proprietà di root per essere eseguiti.

(Penso che questo sia quello che stava suggerendo bmike)

Un'altra opzione

Tuttavia, ho scritto un HOWTO per rendere più sicuro l'accesso automatico:

Terminally Geeky: utilizza l'accesso automatico in modo più sicuro

Il sommario esecutivo è questo:

  • Attiva l'accesso automatico
  • Metti questo launchd plist in ~ / Library / LaunchAgents
  • Reboot

Che cosa fa:

Appena accedi, launchd ti ricondurrà alla schermata di accesso usando:

"/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession" -suspend

Nota che è tutta una linea lunga.

Considerando che qualcuno con accesso fisico al tuo computer ha un lotto di potenziali exploit, lo considero relativamente sicuro, ma ovviamente ognuno deve fare la propria determinazione. Lo gestisco nel mio piccolo ufficio, ma il mio iMac è nel mio ufficio privato che posso bloccare quando non ci sono.

Nota inoltre che l'accesso automatico non funziona con FileVault 2 .

    
risposta data 08.02.2012 - 20:50
fonte
0

Il modo più semplice è impostare l'accesso automatico dell'utente e bloccare lo schermo con la commutazione rapida dell'utente abilitata. Altrimenti dovrai fare il duro lavoro di creare un utente a livello di amministratore e avviare lo script o il processo stesso con un utente specifico.

I processi avviati prima dell'avvio della sessione di accesso dell'utente sono funzionalmente root e devono essere abbassati di livello se non si desidera che vengano eseguiti come root. Apple fa questo con il server web e l'utente _www e sul lato client, alcuni processi sono in esecuzione come utenti nessuno, _spotlight e, _mdnsresponder.

    
risposta data 08.02.2012 - 18:19
fonte

Leggi altre domande sui tag