Linux: daemoni / servizi definiti dall'utente

Sto cercando un framework / libreria / ambiente in modo che un utente comune possa impostare i propri processi server. Questi processi dovrebbero funzionare sotto il suo UID come qualsiasi altro process utente.

Tuttavia, la definizione di quali processi dovrebbe essere avviata, con argomenti che ottengono ecc., Dovrebbe essere specificata da un utente ordinario senza privilegi aggiuntivi. È importnte per me che questo accada senza la necessità che l'utente effettivamente acceda. Idealmente dovrebbe funzionare con SYSV init ma una cosa basata su systemd è ok.

Esempi / casi di utilizzo:

  • processi veloci / fast cgi
  • istanze mongodb
  • diversi costruttori per il server di integrazione continua

Tutti questi hanno in comune, che vorrei avviare più istanze dello stesso binario (con parametri diversi) e che questi parametri potrebbero richiedere modifiche regolari. Tuttavia gli utenti dovrebbero essere in grado di modificare tutto ciò senza richiedere privilegi di root.

Quali suggerimenti / suggerimenti su come questo può essere implementato in Linux?

EDIT: Il requisito minimo è solo per avviare i processi utente ma ovviamente ci sarà la necessità di meccanismi di controllo più avanzati. Ad esempio, dovrebbe essere un modo semplice per interrogare se il servizio è in esecuzione, arrestare l'istanza, riavviarlo, ricaricarlo, …

  • Centos 6.5 auditd non riesce a iniziare con servizio o /etc/init.d/audit start
  • Debian Jessie UpStart / Systemd / SysV non riavviare più
  • Come posso assicurarsi che uno script init.d viene eseguito dopo che le interfacce di networking hanno ricevuto i loro indirizzi su DHCP?
  • 3 Solutions collect form web for “Linux: daemoni / servizi definiti dall'utente”

    cron fornisce questo con il prefisso @reboot (Vixie, e forse altri sapori, controlla l' man 5 crontab ). L'utente utilizzerebbe crontab per creare / modificare il proprio file crontab e specificare

     @reboot /some/path/command -flags --moreflags 

    Quale eseguirà quel command all'avvio, come quel utente.

    Ciò avrebbe circa 10 righe di script shell, perché avete bisogno di un framework / libreria / ambiente?

    Come esempio rapido, utilizzando l'init sysV ….

     #!/bin/bash . /etc/rc.d/init.d/functions . /etc/sysconfig/network DAEMON_USERS=`cat /etc/daemon_users` CMD="$1" for DUSER in $DAEMON_USERS ; do DSCRIPTS=`ls /home/${DUSER}/init/` for DFILE in DSCRIPTS ; do if [ -x "/home/${DUSER}/init/${DFILE}" -a ! -d "/home/${DUSER}/init/${DFILE}" ] then su -c $DUSER /home/${DUSER}/init/${DFILE} $CMD fi done done 

    Se veramente vuoi permettere loro di eseguire roba come root, rimuova il 'su -c $ DUSER' e li aggiunga ai sudoer in modo da poter riavviare / aggiungere roba senza un riavvio.

    Quindi … appena avviare l'applicazione come utente che si desidera eseguire come e non cercare di accedere a qualsiasi cosa che richiedesse root (come porte privilegiate, file che possono essere letti solo da root, ecc.)?

    Se si desidera avviare automaticamente questi demoni e controllarli tramite il process SITV init, dovrai creare uno script init per ognuno di essi che specifichi i parametri (o li legge da un file che l'utente non privilegi ha in scrittura) e lancia il demone usando su -c o simili, ma ATTENZIONE : fare questo ha implicazioni di sicurezza gravi (un file "parametri" attentamente creato può consentire all'utente di eseguire codice arbitrario come utente che esegue la sequenza di init, di solito root).
    DerfK ha citato l'opzione cron @reboot , che potrebbe essere una scelta migliore (less di un rischio di sicurezza), ma i tuoi amministratori devono essere consapevoli che questi programmi saranno avviati da cron …

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.