无法在 /etc/pam.d/sshd 上使用 CURL

无法在 /etc/pam.d/sshd 上使用 CURL

我正在创建一个脚本,每次 SSH 登录时都会执行 cURL。
我在 /etc/pam.d/sshd 中插入了一个新行,如下所示:

auth required pam_exec.so /bin/curl.sh

我的 curl 脚本如下:

#!/bin/bash

myVar=$(/usr/bin/curl http://127.0.0.1:8081)
echo $myVar >> /tmp/hai
whereis curl >> /tmp/hai

问题是,/tmp/hai仅记录的输出whereis curl,而不是curl

[root@loc-4 l-user]# tail -f /tmp/hai 

curl: /usr/bin/curl /usr/share/man/man1/curl.1.gz

有人知道为什么会发生这种情况吗?

编辑:我尝试手动运行脚本,但curl发生了

答案1

关心ENVIRONMENT

显示常规登录会话的环境和 pam 等守护进程的环境之间的差异。

将您的行更改/etc/pam.d/sshdsessionauth

auth      required     pam_exec.so /usr/local/sbin/nssh.sh auth
session   optional     pam_exec.so /usr/local/sbin/nssh.sh session

并更改您的脚本,尝试这个(并以它结束,true以防止由于错误的结果代码而导致登录被拒绝):

#!/bin/bash

printf -v myfile "/tmp/nssh-%(%Y%02m%02d%H%M%S)T-%04X" -1 $$
exec 1>$myfile.log
exec 2>$myfile.err
echo $0 -- $@
set

if [ "$PAM_TYPE" = "open_session" ] ;then
    myVar=$(/usr/bin/curl http://127.0.0.1:8081)
    echo $myVar >> /tmp/hai
    whereis curl >> /tmp/hai
fi

true

这将在单独的脚本中重定向 STDERR 和 STDOUT,然后在.log命令行和参数中打印,然后打印环境。

因此,您将能够比较常规会话(手动运行)的环境和从 PAMd 创建的环境。

答案2

一个可能的答案是env不同于pam_exec。要考虑的示例变量是$HTTP_PROXY$NO_PROXY。搜索.curlrc配置文件使用$HOME$CURL_HOME

例如,由于 ,您的手动运行可以成功NO_PROXY=127.0.0.1。然后 pam 启动的运行只会返回 HTTP 403,默认情况下 curl 不会显示该信息。我建议首先curl -v在脚本中运行,这样您就知道您连接到了哪里以及您得到了什么 HTTP 数字响应。

相关内容