【问题标题】:Best way elevate the privileges programmatically under different versions of Linux?在不同版本的 Linux 下以编程方式提升权限的最佳方法?
【发布时间】:2009-03-27 16:28:40
【问题描述】:

有一种标准方式(跨 Linux 发行版工作)来启动(从另一个应用程序)请求 root 密码以提升权限的进程?

我尝试使用 gksudo(默认安装在 ubuntu 中),但在其他发行版下(或在其他桌面管理器下)可能无法安装。

【问题讨论】:

  • 我可能会向“非编程相关”的人指出,linux/unix 的设计理念通常是编写非常小的单一用途组件,这些组件可以通过管道或套接字串在一起。正因为它不像 Windows 中那样是可链接的 API,所以它与 linux 中的编程有关。

标签: linux root


【解决方案1】:

我建议查看PolicyKit,这是大多数现代发行版用来实现此目的的工具。

【讨论】:

    【解决方案2】:

    这在任何地方都有效,但不缓存密码并要求 root 而不是用户密码(就像sudo 所做的那样):

    su - -c command
    

    编辑:不在 root 帐户被禁用的 ubuntu 上。可能你需要这样的东西:

    test -x /usr/bin/sudo && sudo command || su - -c command
    

    【讨论】:

    • su - 询问 root 密码并允许您执行任何操作,而 sudo 可以配置为询问用户密码并限制您可以执行的命令。
    • @vartec:最初的问题包括文本“要求 root 密码以提升权限”,这正是 su 所做的。
    • 不适用于像 Ubuntu 这样的发行版,不允许 root 以交互方式登录。
    【解决方案3】:

    唯一的默认设置是文本模式su。大多数发行版还安装了sudo

    现在,在基于 KDE 的发行版中,您将拥有 kdesu,而在基于 GNOME 的发行版中,它将是 gksugksudo。 Kerberized 域中的机器具有 ksu

    您可以尝试使用/etc/sysconfig/desktop 查看默认桌面。

    【讨论】:

      【解决方案4】:

      传统上,如果您的应用程序需要允许用户提升权限,它会安装自己的单一用途 setuid 可执行文件——单一用途意味着它执行所需的任务,而不是充当通用启动器.

      $ su -
      # cp `type -p id` /usr/local/bin/root-id
      # chown root:users /usr/local/bin/root-id
      # chmod 4750 /usr/local/bin/root-id
      $ /usr/local/bin/root-id
      ... euid=0(root) ...
      

      OTOH setuid 可执行文件也是安全漏洞的常见来源,因此请小心谨慎。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-13
        • 2012-02-13
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 2016-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多