A página man do pam_exec
explica que o módulo fornece $PAM_USER
, não $USER
:
the following PAM items are exported as environment variables:
PAM_RHOST
,PAM_RUSER
,PAM_SERVICE
,PAM_TTY
,PAM_USER
andPAM_TYPE
[...]
No meu sistema baseado em Debian eu adicionei esta linha antes da entrada para pam_motd
# Run a script on login
session optional pam_exec.so /usr/local/etc/pam_exec.sh
Eu então criei o script de teste, lembrando-me de torná-lo executável:
cat >/usr/local/etc/pam_exec.sh <<'EOF'; chmod a+rx /usr/local/etc/pam_exec.sh
#!/bin/bash
#
test open_session = "$PAM_TYPE" && {
echo
date
echo "PAM_USER=$PAM_USER, USER=$USER."
} >>/tmp/pam_exec.log
exit 0
EOF
Por fim, abri uma nova sessão de login no meu sistema de teste e vi que, no início da sessão, recebia informações como essa no meu arquivo de log /tmp/pam_exec.log
:
Mon Nov 9 23:32:52 GMT 2015
PAM_USER=roaima, USER=.
Para implementar sua exigência, você precisaria usar um script como este:
#!/bin/sh
rsync -azq -e ssh "$PAM_USER"@remote_server:/home/html/"$PAM_USER"/ /home/html/"$PAM_USER" >/dev/null 2>&1
Observe que todas as saídas de rsync
são descartadas. Isso é necessário para garantir que os aplicativos cliente / servidor que usam ssh
como um transporte não sejam atingidos por uma saída inesperada antes que possam iniciar sua negociação. Se você realmente deseja apresentá-lo ao usuário, eu recomendo que você o grave em um arquivo de log específico do usuário, como "$HOME/.pam_exec.log"
, e use uma linha como essa no .profile
do usuário para gerá-lo após o processo de login concluído:
if test -t 1 -a -s "$HOME/.pam_exec.log"
then
echo "Prelogin results"
sed 's/^/| /' "$HOME/.pam_exec.log"
fi
Não está imune a uma condição de corrida, mas a maioria dos usuários do IME não faz login simultaneamente várias vezes no mesmo servidor. Se você acha que esse cenário é comum, há maneiras de lidar com isso.