已解决: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
以下是我尝试过但未成功的一些修复方法:
/usr/bin/test.sh
权限为:-rwx--x--x 1 root root
#!/bin/sh
和 #!/bin/bash
都有效
- 预先
"DISPLAY=:0"
没有帮助
更新 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
我一直在 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
以下是我尝试过但未成功的一些修复方法:
/usr/bin/test.sh
权限为:-rwx--x--x 1 root root
#!/bin/sh
和#!/bin/bash
都有效- 预先
"DISPLAY=:0"
没有帮助
更新 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