如何在 Linux 上以另一个用户身份运行 GUI 应用程序,而无需 SSH 和 kde/gksudo?

如何在 Linux 上以另一个用户身份运行 GUI 应用程序,而无需 SSH 和 kde/gksudo?

既然 kdesudo 和 gksudo 已经从发行版中消失,那么以不同用户身份运行 GUI 应用程序的合理方法是什么?

我的用例是,我不希望应用程序能够直接访问我的实际主目录。可能有方法可以通过 X11 服务器将权限提升到我的用户,但这不是我关心的问题。我担心的是,某些应用程序会将数据写入我的主目录,而我希望能够轻松删除这些数据。我希望能够在使用完应用程序后,rm -rf 该其他用户的主目录并回收所有磁盘空间。

我通常会求助于ssh -X,但是,由于应用程序的性质,这会导致使用时出现明显的延迟和烦恼。kdesudo在我仍然安装它时工作正常,但全新安装操作系统会使它消失。

PolKit 被提议作为替代 kdesudo 的解决方案,但据我所知,PolKit 只替代以 root 身份运行,而不是以其他用户身份运行。

那么还有其他选择吗?是否有一组可以传递的魔术选项sudo可以可靠地工作?

答案1

我有一个名为的可执行文件xsudo。它可能有缺陷:它没有经过充分测试。但经常使用。

#/bin/bash

inner() {
    su  - "$user" -c "xauth list" |
        grep "$(echo "$display" |
                cut -d ':' -f 2 |
                cut -d '.' -f 1 |
                sed -e s/^/:/ ) " |
        xargs -n 3 xauth add &&
        "$@"
}

if [ "$1" = "---innermode" ]
then
    shift
    user="$1"
    display="$2"
    shift 2
    inner "$@"
else
    self="$0"
    sudo "${self}" ---innermode "$USER" "$DISPLAY" "$@"
fi

答案2

根据ctrl-alt-delor 回答,我滚了我自己的脚本,可以在我的 github 上找到

要使用不同用户的 X11 服务器,需要正确的 X 授权文件。此文件包含使用 X11 服务器的凭证,通常由图形登录过程设置。

重新创建此类文件所需的数据可以通过使用xauth nextract /dev/stdout "$DISPLAY"原始用户来获取。该命令的输出是文本数据,可以将其输入xauth nmerge /dev/stdin目标用户为其提供访问原始用户 X11 服务器所需的数据(加上变量DISPLAY)。

为了避免干扰其他用户(多座席系统)可能正在运行的 X11 服务器,并避免干扰其他 Xauth 转发方法,最好将授权数据写入只有目标用户并将该文件的路径导出为XAUTHORITY变量。

链接脚本完成了所有这些工作,并且它尽力清理目标用户命令的环境(以避免诸如XDG_CONFIG_HOME通过之类的事情),以及避免xauth nextract最终的输出ps被其他用户访问(即使是暂时的)。

答案3

我希望例如

$ su - sister # login as 'sister'..., assuming the user exists ...这会导致任何 GUI 应用程序遵守通常的用户限制和限制 - 一如既往 -从该 shell 启动时

$曼苏
...
姓名
       su – 更改用户 ID 或成为超级用户

概要
       su [选项] [用户名]

...

答案4

这里提供的大多数解决方案均不与 Wayland 和 PulseAudio 集成。

我编写了ego(Alter Ego),它自动处理xhost与另一个本地用户的 Wayland 和 PulseAudio 套接字共享:https://github.com/intgr/ego

但是,目前程序退出后不会撤销特权。

如果遇到问题,请在 GitHub 上打开问题。我可能是它的唯一用户,因此尚未进行太多测试,欢迎提供任何反馈。

相关内容