c++ - Linux - 哪些资源需要提升权限的 C/C++ 编程?

标签 c++ linux debian privileges setuid

我正在开发一个守护进程和用户应用程序,它将通过 UNIX 域套接字与守护进程通信以发送命令、获取状态信息等。用户应用程序将由具有 setuid 的非根用户运行位设置,以便它具有有效的 uid root,这将允许它访问需要 root 权限的资源。大多数文件、套接字、设备(ttys 等)都需要 root 权限才能通过文件、ioctl 系统调用访问它们。我不想在运行时一直以提升的权限运行,因为它不安全并且不受欢迎。

我的问题是,由于我无法在书籍或互联网上找到任何内容,是否有系统调用的完整列表,需要 root 权限才能访问的资源?我知道我正在使用的资源需要提升权限,因为我可以通过调试为给定的可执行文件设置/不设置 setuid 位来验证这一点,但我只是好奇是否有一个编译列表概述了何时,何时不需要提升访问资源的权限?

最佳答案

ioctl 不需要提升权限本身。给定的设备可能仅限于特殊权限,但这并不意味着您的程序需要以 root 身份运行:

在传统的 linux 系统上,权限授权是通过文件权限处理的(主要是:组成员)。

考虑访问网络摄像头,显示为 /dev/video3

$ ls -l/dev/video3 crw-rw----+ 1 根视频 81, 0 Dec 2 09:21/dev/video3

因此此设备可以由 root 属于 video 组的任何用户读取/写入。

因此,如果想要控制 /dev/video3 的程序的用户是 video 组的成员就足够了。

注意:“用户”不一定是人类用户;它也可以是系统用户,其唯一目的是运行给定的守护进程。

如果这太粗糙(例如,您想要授予给定用户访问 /dev/video3不是 /dev/video0 ; 但默认情况下两者都可由 video 组写入),设置 udev 规则非常容易,这些规则将为单个设备授予更具体的权限。

关于c++ - Linux - 哪些资源需要提升权限的 C/C++ 编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034043/

相关文章:

c++ - 如果存储指针,std::list 是否比 std::vector 更好?

c++ - const_string 库问题

c++ - C++ 类中的内联规则是什么?

c++ - 如何最好地控制迭代方向?

c - 关于 Linux 中的错误编号

linux - Google Cloud Storage - GSUtil - 复制文件,跳过现有文件,不覆盖

linux - 无法在 Ubuntu 上的 Eclipse 中从 Java 加载 so 文件

linux - USB 网络共享在深度操作系统中不起作用

Laravel 、font-family 可在 Ubuntu 上运行,但不能在 Debian 上运行

java - 无法在 Linux 上加载 OpenCV - undefined symbol 错误