首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向用户应用程序授予root访问权限?

如何向用户应用程序授予root访问权限?
EN

Stack Overflow用户
提问于 2012-05-07 10:52:10
回答 4查看 10.4K关注 0票数 2

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-07 11:06:43

这样就可以了,

root执行时:

代码语言:javascript
复制
chown -v root:root /path/to/yourapp
chmod -v 4755 /path/to/yourapp    

或者另选地

代码语言:javascript
复制
chmod -v u+s /path/to/yourapp

或者另选地

代码语言:javascript
复制
man chmod

这将不能与脚本一起工作。是的,你应该认真对待jdizzle关于删除不必要的特权的说法。

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

代码语言:javascript
复制
ls -la /dev/devicefile
crw-rw---- 1 root printer 4, 0 may  6 10:56 /dev/devicefile

printer组的成员可以对设备进行读写操作,因此您只需将joe添加到printer组(并重新启动会话)。

代码语言:javascript
复制
gpasswd -a joe printer

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

其他值得研究的选择:setcap(8) (很好的指南here)和sudo(8)

票数 6
EN

Stack Overflow用户

发布于 2012-05-07 10:59:50

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

票数 2
EN

Stack Overflow用户

发布于 2012-05-07 12:54:30

您还可以有一个帮助程序,它本身设置了具有适当功能的根-or,或者通过sudo启动-它与打印机通信。您的主应用程序将派生和执行该程序,并通过管道与其通信,因此它本身不应该作为根用户运行。

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

许多图形化管理程序也是这样做的:图形化部分是从管理部分分离出来的程序,它们之间进行适当的通信。只有管理程序(通常是现有的命令行程序,如adduser)需要特殊权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10476154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档