เข้าถึง / dev / ttyUSB0 และ sudo


8

นี่เป็นคำถามแรกของฉันที่นี่

ฉันใช้ Ubuntu 12.04 และมีแอปพลิเคชันที่เข้าถึงพอร์ต USB ของคอมพิวเตอร์ ชื่อผู้ใช้อูบุนตูของฉันคือgadu จนถึงวันนี้ฉันได้ใช้คำสั่งต่อไปนี้เสมอ:

sudo ./gadumaster

และป้อนรหัสผ่านของฉัน (gadumaster เป็นแอปพลิเคชันที่เข้าถึง USB) คำสั่งนี้ใช้งานได้เช่นเดียวกับการเรียกใช้ฟังก์ชั่นการรีบูตระบบ () ที่ใช้ในการรีสตาร์ทแล็ปท็อปของฉันเมื่อเกิดสภาวะภายนอกจาก USB เกิดขึ้น

วันนี้ฉันต้องเปลี่ยนสิ่งต่าง ๆ เพื่อให้แอปพลิเคชันนี้ทำงานโดยอัตโนมัติหลังจากแล็ปท็อปเริ่มทำงาน ดังนั้นฉันจึงเตรียมไฟล์สคริปต์และค้นหาวิธีการส่งรหัสผ่านไปยังสคริปต์ หลังจากที่ได้อ่านบทความบางฉันตัดสินใจที่จะอนุญาตให้เข้าถึง USB สำหรับผู้ใช้ของฉันโดยเพิ่มdialoutกลุ่ม:

sudo adduser gadu dialout

หลังจากรีบูตเครื่องฉันสามารถเริ่มต้นแอปพลิเคชันของฉันได้โดยพิมพ์เพียง:

./gadumaster

สิ่งนี้ยอดเยี่ยม แต่ฉันต้องการวิธีเปิดใช้งานฟังก์ชั่นรีบูต () ฉันประหลาดใจเมื่อพบว่าคำสั่งต่อไปนี้ไม่ทำงานอีกต่อไป:

sudo ./gadumaster

ใช่การใช้งานแอพพลิเคชั่นด้วยsudoทำให้ฉันเกิดข้อผิดพลาด "ปฏิเสธสิทธิ์" เมื่อเชื่อมต่อกับ USB! ทราบว่าไม่มี sudo มันใช้งานได้!

พยายามลบผู้ใช้ของฉันออกจากกลุ่มการโทรออก:

sudo deluser gadu dialout

หลังจากรีบูตเครื่องฉันได้เข้าสู่สถานการณ์ที่ทั้งคำสั่งsudoและไม่มีคำสั่งsudoไม่ทำงาน! แม้ฟังก์ชั่นการรีบูต ()จะไม่ทำงานในทุกสถานการณ์

ใครสามารถอธิบายสิ่งที่ผิดกับอูบุนตูของฉันได้อย่างไร ขอบคุณมากล่วงหน้า

ไฟล์ / 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 สำหรับ superuser?


คุณสามารถโพสต์: /etc/sudoersเนื้อหาไฟล์ข้อผิดพลาดที่คุณได้รับและสคริปต์ gadumaster ได้หรือไม่
Lety

2
ผลลัพธ์ของอะไรls -l gadumasterในไดเรกทอรีไฟล์?

1
CheddieMerai นี่นำฉันไปสู่การแก้ไข! gadumaster ที่ปฏิบัติการได้ถูกแสดงในคำสั่งlsสีขาวบนพื้นหลังสีแดง ไฟล์นี้เป็น "setuid (u + s)" หลังจากที่ฉันลบมันและสร้างโปรแกรมของฉันอีกครั้ง (ไฟล์ถูกแสดงอีกครั้งในสีเขียว) ฉันก็สามารถที่ทั้งสองจะรันที่มีและไม่มีsudo ขอบคุณ!
niki kal

1
ลองลิงค์นี้
Lety

3
@nikikal หากคุณพบวิธีแก้ปัญหาฉันขอแนะนำให้ใส่คำถามลงในคำตอบและทำเครื่องหมายว่ายอมรับได้หรือไม่สำหรับคนอื่น ๆ ที่เจอคำถาม
มิทช์

คำตอบ:


2

ตามที่CheddieMeraiแนะนำการใช้ls -l gadumasterอาจบอกคุณว่าคุณตั้งค่าการอนุญาตไฟล์ไม่ถูกต้อง นี่ไม่ใช่ปัญหากับการเชื่อมต่อ USB อีกต่อไป

คุณสามารถแก้ไขปัญหานี้ได้โดยการสร้างแอปพลิเคชันของคุณใหม่หรือเปลี่ยนการอนุญาตไฟล์ผ่านchmod 775 gadumaster(หรือคล้ายกัน) และ / หรือchown $USER gadumaster(คุณสามารถแทนที่ $ USER ด้วยผู้ใช้ที่ควรจะ "เป็นเจ้าของไฟล์")

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.