如何授予用户应用程序的根访问权限?

我有一个在Linux移动设备上运行的用户级C ++testing应用程序。 其中一项testing涉及启用/禁用需要在设备文件上写入root特权的打印机纸张传感器。 有没有办法让我的应用程序有这种特权? 如果没有,有没有解决方法?

Solutions Collecting From Web of "如何授予用户应用程序的根访问权限?"

这会做,

作为root执行:

 chown -v root:root /path/to/yourapp chmod -v 4755 /path/to/yourapp 

或者可选地

 chmod -v u+s /path/to/yourapp 

或者可选地

 man chmod 

不适用于脚本 。 是的,你应该认真对待什么jdizzle说放弃不必要的特权。

解决此问题的另一种方法是使运行应用程序的用户成为拥有设备文件的组的成员。 例如,

 ls -la /dev/devicefile crw-rw---- 1 root printer 4, 0 may 6 10:56 /dev/devicefile 

printer组的成员可以读取和写入设备,所以您只需要将joe添加到printer组(并重新启动会话)。

 gpasswd -a joe printer 

如果您需要调整设备文件权限,则可能需要编辑udev规则以使其永久生效。 但是, chmod应该起作用。

其他值得研究的选项: setcap(8) (好的指导在这里 )和sudo(8)

您可以设置程序setuid root,这意味着即使在用户运行时它也将始终以root身份运行。 这通常需要特别小心,一旦完成需要根访问的必要操作,就会在程序内部放弃权限。

你也可以有一个帮助程序,本身setuid根或具有适当的功能,或启动通过sudo – 与打印机通信。 你的主应用程序将fork&exec那个程序并通过管道与它进行通信,所以它不应该以root身份运行。

助手程序将是一个简单的可执行文件(具有适当的功能),只能由主应用程序启动(不是由用户直接启动),并通过管道或程序参数与其通信。

许多图形管理程序也是这样做的:图形化的部分是一个与管理部分分离的程序,并且它们之间的通信是正确的。 只有管​​理程序(通常是像adduser这样的现有的命令行程序)需要特殊的权限。

你应该明确地尝试避免以“root”身份运行你的程序,因为这样不但可以让你的程序读/写/ dev / sensordevice,而且还可以访问你系统上几乎所有的东西(包括完全刷新它的能力)

因此,您应该尝试使用恰当的组来添加对所需资源的细粒度访问,并确保设备文件授予您的组写入权限。 请参阅(例如) udev关于如何编写一个适当的udev规则,该规则将特定设备的写入权限授予给定的组。