已解决:SUDO 上的 PAM 模块 bash 脚本破坏了 Zenity - /bin/bash 失败:退出代码 126 - /bin/bash 失败:退出代码 126

SOLVED: PAM module bash script on sudo breaks Zenity - /bin/bash failed: exit code 126 - /bin/bash failed: exit code 126

我一直在 Kubuntu 18.04(基本上是 Ubuntu 18.04)上摆弄 PAM 模块,但不能似乎弄清楚了为什么每当用户执行 sudo 命令时我的 运行 我的 bash 脚本突然出现权限问题。

这是我的 /usr/local/bin/test.sh 文件代码:

#!/bin/sh
/usr/bin/zenity --info --text="It Works!"

这是我的 /etc/pam.d/sudo 文件代码:

#%PAM-1.0

session    required   pam_env.so readenv=1 user_readenv=0
session    required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0

# My PAM test runs here
auth       required   pam_exec.so /bin/bash /usr/local/bin/test.sh

@include common-auth
@include common-account
@include common-session-noninteractive

每当我尝试 sudo -i 它 returns 我这个错误信息:

bin/bash failed: exit code 126

询问密码,当输入正确的密码时,打印另一行错误:

bin/bash failed: exit code 126

我再次确认 /usr/bin/test.sh 拥有所有必要的权限。

我的问题是 - 我在这里做错了什么?我怎样才能正确调用它并触发 zenity 消息框作为测试?

更新 1

以下是我尝试过但未成功的一些修复方法:

更新 2

好吧,离修复它又近了一步,但仍有问题:

我在 auth required 之后添加了 stdout 并且如果我使用 echo 它解决了问题,但是如果我 运行 /usr/bin/zenity --info --text="It Works!" 它会提示一个新错误:

Unable to init server: Could not connect: Connection refused  (zenity:5046):
Gtk-WARNING **: 05:52:37.200: cannot open display:  /bin/bash failed: exit code 1

原因

没有为 Zenity 定义显示来提示消息。

解决方案

为您在 bash 中执行的任何可视化脚本添加显示 - 在我的例子中,它为 zenity 添加了 --display=:0.0,如下所示:

#!/bin/sh
/usr/bin/zenity --info --text="It Works!" --display=:0.0