C 是否有允许我的应用程序具有root权限的系统函数?

C 是否有允许我的应用程序具有root权限的系统函数?,c,linux,embedded,serial-port,root,C,Linux,Embedded,Serial Port,Root,我有一个在嵌入式系统上运行的应用程序,它在启动时自动运行。因为有些功能涉及到对串行端口的读写,所以我要求软件具有root权限。在我的桌面上,这没有问题,因为我可以像sudo那样运行程序,而且很好。在我的嵌入式设备上,我无法做到这一点,所以我希望有一些linux系统功能,允许代码不以root身份运行,但可以拥有root权限来访问串行端口,而不是需要的权限。我意识到,从安全角度来看,这可能不是一个好主意,但由于它位于嵌入式设备上,我别无选择。您是否考虑过只更改串行端口设备节点的权限,以便您的应用程序

我有一个在嵌入式系统上运行的应用程序,它在启动时自动运行。因为有些功能涉及到对串行端口的读写,所以我要求软件具有root权限。在我的桌面上,这没有问题,因为我可以像
sudo
那样运行程序,而且很好。在我的嵌入式设备上,我无法做到这一点,所以我希望有一些linux系统功能,允许代码不以root身份运行,但可以拥有root权限来访问串行端口,而不是需要的权限。我意识到,从安全角度来看,这可能不是一个好主意,但由于它位于嵌入式设备上,我别无选择。

您是否考虑过只更改串行端口设备节点的权限,以便您的应用程序可以访问它

例如,要允许每个应用程序访问
/dev/ttyS0
串行端口:

chmod a+rw /dev/ttyS0
为了提供更细粒度的控制,您可以创建单独的用户组和
chgrp
串行端口设备节点:

chgrp serial /dev/ttyS0
chmod 0660 /dev/ttyS0
chown appuser /dev/ttyS0
chmod 0600 /dev/ttyS0
之后,您只需确保应用程序运行的用户与
serial
用户组中的用户相同

或者,您甚至可以让应用程序用户成为设备节点的唯一所有者:

chgrp serial /dev/ttyS0
chmod 0660 /dev/ttyS0
chown appuser /dev/ttyS0
chmod 0600 /dev/ttyS0

仅仅为了访问设备节点而要求root权限不是正确的方法…

您可以了解更多关于setuid可执行文件的信息…这似乎是一种更明智的方法。谢谢你的回答。