我有一个在linux移动设备上运行的用户级C++测试应用程序。其中一项测试涉及启用/禁用打印机纸张传感器,该传感器需要root权限才能写入设备文件。有没有办法授予我的应用程序这样的特权?如果没有,是否有解决方法?
发布于 2012-05-07 11:06:43
这样就可以了,
在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/devicefileprinter组的成员可以对设备进行读写操作,因此您只需将joe添加到printer组(并重新启动会话)。
gpasswd -a joe printer如果您需要调整devicefile权限,您可能需要编辑udev规则以使其成为永久权限。但是chmod也应该可以工作。
其他值得研究的选择:setcap(8) (很好的指南here)和sudo(8)。
发布于 2012-05-07 10:59:50
您可以设置程序的setuid root,这意味着即使由用户运行,它也将始终作为root运行。这通常需要特别注意,一旦完成了需要root访问权限的必要操作,就要删除程序内部的特权。
发布于 2012-05-07 12:54:30
您还可以有一个帮助程序,它本身设置了具有适当功能的根-or,或者通过sudo启动-它与打印机通信。您的主应用程序将派生和执行该程序,并通过管道与其通信,因此它本身不应该作为根用户运行。
助手程序将是一个简单的可执行文件(具有适当的功能),它只能由您的主应用程序启动(而不是直接由用户启动),并通过管道或程序参数等与其通信。
许多图形化管理程序也是这样做的:图形化部分是从管理部分分离出来的程序,它们之间进行适当的通信。只有管理程序(通常是现有的命令行程序,如adduser)需要特殊权限。
https://stackoverflow.com/questions/10476154
复制相似问题