Estou tentando configurar um trabalho Upstart para ser executado na inicialização do sistema, e isso também pode ser iniciado / interrompido por membros de um grupo que não seja sudo
. Com uma versão anterior, usei update-rc.d
e os scripts armazenados /etc/init.d/
para fazer isso funcionar adicionando %Group ALL = NOPASSWD: /etc/init.d/scriptname
ao meu arquivo sudoers, mas não consigo obter um equivalente trabalhando para o Upstart.
Tentei adicionar %Group ALL = NOPASSWD: /sbin/initctl start jobname
ao arquivo sudoers, mas tentar executar o comando start jobname
produz este erro:
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
Até onde eu sei, é uma reclamação sobre como minha conta de usuário não tem o poder de enviar mensagens 'Iniciar' no arquivo de configuração do D-Bus para o Upstart. Na verdade, não consegui encontrar nenhuma informação sobre como editar esse arquivo para dar permissão a um grupo para acessar um serviço específico - existe essa opção? Existe uma maneira de editar o arquivo Sudoers para que eu possa executar o trabalho sem editar o arquivo de configuração? Estou melhor apenas aderindo à versão anterior?
Pessoalmente, estou usando a seguinte linha no arquivo /etc/sudoers.d/jobname_myuser:
conforme descrito aqui: /server//a/390723/68608
fonte
Essa opção não existe no sudo.
A diferença entre os scripts Sysv e os arquivos de configuração do Upstart é a seguinte: Os scripts Sysv são scripts, executáveis por si só e você pode dizer ao sudo para permitir que algum grupo os execute. Por outro lado, os arquivos de configuração do Upstart são meramente apenas arquivos de configuração, não executáveis; portanto, a execução de
start
(ligação simbólica parainitctl
) é o que o sudo permite. Seu problema aqui é que, ao permitir que as pessoas executem,initctl
você permite queinitctl
tudo funcione .A solução é simples, se sua preocupação é apenas um trabalho. Faça um script, diga
/usr/bin/jobname.sh
comem seguida,
chmod 755 /usr/bin/jobname.sh
e, finalmente, acrescentar que executável para seu arquivo sudoers:Dessa forma, todos podem ligar
jobname.sh start
oujobname.sh stop
controlar esse trabalho específico. Você pode querer adicionar um pouco de verificação para permitir que apenasstart
estop
parâmetros etc.fonte
initctl
, mas que o Upstart recusa quaisquer sinais enviados por usuários / grupos que não tenham recebido explicitamente uma entrada de diretiva Permitir no Upstart.conf? E não há como fornecer mais granularidade do que uma configuração de todos os trabalhos ou nenhum no arquivo de configuração?com.ubuntu.Upstart0_6.<JOB>
parte) no Upstart.conf. Dependendo das suas necessidades, pode ser mais simples criar esse tipo de script para ele, em vez de escrever políticas dbus e reiniciar o dbus etc. A política Dbus é obviamente a coisa "certa" a ser feita, mas, dependendo do caso, um script simples pode longo caminho com menos problemas.com.ubuntu.Upstart0_6.jobname
comosend_interface
a mesma mensagem de erro gerada anteriormente. Se eu estiver certo ao supor que a saída de erro contém as informações do sinal, parece que a interface ou o destino não refletem o serviço Upstart ao qual o sinal se refere. Acho que as informações de serviço são apenas argumentos na mensagem de chamada do método D-Bus e não tenho certeza se posso editar a política do D-Bus para o Upstart para tomar decisões com base nos valores do argumento.sudo jobname.sh start
, para que o Upstart veja a solicitação como vinda doroot
usuário. Estou fazendo um esforço para tentar fazer isso. esse é o caminho "certo" (e, portanto, o afastamento dos scripts do Sys-V em primeiro lugar), então eu gostaria que isso funcionasse através de uma política D-Bus ou alguma outra opção de configuração Upstart, mas se não puder fazer isso funcionar, vou aceitar esta resposta."$1"
. Com seu[ "$1" = "start" -o "$1" = "stop" ]
teste eu acredito que é seguro, mas não indicada$1
expansão em uma corrida de script como root é apenas hábito saudável (a menos repartição de palavras é deliberadamente desejado) ...Como apontado acima, o dbus daemon possui um arquivo de configuração que o especializa para uma aplicação específica.
O arquivo de configuração também estabelece limites de recursos, parâmetros de segurança e assim por diante.
Para detalhes, consulte dbus-daemon-1 (1) - página de manual do Linux
Para permitir que um grupo inicie / pare tarefas Upstart, adicione a seguinte política ao /etc/dbus-1/system.d/Upstart.conf
Você deve considerar as implicações de segurança dessa política antes de alterar a política padrão. Os membros do YourGroupName poderão iniciar / parar todos os trabalhos Upstart.
fonte
start: You do not have permission to modify job: jobname
quando tentei iniciar o serviço.