加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 尝试使用pam_exec编写rsync脚本

发布时间:2020-12-15 18:28:49 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个bash脚本,它将在pam_exec调用时执行rsync.我尝试了几种不同的方法,我不确定我做错了什么. 当我尝试通过添加登录时运行脚本 session optional pam_exec.so /usr/bin/local/sync.sh 到我的sshd文件,它给我一个12的退出代码. 如果我登录然后
我正在尝试编写一个bash脚本,它将在pam_exec调用时执行rsync.我尝试了几种不同的方法,我不确定我做错了什么.
当我尝试通过添加登录时运行脚本
session     optional      pam_exec.so /usr/bin/local/sync.sh

到我的sshd文件,它给我一个12的退出代码.

如果我登录然后手动运行我的脚本,它允许我连接到远程服务器,它列出我的文件,但它实际上并没有同步任何东西.

我使用buth $USER和$PAM_USER尝试了下面的代码. $PAM_USER根本不起作用.

#!/bin/sh 
rsync -azv -e ssh $USER@remote_server:/home/html/$USER/ /home/html/$USER
pam_exec的手册页说明该模块提供$PAM_USER,而不是$USER:

the following PAM items are exported as environment variables: PAM_RHOST,PAM_RUSER,PAM_SERVICE,PAM_TTY,PAM_USER and PAM_TYPE […]

在我的基于Debian的系统上,我在pam_motd的条目之前添加了这一行

# Run a script on login
session    optional     pam_exec.so /usr/local/etc/pam_exec.sh

然后我创建了测试脚本,记住要使其可执行:

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

最后,我打开了一个新的登录会话到我的测试系统,并在会话开始时看到我在我的日志文件/tmp/pam_exec.log中收到了这样的信息:

Mon Nov  9 23:32:52 GMT 2015
PAM_USER=roaima,USER=.

要实现您的要求,您需要使用这样的脚本:

#!/bin/sh
rsync -azq -e ssh "$PAM_USER"@remote_server:/home/html/"$PAM_USER"/ /home/html/"$PAM_USER" >/dev/null 2>&1

请注意,rsync的所有输出都将被丢弃.这对于确保使用ssh作为传输的客户端/服务器应用程序在开始协商之前不会受到意外输出的影响是必要的.如果你真的想把它呈现给用户,我建议你把它写到用户特定的日志文件,如“$HOME / .pam_exec.log”,然后在用户的.profile中使用这样的一行来输出它登录过程完成后:

if test -t 1 -a -s "$HOME/.pam_exec.log"
then
    echo "Prelogin results"
    sed 's/^/| /' "$HOME/.pam_exec.log"
fi

它不能免受竞争条件的影响,但IME大多数用户不会多次同时登录同一台服务器.如果您发现这种情况很常见,有办法解决它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读