Como executar um aplicativo com certas permissões de grupo?

4

Eu tenho uma impressora 3D, com a qual meu PC pode se comunicar por meio de /dev/ttyACM0 :

crw-rw---- 1 root uucp 166,  0 16 nov 14:58 ttyACM0

O aplicativo de impressão 3D repetierHost requer acesso de leitura / gravação a este dispositivo para funcionar. Se eu 'ingenuamente' iniciar o aplicativo sem qualquer preparação, o aplicativo não funciona.

Se eu executar o aplicativo como root, ele funcionará.

Se eu executar o aplicativo como um usuário normal com o grupo (suplementar) uucp , ele ainda não funcionará.

Se eu der /dev/ttyACM0 aos sinalizadores de permissão rw-rw-rw- e executá-lo com meu usuário normal, ele funcionará.

(Por que) minha permissão através do grupo uucp não passa para o aplicativo?

Eu não me oponho a fornecer apenas o arquivo rw-rw-rw- permissões, mas elas são redefinidas quando o dispositivo é desconectado e reconectado. Se eu não puder fazer isso funcionar através do grupo uucp , como posso fazer a alteração nos sinalizadores de permissão persistentes?

    
por mhelvens 16.11.2014 / 15:33

2 respostas

3

Gostaria de definir o grupo do aplicativo repetierHost como uucp e, em seguida, definir o bit SGID (contanto que seja um binário real e não um script):

chgrp uucp repetierHost
chmod g+s repetierHost

Se o repetierHost for um script, você pode considerar mover para repetierHost.sh e escrever um pequeno wrapper de programação C repetierHost que chama repetierHost.sh

Por exemplo:

#include <stdlib.h>

int 
main(int argc, char *argv[])
{
    system("/path/to/repetierHost.sh");
}
    
por 16.11.2014 / 16:28
0

Eu encontrei o comando sg , que parece ser exatamente o que eu precisava:

sg - execute command as different group ID

Por isso, acabei de escrever um wrapper mínimo da seguinte forma:

#!/bin/bash
sg uucp /usr/bin/repetierHost.sh

Isso funciona perfeitamente.

    
por 17.11.2014 / 13:33