【发布时间】:2021-07-03 05:49:03
【问题描述】:
我一直在使用 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
好吧,离修复更近了一步,但仍然有问题:
我在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
【问题讨论】:
-
退出代码让我们认为
bash找不到东西。我猜你应该在test.sh中使用shebang#!/bin/bash而不是#!/bin/sh。/bin/sh中的 sh short 不再链接到 bash 或sudo上下文中的功能性 shell 的事实可以解释你突然遇到的麻烦。 -
好的,所以它不起作用。不过想法不错。
-
在 test.sh 的第一行之后添加一行 "DISPLAY=:0" 可能会使其工作。
-
Gtk-WARNING **: 05:52:37.200: cannot open display:告诉我们当时没有定义DISPLAY。由于您有 pam 会话user_readenv=0,我猜您在某处依赖 X 设置脚本? -
从桌面上运行的终端运行
xhost +