Permitir que o grupo não-sudo controle o trabalho do Upstart

11

Estou tentando configurar uma tarefa do Upstart para ser executada na inicialização do sistema e que também pode ser iniciada / interrompida por membros de um grupo diferente de sudo . Com uma versão anterior, usei update-rc.d e scripts armazenados em /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.

Eu 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")

Por mais que eu saiba, é 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. Eu não consegui realmente encontrar nenhuma informação sobre como editar esse arquivo para dar a um grupo permissão para acessar um serviço específico - existe tal opção? Existe uma maneira de editar o arquivo Sudoers para que eu possa executar o trabalho sem editar o arquivo de configuração? Eu estou melhor apenas seguindo a versão anterior?

    
por Angle O'Saxon 17.12.2012 / 05:02

4 respostas

7

Você pode começar descobrindo onde a configuração do D-Bus específica para o Upstart é mantida. Veja que destination="com.ubuntu.Upstart" snippet da mensagem de erro? Agora tente grep na pasta com os arquivos de configuração do D-Bus:

vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1
/etc/dbus-1/system.d/Upstart.conf:    <allow own="com.ubuntu.Upstart" />
[...skipped...]

Esse arquivo Upstart.conf tem alguns exemplos de políticas. Eu acho que você poderia tentar descobrir o formato de uma política deles. Em seguida, tente permitir ao usuário específico apenas as ações necessárias. Por exemplo, como em:

<policy user="pope_benedict">
  <allow send_destination="com.ubuntu.Upstart"
         send_interface="com.ubuntu.Upstart0_6.Job"
         send_member="Start"/>
</policy>

Isso deve permitir que o usuário pope_benedict inicie esse trabalho.

Observe que os valores dos atributos da política 'allow' estão listados na sua mensagem de erro original.

    
por Iuliu Pascaru 25.12.2012 / 16:08
7

Estou usando pessoalmente a seguinte linha no arquivo /etc/sudoers.d/jobname_myuser:

myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname

conforme descrito aqui: link

    
por Szymon Jeż 20.03.2014 / 15:00
2

Essa opção não existe no sudo.

A diferença entre os scripts Sysv e os arquivos de configuração Upstart é apenas isso: scripts Sysv são scripts, executáveis por direito próprio 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 apenas arquivos de configuração, não executáveis, então a execução do start (link simbólico para initctl ) é a coisa que o sudo permite. Seu problema aqui é permitir que as pessoas executem initctl para permitir que elas initctl de tudo.

A solução é simples se você se preocupa com um único trabalho. Faça um script, diga /usr/bin/jobname.sh com

#!/bin/sh
initctl  jobname

depois chmod 755 /usr/bin/jobname.sh e finalmente adicione esse executável ao seu arquivo sudoers:

%Group ALL = NOPASSWD: /usr/bin/jobname.sh

Dessa forma, todos podem chamar jobname.sh start ou jobname.sh stop para controlar esse trabalho específico. Você pode querer adicionar alguma verificação para permitir apenas os parâmetros start e stop , etc.

    
por Tuminoid 20.12.2012 / 07:48
0

Como apontado acima, o daemon dbus possui um arquivo de configuração que o especializa para um aplicativo específico.

ls /etc/dbus-1/system.d/
avahi-dbus.conf
bluetooth.conf
...
Upstart.conf
wpa_supplicant.con

O arquivo de configuração também estabelece limites de recursos, parâmetros de segurança e assim por diante.

Para detalhes, veja dbus-daemon-1 (1) - Página man do Linux

Para permitir que um grupo inicie / pare os trabalhos do Upstart, adicione a seguinte política ao /etc/dbus-1/system.d/Upstart.conf

  <policy group="YourGroupName">
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Start" />
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Stop" />
  </policy>

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 trabalhos de arranque.

    
por Goran Miskovic 08.01.2013 / 08:15