1. Service should run in non-root user.
Fácil o suficiente. Você copiaria sua definição de serviço para um diretório de serviço na casa do "usuário". Por exemplo, digamos que você crie um usuário, chamamos de niftyuser
. Digamos também que seu serviço seja chamado de niftyservice
. Então, você copiaria sua definição de serviço para um diretório controlado por esse usuário; por uma questão de discussão (e não necessariamente que você queira fazer isso), digamos que você usará o diretório pessoal do niftyuser
. Então,
cp -Rav /etc/service/niftyservice /home/niftyuser/service/niftyservice
criará a definição de serviço. Então você teria que iniciar uma varredura de serviço no diretório desse usuário, mas iniciado com as credenciais do usuário. Se você escrevesse como um script, seria parecido com:
#!/bin/sh
exec setuidgid niftyuser svscan /home/niftyuser/service
O resultado será uma árvore de serviço controlada por esse usuário. Note que, ao fazer deste um script, você pode dividir a sub-árvore do seu processo controlado pelo usuário na árvore principal do processo ... você pode ver o exemplo do runit para como isso é , pois o runit foi inspirado nos daemontools.
2. Log main directory should be readable only to user and groups.
Francamente, eu simplesmente faço /service/(service-name)/log/main
um link simbólico para um diretório real, ou seja, /service/niftyservice/log/main
pontos para /var/log/niftyservice
. No script de execução do diretório de log, aponte para ./main
como o destino; Isso significa que você pode configurar a definição uma vez e mover o registro conforme necessário simplesmente alterando o link simbólico. E, finalmente, para resolver a questão (2), você definiria as permissões de usuário e grupo para /var/log/niftyservice
conforme necessário e definiria o modo como 775. Isso permitiria que qualquer pessoa lesse os arquivos, mas apenas o usuário ou grupo para gravar eles.