
Tengo una impresora 3D con la que mi PC se puede comunicar a través de /dev/ttyACM0
:
crw-rw---- 1 root uucp 166, 0 16 nov 14:58 ttyACM0
La aplicación de impresión 3D repetierHost
requiere acceso de lectura/escritura a este dispositivo para poder funcionar. Si inicio 'ingenuamente' la aplicación sin ninguna preparación, la aplicación no funciona.
Si ejecuto la aplicación como root, funciona.
Si ejecuto la aplicación como un usuario normal con un grupo (suplementario) uucp
, todavía no funciona.
Si doy /dev/ttyACM0
los indicadores de permiso rw-rw-rw-
y lo ejecuto con mi usuario normal, funciona.
(¿Por qué) mi permiso a través del uucp
grupo no se transmite a la aplicación?
No me opondría a simplemente otorgar rw-rw-rw-
permisos al archivo, pero estos se restablecen cuando el dispositivo se desconecta y se vuelve a conectar. Si no puedo hacer que esto funcione a través del uucp
grupo, ¿cómo puedo hacer que el cambio en los indicadores de permiso sea persistente?
Respuesta1
Configuraría el grupo de la repetierHost
aplicación uucp
y luego configuraría el bit SGID (siempre que sea un binario real y no un script):
chgrp uucp repetierHost
chmod g+s repetierHost
Si repetierHost es un script, podría considerar moverlo repetierHost.sh
y escribir un pequeño contenedor de programación en C repetierHost
que llamerepetierHost.sh
P.ej:
#include <stdlib.h>
int
main(int argc, char *argv[])
{
system("/path/to/repetierHost.sh");
}
Respuesta2
Encontré elsg
comando, que parece ser exactamente lo que necesitaba:
sg- ejecutar el comando como ID de grupo diferente
Entonces simplemente escribo un contenedor mínimo de la siguiente manera:
#!/bin/bash
sg uucp /usr/bin/repetierHost.sh
Esto funciona perfectamente.