我有一个在Linux移动设备上运行的用户级C ++测试应用程序。其中一项测试涉及启用/禁用打印机纸张传感器,该传感器需要在设备文件上写入root权限。有没有办法授予我的应用程序这种特权?如果没有,是否有解决方法?
答案 0 :(得分:5)
这样做,
作为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
也应该有用。
答案 1 :(得分:2)
您可以设置程序setuid root,这意味着即使用户运行它也始终以root身份运行。一旦完成需要root访问的必要操作,这通常需要特别注意删除程序内的权限。
答案 2 :(得分:1)
你也可以有一个帮助程序,它本身就是setuid root -or,具有适当的功能,或者通过sudo
启动 - 它与打印机通信。你的主要应用程序是fork&执行该程序并通过管道与它通信,因此它本身不应该以root身份运行。
辅助程序将是一个简单的可执行程序(具有适当的功能),它只能由您的主应用程序启动(而不是由用户直接启动),并通过管道或程序参数等与它通信。
许多图形管理程序同样完成:图形部分是与管理部分分离的程序,它们进行适当的通信。只有管理程序(通常是现有的命令行程序,如adduser
)才需要特殊权限。
答案 3 :(得分:-2)
你应该明确地试图避免以“root”身份运行你的程序,因为这不仅允许你的程序读/写/ dev / sensordevice,而且它将允许访问你系统上的几乎所有东西(包括完全的能力)砖吧)
因此,您应该尝试使用适当的组添加对所需资源的细粒度访问,并确保您的设备文件授予您的组写访问权。 请参阅(例如)udev,了解如何编写正确的udev规则,授予特定设备对给定组的写访问权。