
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 repetierHost
requer 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/ttyACM0
a permissão flags rw-rw-rw-
e executá-lo com meu usuário normal, funciona.
(Por que) minha permissão através do uucp
grupo 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 uucp
grupo, como posso tornar persistente a alteração nos sinalizadores de permissão?
Responder1
Eu definiria o grupo do repetierHost
aplicativo uucp
e 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.sh
e escrever um pequeno wrapper de programação C repetierHost
que chamerepetierHost.sh
Por exemplo:
#include <stdlib.h>
int
main(int argc, char *argv[])
{
system("/path/to/repetierHost.sh");
}
Responder2
Eu encontrei osg
comando, 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.