繁体   English   中英

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

[英]How do I grant root access to a user application?

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

这样就可以了

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

如果需要调整devicefile权限,则可能需要编辑udev规则以使其永久化。 但是chmod应该工作。

其他值得研究的选项: setcap(8)此处有个不错的指南)和sudo(8)

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

您也可以有一个帮助程序,它本身是setuid根-或具有适当的功能,或通过sudo启动-与打印机通信。 您的主应用程序将分叉并执行该程序,并通过管道与之通信,因此它本身不应以root身份运行。

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

许多图形管理程序也是这样完成的:图形部分是与管理部分分离的程序,它们可以适当地通信。 仅管理程序(通常是现有的命令行程序,如adduser )需要特殊特权。

您应该绝对避免以“ root”身份运行程序,因为这不仅将允许您的程序读取/写入/ dev / sensordevice,而且还将授予对系统上几乎所有内容的访问权限(包括完全将其砖化的能力)

因此,您应该尝试使用适当的组并仅对设备文件授予组的写访问权限,以仅对所需的资源添加细粒度的访问。 有关如何编写适当的udev规则的信息,请参见(例如) udev ,该规则将特定设备的写访问权限授予给定组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM