Acceso a / dev / ttyUSB0 y sudo

8

Esta es mi primera pregunta aquí.

Estoy ejecutando Ubuntu 12.04 y tengo una aplicación que accede al puerto USB de la computadora. Mi nombre de usuario de Ubuntu es gadu . Hasta hoy, siempre he usado el siguiente comando:

sudo ./gadumaster

e ingresé mi contraseña (gadumaster es la aplicación que accede al USB). Este comando estaba funcionando, así como una llamada al reinicio de la función del sistema () utilizada para reiniciar mi computadora portátil cuando se produjo cierta condición externa del USB.

Hoy tuve que cambiar las cosas para que esta aplicación se ejecute automáticamente después de que se inicia la computadora portátil. Por lo tanto, preparé un archivo de script y busqué una manera de pasar la contraseña al script. Después de leer algunos artículos, decidí permitir el acceso a USB para mi usuario agregándolo al grupo de marcado :

sudo adduser gadu dialout

Después de reiniciar pude iniciar mi aplicación simplemente escribiendo:

./gadumaster

Esto fue excelente, pero necesitaba una forma de habilitar también la función reboot () . Cuál fue mi sorpresa cuando descubrí que el siguiente comando ya no funciona:

sudo ./gadumaster

Sí, ejecutar la aplicación con sudo me da el error "Permiso denegado" al conectarme a USB. Tenga en cuenta que sin sudo funciona!

Intenté eliminar a mi usuario del grupo de marcado:

sudo deluser gadu dialout

¡Después de reiniciar me metí en una situación en la que tanto con sudo como sin comandos de sudo no funcionan! Incluso la función reboot () no funciona en ninguna de las dos situaciones.

¿Alguien podría describir lo que está mal con mi ubuntu? Muchas gracias de antemano.

Archivo / etc / sudoers :

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

El directorio /etc/sudoers.d contiene solo un archivo README.

El error que se muestra es:

OpenComm () falló: permiso denegado.

impreso a través del siguiente fragmento de código - parte de la aplicación gadumaster (ver función perror ()):

bool SerialComm::OpenComm(const char* pszCommport, int nBaudRate, eParity Parity, eStopbits Stopbits)
{
// pszCcommport: /dev/ttyUSB0
m_fdSerial = open(pszCommport, O_RDWR | O_NOCTTY | O_NDELAY);

if(m_fdSerial < 1)
{
    m_fdSerial = 0;
    perror("OpenComm() failed: ");
    return false;
}

fcntl(m_fdSerial, F_SETFL, 0);

if(nBaudRate == 9600)
    nBaudRate = B9600;
else if(nBaudRate == 19200)
    nBaudRate = B19200;
else if(nBaudRate == 38400)
    nBaudRate = B38400;
else
{
    // OpenComm(): Unsupported baudrate!
    return false;
}

// setting baud rates and stuff
struct termios options;
tcgetattr(m_fdSerial, &options);
m_OriginalOptions = options;

cfsetispeed(&options, nBaudRate);
cfsetospeed(&options, nBaudRate);
options.c_cflag |= (CLOCAL | CREAD);

// next 4 lines setting 8N2
options.c_cflag &= ~PARENB;
options.c_cflag |= CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;

// raw input
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

// disable software flow control; disable NL->CR conversion; enable marking of Frame/Parity errors
options.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL | PARMRK);

options.c_oflag &= ~(OPOST | ONLCR);

tcsetattr(m_fdSerial, TCSANOW, &options);
tcsetattr(m_fdSerial, TCSAFLUSH, &options);

//required to make flush work, for some reason
sleep(2);
tcflush(m_fdSerial, TCIOFLUSH);

return true;
}

NOTA: El misterio es por qué sudo ./gadumaster ya no funciona. ¿Qué podría ser que no se otorgue permiso a / dev / ttyUSB0 para superusuario?

niki kal
fuente
¿Podría publicar: /etc/sudoerscontenido del archivo, exactamente el error que recibió y la secuencia de comandos de gadumaster?
Lety
2
¿Cuál es la salida del ls -l gadumasterdirectorio de archivos?
1
CheddieMerai, esto me llevó a la resolución! el ejecutable de gadumaster se mostró en el comando ls de color blanco sobre fondo rojo. Según la documentación, este archivo era "setuid (u + s)". Después de que lo eliminé y construí mi aplicación nuevamente (el archivo se mostró nuevamente en color verde) pude ejecutarlo con y sin sudo . ¡Gracias!
niki kal
1
prueba este enlace
Lety
3
@nikikal si ha encontrado la solución, ¿puedo sugerirle que ponga la pregunta en una respuesta y la marque como aceptada, para cualquier otra persona que se encuentre con la pregunta?
Mitch

Respuestas:

2

Según lo sugerido por CheddieMerai , el uso ls -l gadumasterpuede decirle que establece permisos de archivo incorrectos. Esto ya no es un problema con la conexión USB.

Puede resolver esto reconstruyendo su aplicación o cambiando los permisos del archivo a través de chmod 775 gadumaster(o similar) y / o chown $USER gadumaster(puede reemplazar $ USER con el usuario que se supone que "posee" el archivo).

ApolloLV
fuente