在我们的 Linux 机器中,我们有 USB -> 串行设备,它始终标识为
/dev/ttyACM0. 所以我写了一个应用程序,直到昨天,一切正常。但是突然(是的,在远程演示期间......)设备停止工作。经过快速研究,我发现连接更改为/dev/ttyACM1. 这有点不合时宜,但现在我遇到了一个问题 - 如何明确识别我的设备?例如,尽管 UUID/dev/sd**已更改,但可以使用 UUID 初始化存储驱动器。有没有办法为串行设备做到这一点?
现在我使用了一个愚蠢的解决方法:
for(int i = 0; i < 10; i ++)
{
m_port = std::string("/dev/ttyACM") + (char)('0' + i);
m_fd = open(m_port.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
}
Run Code Online (Sandbox Code Playgroud)
我们使用的设备的链接。
我正在开发使用 Unix 域套接字进行 IPC 的应用程序。据我所知,常见的方法是将套接字文件放入其中/var/run。我使用 Ubuntu 18.04,我看到这var/run是一个/run. 不幸的是,该文件夹只能访问root:
ls -Al /
drwxr-xr-x 27 root root 800 Apr 12 17:39 run
Run Code Online (Sandbox Code Playgroud)
因此,只有 root 拥有该文件夹的写入权限,这使得普通用户无法使用 Unix 域套接字。
首先我不明白为什么?以及如何为非 root 用户使用 Unix 域套接字?我当然可以使用主文件夹,但我更喜欢使用一些正确且常用的方法。
有没有办法在 Linux 中禁止从主目录执行文件?我的目标是保护我的系统免受恶意脚本等的侵害。当然,我可以使用 chmod for/home/user及其所有子目录删除执行位,但由于user是/home/user. 因此,我认为有关从启用执行bin,/usr/bin,usr/sbin只是并禁止从其他目录执行。我的系统是 Debian 8。