我有一个Linux移动设备上运行的用户级C ++测试应用程序。 一个测试涉及启用/禁用这需要根特权在设备文件写入打印机纸传感器。 有没有一种方法,以满足我的应用程序,一种特权? 如果没有,是否有一个解决方法吗?
Answer 1:
这将做,
作为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
应该工作了。
其他选项值得探讨: setcap(8)
好指南这里 )和sudo(8)
Answer 2:
您可以设置程序setuid root的,这意味着即使用户运行它总是以root身份运行。 这通常需要特别小心,一旦需要root权限必要的行动完成砸里面的程序权限。
Answer 3:
你也可以有一个辅助程序,本身setuid root的-或者用适当的能力,或启动直通sudo
-这与打印机进行通信。 你的主要应用程序将餐桌和exec的那个节目和通管道与它进行通信,所以它不应该是本身以root身份运行。
助手程序将是一个简单的可执行文件(用适当的能力),这将只能通过主应用程序(用户不能直接)启动和通管或程序参数等与它进行通信
很多图形化的管理程序照样:图形部分是从管理部分离的程序,以及他们适当的沟通。 只有行政程序(如一般现有的命令行程序adduser
)需要特殊的特权。
Answer 4:
你应该definitey尽量避免运行程序为“根”,因为这不仅可以让你的程序来读/写的/ dev / sensordevice但它会授权访问您的系统上几乎所有(包括能力完全砖吧)
因此,你应该尝试的细粒度访问添加到你需要的的ressource,使用适当的群体,并确保你的设备文件授予您的组写访问。 见(例如) 的udev如何写一个适当的udev规则,即授予写某个设备访问给定组。