AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 422040
Accepted
lofidevops
lofidevops
Asked: 2018-02-06 06:03:38 +0800 CST2018-02-06 06:03:38 +0800 CST 2018-02-06 06:03:38 +0800 CST

Wayland 会支持图形 sudo 吗?

  • 772

在 X 桌面上,我偶尔使用gksudo或只是sudo somegui以另一个用户身份启动 GUI 应用程序,包括 root。我最近发现这在当代(2018 年初)Wayland 桌面上是不可能的。所有应用程序都必须以当前桌面用户身份启动,并且仅限于该用户的权限。

这是 Wayland 的永久功能(设计使然),还是 su-ty​​pe 的使用是尚未实现的增强功能?

我正在寻找一份记录在案的声明(路线图、设计页面......),而不是偏好或意见。

sudo su
  • 5 5 个回答
  • 5079 Views

5 个回答

  • Voted
  1. Best Answer
    mviereck
    2018-02-11T13:33:07+08:002018-02-11T13:33:07+08:00

    这是 Wayland 的永久功能吗(设计使然)

    不,这与 Wayland 协议无关。这是一个环境设置的问题。

    Wayland 使用套接字,其名称存储在WAYLAND_DISPLAY. 它位于XDG_RUNTIME_DIR通常设置为仅供用户访问的地方。但是root也可以访问它。(一些应用程序还考虑XDG_SESSION_TYPE哪些可以有值wayland或x11决定是使用 X 还是 Wayland。)

    sudo删除大多数环境变量,包括XDG_RUNTIME_DIR和WAYLAND_DISPLAY。

    您可以使用以下命令以 root 身份运行 Wayland 应用程序:

    sudo env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR WAYLAND_SOCKET=$WAYLAND_SOCKET waylandapplication
    

    或更短的 with-EH以保留几乎所有的环境变量(但设置HOME为/root)。这也将包括DISPLAYXwaylandXAUTHORITY访问权限:

    sudo -EH application
    

    但是,如果以 root 身份运行的应用程序在 中写入任何内容XDG_RUNTIME_DIR,则可能会导致用户应用程序的文件权限问题。

    但是,在 Wayland 中以 root 身份运行图形应用程序比在 X11 中的安全问题要少得多。

    为避免意外使用 X11,您可以不运行DISPLAY:

    sudo -EH env DISPLAY=  waylandapplication
    

    我正在寻找一份记录在案的声明(路线图、设计页面......),而不是偏好或意见。

    Wayland 文档提到,WAYLAND_DISPLAY但我没有找到任何关于XDG_RUNTIME_DIR. 不过,包括参考实现在内的所有 Wayland 合成器都weston依赖于XDG_RUNTIME_DIR.

    如果WAYLAND_DISPLAY将在另一个位置,那么在同一个 Wayland 显示器上运行来自任意用户的应用程序不会有问题。但XDG_RUNTIME_DIRist 指定为对登录用户进行限制,并应包含与用户相关的套接字:

    $XDG_RUNTIME_DIR 定义相对于用户特定的非必要运行时文件和其他文件对象(如套接字、命名管道等)应该存储的基本目录。该目录必须由用户拥有,并且他必须是唯一拥有对该目录的读写权限的人。它的 Unix 访问模式必须是 0700。

    在 Wayland 上运行另一个用户或 root 的问题与XDG_RUNTIME_DIR规范有关,而不是与 Wayland 本身有关。如果您指定具有任意访问权限的自定义XDG_RUNTIME_DIR输入/tmp(从而破坏其规范),则所有用户都可以使用 Wayland 显示。

    未来有一些希望不需要XDG_RUNTIME_DIR,但这取决于实施:Wayland docu chap.4:

    从 Wayland 1.15 开始,通过将 WAYLAND_DISPLAY 设置为服务器端点监听的绝对路径,实现可以选择支持位于文件系统中任意位置的服务器套接字端点。

    • 10
  2. intgr
    2021-04-06T05:49:18+08:002021-04-06T05:49:18+08:00

    我为这个用例写了ego(Alter Ego)。它不是 GUI 应用程序,但您可以从控制台以其他用户身份启动 GUI 应用程序,它会自动处理 xhost 和 Wayland 以及 PulseAudio 套接字共享:https ://github.com/intgr/ego

    诀窍是使用 Posix ACL 将 Wayland/PulseAudio 套接字的访问权限授予另一个用户,并设置环境变量以便目标用户的应用程序知道如何连接到它。

    如果遇到问题,请在 GitHub 上打开一个问题。

    • 5
  3. Thomas Guyot-Sionnest
    2020-07-03T22:43:10+08:002020-07-03T22:43:10+08:00

    有两种相当简单的解决方法。下面的示例启动突触,但任何其他命令都应该这样做。

    1. 使用 ssh X-Forwarding 到 root 用户(您可能必须启用 root 登录/etc/ssh/sshd_config或配置密钥身份验证):
    $ ssh -Y root@:: synaptic
    
    1. 使用 socat 和 sudo,正如bober 在 RedHat Bug #1274451 上提出的那样。下面的示例假设我们在显示 #0 并且 #1 是免费的...
    socat UNIX-LISTEN:/tmp/.X11-unix/X1 UNIX-CONNECT:/tmp/.X11-unix/X0 & sudo DISPLAY=:1 synaptic
    

    我相信任何一种解决方法都是让用户拥有的进程连接到 X11 套接字并提供隧道。

    • 2
  4. Alejandro Blasco
    2018-10-10T04:32:23+08:002018-10-10T04:32:23+08:00

    虽然我没有直接回答你的问题,但我认为有些人可能因为同样的问题而来到这里。

    这是我制作的一个脚本,对于需要在Wayland会话中通过sudo以root身份运行图形应用程序(如Gedit、Synaptic或GParted )的人来说,这是一种解决方法:

    https://gist.github.com/wachambo/bd22e12db2d5a46dc109bd0d553733be

    在这里导入:

    #!/usr/bin/env bash
    
    #
    # Enable root access to x-windows system.
    #
    # Motivation: Trying to run a graphical application as root via su, sudo in a 
    # Wayland session (e.g. GParted or Gedit), will fail. Apps which use polkit to
    # request administrator permissions for just certain operations and only when 
    # needed are not affected (they are not started as root right away). 
    # [1] https://bugzilla.redhat.com/show_bug.cgi?id=1274451
    #
    # Based on a Reddit comment.
    # [2] https://www.reddit.com/r/Fedora/comments/5eb633/solution_running_graphical_app_with_sudo_in/
    
    if (( $# != 1 )); then
        echo "Illegal number of parameters."
        echo
        echo "Usage: wsudo [command]"
        exit 1
    fi
    
    for cmd in sudo xhost; do
        if ! type -P $cmd &>/dev/null; then
            echo "$cmd it's not installed. Aborting." >&2
            exit 1
        fi
    done
    
    xhost +SI:localuser:root
    sudo $1
    #disable root access after application terminates
    xhost -SI:localuser:root
    #print access status to allow verification that root access was removed
    xhost
    
    • 1
  5. MRule
    2022-09-22T00:14:53+08:002022-09-22T00:14:53+08:00

    这扩展了 Thomas Guyot-Sionnest 的回答。

    我觉得这值得自己回答,因为它为我解决了很多问题。创建一个wlsudo使用以下内容调用的 shell 脚本:

    #!/usr/bin/env bash
    socat UNIX-LISTEN:/tmp/.X11-unix/X1 UNIX-CONNECT:/tmp/.X11-unix/X0 & sudo DISPLAY=:1 "$@"
    

    将其保存在您的目录中$PATH,并赋予其可执行权限 ( chmod +x ./wlsudo)。然后,您应该能够使用wlsudo代替sudoWayland 启动 GUI 应用程序,例如wlsudo synaptic just works。

    • 1

相关问题

  • 'zfs send' 是安全的只读命令吗?

  • sudo nautilus 和 sudo -E nautilus 的区别

  • 以其他用户身份运行单个命令;sudo 的限制

  • 允许用户以 root 身份运行命令

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve