Доступ к / dev / ttyUSB0 и sudo

8

Это мой первый вопрос здесь.

Я использую Ubuntu 12.04 и у меня есть приложение для доступа к USB-порту компьютера. Моё имя пользователя в Ubuntu - gadu . До сегодняшнего дня я всегда использовал следующую команду:

sudo ./gadumaster

и ввел мой пароль (gadumaster - это приложение, которое обращается к USB). Эта команда работала, а также вызывал системную функцию reboot (), которая использовалась для перезагрузки моего ноутбука при возникновении определенных внешних условий с USB.

Сегодня мне пришлось что-то изменить, чтобы это приложение запускалось автоматически после запуска ноутбука. Поэтому я подготовил файл сценария и искал способ передать пароль сценарию. Прочитав несколько статей, я решил разрешить доступ к USB для моего пользователя, добавив его в группу dialout :

sudo adduser gadu dialout

После перезагрузки я смог запустить свое приложение, просто набрав:

./gadumaster

Это было отлично, но мне нужен был способ включить функцию reboot () . Каково было мое удивление, когда я понял, что следующая команда больше не работает:

Судо ./gadumaster

Да, выполнение приложения с помощью sudo выдает ошибку «Отказано в доступе» при подключении к USB! Обратите внимание, что без sudo это работает!

Пытался удалить моего пользователя из группы дозвона:

дозвона в судо

После перезагрузки я попал в ситуацию, когда и с sudo, и без sudo команды не работают! Даже функция reboot () не работает ни в одной ситуации.

Кто-нибудь может описать, что не так с моей Ubuntu? Большое спасибо заранее.

Файл / 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

Каталог /etc/sudoers.d содержит только один файл README.

Показанная ошибка:

Сбой OpenComm (): в доступе отказано.

выводится через следующий фрагмент кода - часть приложения gadumaster (см. функцию 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;
}

ПРИМЕЧАНИЕ: загадка в том, почему sudo ./gadumaster больше не работает. Что может быть так, что никакое разрешение не предоставлено / dev / ttyUSB0 для суперпользователя?

Ники Кал
источник
Не могли бы вы опубликовать: /etc/sudoersсодержимое файла, именно ту ошибку, которую вы получили, и скрипт gadumaster?
Лети
2
что выводится ls -l gadumasterв каталоге файлов?
1
Чедди Мерай, это привело меня к Резолюции! исполняемый файл gadumaster был показан командой ls белым цветом на красном фоне. Согласно документации, этот файл был "setuid (u + s)". После того как я удалил его и снова собрал приложение (файл снова отображался зеленым цветом), я смог запустить его как с sudo, так и без него . Спасибо!
Ники Кал
1
попробуйте эту ссылку
Лети
3
@nikikal, если вы нашли решение, могу ли я предложить вопрос в ответ и пометить его как принятый для всех, кто сталкивается с вопросом?
Митч

Ответы:

2

Как рекомендует CheddieMerai , использование ls -l gadumasterможет сказать вам, что вы установили неправильные права доступа к файлу. Это больше не проблема с USB-соединением.

Вы можете решить эту проблему, перестроив свое приложение или изменив права доступа к файлам с помощью chmod 775 gadumaster(или аналогичного) и / или chown $USER gadumaster(вы можете заменить $ USER на пользователя, который должен «владеть» файлом).

ApolloLV
источник