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

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

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

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

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

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

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

Se eu der /dev/ttyACM0a permissão flags rw-rw-rw-e executá-lo com meu usuário normal, funciona.

(Por que) minha permissão através do uucpgrupo não repassa para o aplicativo?

Eu não me oporia a apenas conceder rw-rw-rw-permissões ao arquivo, mas elas são redefinidas quando o dispositivo é desconectado e reconectado. Se não consigo fazer isso funcionar por meio do uucpgrupo, como posso tornar persistente a alteração nos sinalizadores de permissão?

Responder1

Eu definiria o grupo do repetierHostaplicativo uucpe depois definiria o bit SGID (desde 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 movê-lo repetierHost.she escrever um pequeno wrapper de programação C repetierHostque chamerepetierHost.sh

Por exemplo:

#include <stdlib.h>

int 
main(int argc, char *argv[])
{
    system("/path/to/repetierHost.sh");
}

Responder2

Eu encontrei osgcomando, que parece ser exatamente o que eu precisava:

sg- execute o comando como ID de grupo diferente

Então, apenas escrevo um wrapper mínimo da seguinte maneira:

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

Isso funciona perfeitamente.

informação relacionada