我有一个在Linux移动设备上运行的用户级C++测试应用程序。其中一项测试涉及启用/禁用需要在设备文件上写入root权限的打印机纸张传感器。有没有办法让我的应用程序具有这种特权?如果没有,是否有解决方法?如何授予用户应用程序的根访问权限?
2
A
回答
3
这将做,
作为root
执行:
chown -v root:root /path/to/yourapp
chmod -v 4755 /path/to/yourapp
或替代地
chmod -v u+s /path/to/yourapp
或替代地
man chmod
这将不适用于脚本。是的,你应该认真对待什么jdizzle说关于放弃不必要的特权。
解决此问题的另一种方法是使运行应用程序的用户成为拥有设备文件的组的成员。例如,printer
组
ls -la /dev/devicefile
crw-rw---- 1 root printer 4, 0 may 6 10:56 /dev/devicefile
成员可以读取和写入设备,所以你只需要添加joe
到printer
组(并重新启动会话)。
gpasswd -a joe printer
如果需要调整设备文件的权限,你可能需要编辑udev规则,使之永久化。但chmod
也应该工作。
2
您可以设置程序setuid root,这意味着它即使在用户运行时也会始终以root身份运行。这通常需要特别小心,一旦完成需要根访问的必要操作,就会在程序内部放弃权限。
1
你也可以有一个帮助程序,本身setuid根或具有适当的功能,或开始通过sudo
- 与打印机通信。你的主应用程序将分支执行程序并通过管道与它通信,所以它不应该以root身份运行。
助手程序将是一个简单的可执行文件(用适当的能力),这将只能通过主应用程序(用户不能直接)启动和通管或程序参数与它通信等
一许多图形管理程序也是这样做的:图形化的部分是一个与管理部分分离的程序,并且它们适当地进行通信。只有管理程序(通常是现有的命令行程序adduser
)需要特殊权限。
-2
您应该明确地尝试避免以“root”身份运行程序,因为这不仅会让您的程序读取/写入/ dev/sensordevice,而且还会授予您系统中几乎所有内容的访问权限(包括完全砖它)
因此,你应该尝试添加到你需要的资源的细粒度访问,使用适当的组,并确保您的设备文件授予您的组写入权限。 参见(例如)udev关于如何编写适当的udev规则,该规则将特定设备的写入访问授予给定组。
相关问题
- 1. 授予iPhone应用程序根权限
- 2. 如何授予我的COM +应用程序访问权限?
- 3. 授予用户权限来访问表
- 4. 如何识别未授予应用程序访问权限的用户?
- 5. 授予用户访问权
- 6. 授予管理员访问Android应用程序的权限
- 7. 授予应用程序的root权限
- 8. 授予Android应用根权限
- 9. MySql授予用户权限
- 10. Oracle - 授予用户权限
- 11. 如何检查用户是否授予Facebook访问权限?
- 12. 授予用户创建应用程序角色的权限
- 13. 如何向用户授予权限
- 14. 如何授予用户权限
- 15. 如何将系统权限授予我的Android应用程序?
- 16. 如何为LDAP用户授予Collabnet SubVersion的用户访问权限
- 17. 如何为用户授予远程访问mysql服务器的权限?
- 18. 授予访问Outlook应用程序
- 19. 如何授予帐户访问证书的权限?
- 20. 用户如何授予我的应用users_posts权限?
- 21. 如何授权开发人员授予用户权限?
- 22. 授予用户访问签署文件的权限
- 23. winhttpcertcfg在Windows 7中授予对iiS用户的访问权限
- 24. 亚马逊IAM用户+授予对S3的访问权限
- 25. 授予用户访问特定/后续文章的权限?
- 26. AWS IAM授予用户只读特定VPC的访问权限
- 27. 授予MySQL用户有限权限
- 28. 如何在应用程序级别授予Super_user权限?
- 29. 授予从我的Rails应用程序访问Azure blob的权限
- 30. 授予数据库权限的不授予表的访问权限
帮助程序是什么意思?你能给我一个简单的例子吗? :D – Owen
在我编辑的答案中解释 –