Доступ до / dev / ttyUSB0 та sudo


8

Це моє перше питання тут.

Я запускаю Ubuntu 12.04 і маю додаток, що отримує доступ до порту USB комп'ютера. Моє ім'я користувача Ubuntu - це gadu . До сьогодні я завжди використовував таку команду:

sudo ./gadumaster

і ввів мій пароль (gadumaster - це програма, що отримує доступ до USB). Ця команда працювала, а також заклик до перезавантаження системної функції (), що використовується для перезавантаження мого ноутбука, коли виникли певні зовнішні умови з USB.

Сьогодні мені довелося змінити речі, тому ця програма запускається автоматично після запуску ноутбука. Тому я підготував файл сценарію та шукав спосіб передачі пароля до сценарію. Прочитавши кілька статей, я вирішив дозволити користувачеві доступ до USB, додавши його до діалогової групи:

sudo adduser gadu dialout

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

./gadumaster

Це було чудово, але мені потрібен спосіб включити також функцію перезавантаження () . Яке мене здивувало, коли я зрозумів, що наступна команда більше не працює:

судо ./gadumaster

Так, виконання програми з sudo дає мені помилку "Дозвіл відхилено" при підключенні до USB! Зауважте, що без судо це працює!

Спробував видалити мого користувача з групи діалотів:

sudo deluser gadu dialout

Після перезавантаження я потрапив у ситуацію, що як із судо, так і без команд судо не працюють! Навіть перезавантаження () функція не працює ні в одній ситуації.

Чи хтось може описати, що не так у моєму 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
CheddieMerai, це призвело мене до резолюції! виконуваний gadumaster показаний у команді ls білим кольором на червоному тлі. Відповідно до документації, цей файл був "setuid (u + s)". Після того як я видалив його і знову створив свою програму (файл знову відображався зеленим кольором), я міг як запустити його, так і без судо . Дякую!
niki kal

1
спробуйте це посилання
Lety

3
@nikikal, якщо ви знайшли рішення, я можу запропонувати поставити запитання на відповідь та позначити його як прийняте для всіх, хто стикається з цим питанням?
Мітч

Відповіді:


2

Як запропонував CheddieMerai , використання ls -l gadumasterможе сказати вам, що ви встановили неправильні дозволи файлів. Це вже не проблема з USB-підключенням.

Ви можете вирішити це шляхом відновлення програми або змінивши дозволи файлу через chmod 775 gadumaster(або подібні) та / або chown $USER gadumaster(ви можете замінити $ USER на користувача, який повинен "володіти" файлом).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.