Sto scrivendo un demone in python, usando il pacchetto python-daemon. il demone viene avviato all'avvio (init.d) e deve accedere a vari dispositivi. il demone deve essere eseguito su un sistema incorporato (beaglebone) con ubuntu in esecuzione.eseguendo python-daemon come utente non privilegiato e mantenendo l'appartenenza al gruppo
ora il mio problema è che voglio eseguire il daemon come utente non privilegiato piuttosto (ad esempio mydaemon
) rispetto a root
.
per consentire al demone di accedere ai dispositivi ho aggiunto quell'utente ai gruppi richiesti. nel codice python uso daemon.DaemonContext(uid=uidofmydamon)
.
il processo avviato dal root
daemonizes piacevolmente ed è di proprietà l'utente corretto, ma ho permesso negato errori quando si cerca di accedere ai dispositivi. Ho scritto una piccola applicazione di test e sembra che il processo non erediti le appartenenze ai gruppi dell'utente.
#!/usr/bin/python
import logging, daemon, os
if __name__ == '__main__':
lh=logging.StreamHandler()
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(lh)
uid=1001 ## UID of the daemon user
with daemon.DaemonContext(uid=uid,
files_preserve=[lh.stream],
stderr=lh.stream):
logger.warn("UID : %s" % str(os.getuid()))
logger.warn("groups: %s" % str(os.getgroups()))
quando ho eseguito il codice di cui sopra come l'utente con uid = 1001 ottengo qualcosa come
$ ./testdaemon.py
UID: 1001
groups: [29,107,1001]
mentre quando faccio funzionare il codice di cui sopra come root (o su
), ottengo:
Come posso creare un processo daemon avviato da root ma con un diverso uid effettivo e appartenenze di gruppo intatte?
Per che distro Linux è questo? – rkyser
ubuntu e debian (ho aggiornato la domanda di conseguenza) –
C'è un motivo per cui non è possibile modificare l'utente del daemon prima di avviare il daemon python? Forse qualcosa di simile (questa risposta) [http://stackoverflow.com/a/8941040/651848] potrebbe funzionare per le tue esigenze? – rkyser