Por que o Upstart precisa de 'setgid' quando tenho 'setuid' e o usuário é um membro do grupo?

7

Estou tentando configurar o Upstart para executar um pequeno utilitário que precisa acessar um tty como um daemon do sistema. Quando executado a partir da linha de comando, o utilitário permanece em primeiro plano e não sai até um Ctrl + C; Portanto, omiti a estrofe expect e o Upstart está rastreando corretamente o PID. Eu também criei uma conta sem privilégios para o daemon usando adduser --system --no-create-home --disabled-login avrlirc .

No meu sistema, o tty que o utilitário precisa acessar é instalado como:

crw-rw----   1 root dialout 166,   0 May 24 19:25 ttyACM0

Então, adicionei o usuário avrlirc (criado acima) ao grupo dialout . Quando executo o utilitário como avrlirc , tudo funciona conforme o esperado. Adicionei a sub-rotina setuid avrlirc ao arquivo de configuração Upstart e a tarefa falha com "cannot open tty".

Se eu omitir a sub-rotina setuid , isso funcionará (por isso é provável que seja uma permissão). Se eu adicionar a sub-rotina setgid dialout ao lado de setuid , também funcionará.

Então, por que preciso de setgid quando já tenho setuid e o usuário é membro do grupo apropriado? Por que isso não é suficiente?

Para referência, o arquivo de configuração do trabalho Upstart é:

start on runlevel [2345]
stop on runlevel [016]
console log
setuid avrlirc
setgid dialout
exec /usr/local/bin/avrlirc2udp -f -H -h <IP_ADDRESS> -t /dev/ttyACM0

Em que <IP_ADDRESS> é o endereço IPv4 da caixa local e dentro de 192.168.0.0/16.

    
por Calrion 25.05.2012 / 04:59

1 resposta

7

setuid não define grupos suplementares, apenas grupo primário. Veja o link Upstart .

Para verificar o caso, você pode verificar grep Gid /proc/YOURPID/status vs id YOURUSER .

    
por Tuminoid 28.05.2012 / 13:44

Tags