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

Linux - What resources require raised privileges C/C++ programming?

本文关键字:权限 C++ 编程 资源 Linux-      更新时间:2023-10-16

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

我的问题是,由于我在书或互联网上找不到任何东西,是否有一个全面的系统调用列表,需要root权限才能访问的资源?我知道我正在使用的资源需要提升的权限,因为我可以通过使用/不使用为给定可执行文件设置的setuid位进行调试来验证这一点,但我只是想知道是否有一个已编译的列表列出了您何时不需要提升的特权来访问资源?

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

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

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

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

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

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

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

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