Zugriff auf / dev / ttyUSB0 und sudo

8

Dies ist meine erste Frage hier.

Ich verwende Ubuntu 12.04 und habe eine Anwendung, die auf den USB-Anschluss des Computers zugreift. Mein Ubuntu-Benutzername ist gadu . Bis heute habe ich immer den folgenden Befehl verwendet:

sudo ./gadumaster

und mein Passwort eingegeben (Gadumaster ist die Anwendung, die auf den USB zugreift). Dieser Befehl funktionierte ebenso wie ein Aufruf der Systemfunktion reboot () , mit dem mein Laptop neu gestartet wurde, wenn ein bestimmter externer Zustand von USB auftrat.

Heute musste ich etwas ändern, damit diese Anwendung nach dem Start des Laptops automatisch ausgeführt wird. Deshalb habe ich eine Skriptdatei vorbereitet und nach einer Möglichkeit gesucht, das Passwort an das Skript zu übergeben. Nachdem ich einige Artikel gelesen hatte, entschied ich mich, meinem Benutzer den Zugriff auf USB zu erlauben, indem ich ihn der Dialout- Gruppe hinzufügte :

sudo adduser gadu dialout

Nach dem Neustart konnte ich meine Anwendung durch einfaches Eingeben starten:

./gadumaster

Das war ausgezeichnet, aber ich brauchte eine Möglichkeit, um auch die Funktion reboot () zu aktivieren . Was war meine Überraschung, als ich herausfand, dass der folgende Befehl nicht mehr funktioniert:

sudo ./gadumaster

Ja, wenn ich die Anwendung mit sudo ausführe, wird beim Anschließen an USB der Fehler "Berechtigung verweigert" angezeigt! Beachten Sie, dass es ohne Sudo funktioniert!

Es wurde versucht, meinen Benutzer aus der Einwahlgruppe zu entfernen:

Sudo Deluser Gadu Dialout

Nach dem Neustart kam ich in die Situation, dass sowohl mit sudo als auch ohne sudo Befehle nicht funktionieren! Selbst die Funktion reboot () funktioniert in keiner Situation.

Könnte jemand beschreiben, was mit meinem Ubuntu nicht stimmt? Vielen Dank im Voraus.

/ etc / sudoers Datei:

#
# 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

Das Verzeichnis /etc/sudoers.d enthält nur eine README-Datei.

Der angezeigte Fehler ist:

OpenComm () fehlgeschlagen: Berechtigung verweigert.

Gedruckt über folgendes Code-Snippet - Teil der Gadumaster-App (siehe Funktion 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;
}

HINWEIS: Das Rätsel ist, warum sudo ./gadumaster nicht mehr funktioniert. Was könnte sein, dass / dev / ttyUSB0 keine Berechtigung für den Superuser erteilt wird?

niki kal
quelle
Könnten Sie /etc/sudoersFolgendes posten: Dateiinhalt, genau den Fehler, den Sie erhalten haben, und Gadumaster-Skript?
Lety
2
Was ist die Ausgabe ls -l gadumasterim Dateiverzeichnis?
1
CheddieMerai, das hat mich zu Resolution geführt! Die ausführbare Datei von Gadumaster wurde in ls Befehl weiß über rotem Hintergrund angezeigt . Laut Dokumentation war diese Datei "setuid (u + s)". Nachdem ich es gelöscht und meine Anwendung erneut erstellt hatte (die Datei wurde wieder in grüner Farbe angezeigt), konnte ich sie sowohl mit als auch ohne sudo ausführen . Vielen Dank!
Niki Kal
1
versuchen Sie diesen Link
Lety
3
@nikikal Wenn Sie die Lösung gefunden haben, kann ich vorschlagen, die Frage in eine Antwort zu setzen und als akzeptiert zu markieren, für alle anderen, die auf die Frage stoßen?
Mitch

Antworten:

2

Wie von CheddieMerai vorgeschlagen , ls -l gadumasterkann die Verwendung von Ihnen möglicherweise anzeigen , dass Sie falsche Dateiberechtigungen festgelegt haben. Dies ist kein Problem mehr mit der USB-Verbindung.

Sie können dies beheben, indem Sie Ihre Anwendung neu erstellen oder die Dateiberechtigungen über chmod 775 gadumaster(oder ähnliches) und / oder ändern chown $USER gadumaster(Sie können $ USER durch den Benutzer ersetzen, der die Datei "besitzen" soll).

ApolloLV
quelle