跳转至内容

以 root 权限运行 GUI 应用程序

来自 ArchWiki
(重定向自 Running X apps as root)
警告 以下所有方法都存在安全隐患,用户应知晓。正如 GNOME 开发者 Emmanuele Bassi 所述
[...] 没有任何真正、有据可查的技术原因表明任何人应该以 root 身份运行 GUI 应用程序。通过以管理员身份运行 GUI 应用程序,您实际上是在运行数百万行未经充分审核的代码,以获得提升的权限;您还在运行将触及您 $HOME 下文件并可能更改文件系统上所有权的代码;通过 IPC 连接到更多正在运行的代码,等等。
您正在打开一个巨大的、明显的安全漏洞 [...]。

如果可能,请避免以 root 身份运行图形应用程序,请参阅 #规避以 root 身份运行图形应用程序

规避以 root 身份运行图形应用程序

sudoedit

要以 root 身份编辑文件,请使用 sudoedit

GVFS

通过指定 URI 方案中的 admin 后端,可以访问特权文件和目录,例如:GVFS[1][2]

$ nautilus admin:///root/

或者

$ gedit admin:///etc/fstab
提示 也可以从应用程序的地址栏/文件选择器中完成此操作:例如,在 nautilusgedit 中,按 Ctrl+l,然后将 admin:// 方案添加到资源路径的前面。通过“其他位置”服务器地址栏也可以达到相同的效果。其他位置

Xorg

默认情况下,出于安全原因,root 无法连接到非 root 用户的 X 服务器。然而,有多种方法可以允许 root 这样做,如果需要的话。

以提升的权限在 X 下运行 GUI 应用程序的正确、推荐方法是创建 Polkit 策略,如这个论坛帖子所示。然而,这“只应用于遗留程序”,正如 pkexec(1) 提醒的那样。应用程序而应“将特权操作委托给一个可审计的、自包含的、最小的代码片段,该代码片段在执行了权限提升后运行,并在不再需要时被丢弃”[3]。这可能是上游项目的一个 bug 报告的主题。

一次性方法

这些方法将应用程序包装在一个提升框架中,并在应用程序退出后丢弃获取的特权。

$ kdesu application
$ sudo application
  • suxAUR(su 的包装器,会传输您的 X 凭据)
$ sux root application

替代方法

这些方法允许 root 连接到非 root 用户的 X 服务器,但存在不同程度的安全风险,尤其是在您运行 ssh 时。如果您在防火墙后面,您可能会认为它们对您的需求来说足够安全。

Xhost

Xhost 可用于临时允许 root 访问。

永久允许 root 访问

方法 1:将以下行
session         optional        pam_xauth.so

添加到 /etc/pam.d/su/etc/pam.d/su-l。然后使用 susu - 切换到您的 root 用户。

方法 2:全局在 /etc/profile

将以下行添加到 /etc/profile

/etc/profile
export XAUTHORITY=/home/username/.Xauthority

这将永久允许 root 连接到非 root 用户的 X 服务器。

或者,仅指定一个特定的应用程序

# XAUTHORITY=/home/username/.Xauthority appname

其中 appname 是特定应用程序的名称。(例如:kwrite

Wayland

尝试在 Wayland 会话中通过 susudopkexec 以 root 用户身份运行图形应用程序(例如 GPartedGedit)将失败,并出现类似以下错误的提示:

# gedit
No protocol specified
Unable to init server: Could not connect: Connection refused

(gedit:2349): Gtk-WARNING **: cannot open display: :0

在 Wayland 之前,可以通过创建 Polkit 策略来正确实现以提升的权限运行 GUI 应用程序,或者更危险地通过在终端中运行该命令,并在命令前加上 sudo 来实现;但在 (X)Wayland 下,这不再有效,因为默认设置是只允许启动 X 服务器的用户连接客户端到它(请参阅此 bug 报告相关 上游 提交)。

如果可能,请避免以 root 身份运行图形应用程序,请参阅 #规避以 root 身份运行图形应用程序

一个更通用但安全性更差的解决方法允许以 root 身份运行任何图形应用程序,请参阅 #使用 xhost

使用 xhost

本文章或章节需要扩充。

原因: 提及 xhost 仅在 Xwayland 下有效。(在 Talk:Running GUI applications as root 中讨论)

一个更通用——但安全性差得多——的解决方法是使用 xhost 来临时允许 root 用户访问本地用户的 X 会话[4]。要做到这一点,请以当前(非特权)用户身份执行以下命令:

$ xhost si:localuser:root

在应用程序关闭后移除此访问权限:

$ xhost -si:localuser:root

使用 sudo -E

您可以使用以下命令启动应用程序:

$ sudo -E program

这将保留 WAYLAND_DISPLAY 等环境变量。

如果您希望 HOME 环境变量设置为目标用户,请使用:

$ sudo -EH program

请参阅 sudo(8)

使用 pkexec

您可以使用以下命令启动 GUI 应用程序:

$ pkexec env WAYLAND_DISPLAY="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" XDG_RUNTIME_DIR=/run/user/0 program

这将保留 WAYLAND_DISPLAY 环境变量。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.