c++ - 赋予可执行文件比运行用户更多的权限

标签 c++ linux beagleboneblack

我有一个小型 C++ 应用程序,用于打开和关闭在 Debian 9.2 上运行的 BeagleBone Black 开发板的灯。

它通过更新文本文件来做到这一点。

// Turn light on
fs.open("/sys/class/leds/beaglebone:green:usr0", std::fstream::out);
fs << "1";
fs.close();

如果我以标准用户身份运行该程序,它可以正常运行,但所有指示灯都没有变化。

如果我使用 sudo 运行程序,一切正常,灯亮。 我猜这是因为这些文件需要更高的访问权限。

我对 Linux 权限不是很熟悉,但有没有办法允许您的程序访问用户无法访问的文件?

最佳答案

仔细阅读setuid关于credentials(7) (和 execve(2) 是程序的启动方式)。但要小心 vulnerabilities .

阅读Advanced Linux Programming (可免费下载,但有点旧)或一些关于 Linux 编程的新书。阅读intro(2)syscalls(2) .

您还可以阅读 Operating Systems: Three Easy Pieces (可免费下载)以了解有关操作系统的更多信息。

您可以使您的可执行文件 setuid(在适当的 chown 之后使用 chmod u+s)并调用 小心 setreuid(2)在适当的地方。这就是 sudosu 等程序的工作方式(它们都是 setuid)。有时您可以只使用组权限(因此仅限 setgid)。

但要小心,此类程序中的错误可能会打开一个巨大的安全漏洞。因此,保持 setuid 程序非常小并让其他人审查它们的代码是明智的。一种可能的方法是编写一个非常小的 setuid 可执行文件来做你奇怪的事情(例如只闪烁 LED)并与越来越大的普通程序(例如提供图形用户界面)。

也许您可以通过创建组 led 并授予组对 /sys/class/leds/beaglebone:green:usr0 的写入权限来配置您的系统,并且仅使用 setgid技术。

关于c++ - 赋予可执行文件比运行用户更多的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47446847/

相关文章:

linux - 比格骨黑;错误的 SPI 频率

c++ - 仅适用于 .NET 的 Windows API W7 JumpList?

c++ - 带有 std::regex 的巨大程序大小 C++

c++ - 错误 : No instance of constructor matches the argument list

c++ - 如何将 std::map 与 boost::phoenix 一起使用?

使用 Beaglebone Black Angstrom 通过半双工 RS-485 分线板实现自动 RTS 的 Python PySerial

linux - 从 Go 访问 Linux 网络 API

c - 套接字的所有操作都需要检查 EINTR 吗?

linux - 检查脚本命令中的错误

c - 如何解决localtime_r时区段错误?