Назад | Перейти на главную страницу

Невозможно использовать CURL на /etc/pam.d/sshd

Я создаю сценарий, который выполняет cURL каждый раз, когда происходит вход в систему по SSH.
Я вставил новую строку в /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 получилось

Заботиться о ENVIRONMENT!

Показать различия между средой обычных сеансов входа в систему и средой для демона, такого как pam.

Измените свою линию в /etc/pam.d/sshd для session вместо того auth:

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.

Один из возможных ответов - env отличается от pam_exec. Примеры переменных для рассмотрения: $HTTP_PROXY или $NO_PROXY. В поисках .curlrc файл конфигурации использует $HOME или $CURL_HOME.

Например, ваш ручной запуск может быть успешным из-за NO_PROXY=127.0.0.1. Затем запуск, инициированный pam, просто возвращает HTTP 403, который по умолчанию curl не отображается. Я бы предложил сначала запустить curl -v в вашем скрипте, чтобы вы знали, где вы подключились и какой у вас числовой ответ HTTP.