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 fatto facilmente 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?

Risposte:


1

Puoi facilmente eseguire come un altro utente con sudo -u così:

#!/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 posseduti da 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 il login automatico
  • Metti questo lancio plist in ~ / Library / LaunchAgents
  • Reboot

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.

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


L'esecuzione di sudo -u ottiene l'accesso al portachiavi per l'utente specificato?
Wyatt Barnett

Che io non lo so. Potresti provare il security strumento per vedere se è possibile accedervi in ​​questo modo.
TJ Luoma

Alla fine il login automatico con il tuo logout era abbastanza buono per i nostri scopi.
Wyatt Barnett

0

Il modo più semplice è impostare l'accesso automatico dell'utente e quindi 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.


Gotcha. L'opzione precedente sembra davvero brutta, c'è qualche documentazione su come fare quest'ultima opzione?
Wyatt Barnett

Vorrei iniziare developer.apple.com/library/mac/#documentation/MacOSX/... per la documentazione. È denso, quindi hai pensato di cambiare il tuo daemon sudo selezionare l'utente anziché avviare come attività ereditata. Non l'ho provato ultimamente, ma è veloce e potrebbe funzionare.
bmike
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.