已解决:sudo 上的 PAM 模块 bash 脚本破坏 Zenity - /bin/bash 失败:退出代码 126 - /bin/bash 失败:退出代码 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 时,它都会返回此错误消息:

bin/bash Failed: exit code 126

要求输入密码,当输入正确的密码时,打印另一个错误行

bin/bash Failed: exit code 126

我仔细检查了 /usr/bin/test.sh 是否拥有所有必要的权限。

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

更新 1

以下是我尝试过但没有成功的一些修复:

  • /usr/bin/test.sh 权限为:-rwx--x--x 1 root root
  • #!/bin/sh#!/bin/bash 都有效
  • 添加 "disPLAY=:0" 没有帮助

更新 2

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

我在 stdout 之后添加auth required,例如,如果我使用 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