![将 PAM 参数传递给 UFW](https://linux22.com/image/92855/%E5%B0%86%20PAM%20%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E7%BB%99%20UFW.png)
在开发服务器上,我想在 ssh 登录后打开特定 IP 地址的所有端口
但我的 ssh 登录脚本无法正常工作
#!/bin/sh
if [ "$PAM_TYPE" = "close_session" ]; then
ufw delete from $PAM_RHOST
else
ufw allow from $PAM_RHOST
fi
在 /etc/pam.d/sshd 中
session optional pam_exec.so quiet /etc/pam_session.sh
需要信息为什么我的脚本不起作用或/以及如何调试它。
如果我没记错的话,默认情况下 PAM 脚本是由 root 运行的。
答案1
好的。我的问题是 $PAM_RHOST 返回主机名而不是 ip。
更正脚本
#!/bin/sh
ip=$(getent hosts "$PAM_RHOST" | awk '{ print $1 }')
if [ "$PAM_TYPE" = "close_session" ]; then
ufw delete allow from $ip
else
ufw allow from $ip
fi
注意:确保 ufw 已启用 IPv6,因为“getent Hosts”可以返回 IPv6 或 IPv4