既然 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 上打开问题。我可能是它的唯一用户,因此尚未进行太多测试,欢迎提供任何反馈。