【问题标题】:How do I grant root access to a user application?如何授予用户应用程序的 root 访问权限?
【发布时间】:2012-05-15 14:39:53
【问题描述】:

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

【问题讨论】:

    标签: c++ linux root


    【解决方案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)(很好的指南here)和sudo(8)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您也可以有一个帮助程序,它本身是 setuid root - 或具有适当的功能,或通过sudo- 启动,它与打印机通信。您的主应用程序将分叉并执行该程序并通过管道与其通信,因此它本身不应以 root 身份运行。

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

        很多图形化的管理程序也是这样做的:图形部分是一个与管理部分分离的程序,它们之间可以正常通信。只有管​​理程序(通常是现有的命令行程序,如adduser)需要特殊权限。

        【讨论】:

        • 辅助程序是什么意思?你能给我一个简单的例子吗? :D
        【解决方案4】:

        您绝对应该尽量避免以“root”身份运行您的程序,因为这不仅会允许您的程序读/写 /dev/sensordevice,而且还会授予对系统上几乎所有内容的访问权限(包括完全砖)

        因此,您应该尝试添加对所需资源的细粒度访问,使用适当的组并确保您的设备文件授予您的组写入访问权限。 请参阅(例如)udev,了解如何编写适当的 udev 规则,该规则将特定设备的写入权限授予给定组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-06
          • 1970-01-01
          • 2012-04-29
          • 2012-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-27
          相关资源
          最近更新 更多