#slack #ssh #pam #sshd

app pam-send-slack-message

基于ssh访问发布Slack消息的pam辅助程序

4个版本

0.2.0 2021年10月15日
0.1.2 2021年10月14日
0.1.1 2021年10月14日
0.1.0 2021年10月12日

#10 in #pam

MIT 许可证

16KB
173

pam-send-slack-message

pam-send-slack-message是一个程序,当通过ssh访问Linux服务器时,会在Slack上发布消息。

安装

前往发布页面下载最新版本。提供Linux(ARM64、x86_64、x86)的静态二进制文件和基于debian系统的deb包(Ubuntu)。

以下是如何使用upx(压缩)二进制文件安装它的示例

wget https://github.com/iuridiniz/pam-send-slack-message/releases/download/v0.2.0/pam-send-slack-message.$(uname -m).musl.upx
sudo mkdir -p /usr/local/bin/
sudo cp pam-send-slack-message.$(uname -m).musl.upx /usr/local/bin/pam-send-slack-message
chmod +x /usr/local/bin/pam-send-slack-message

配置

为了运行,你需要一个具有SLACK-TOKENchannel.write权限的SLACK-CHANNEL-ID。如果迷失方向,请遵循此处的说明。

# configure pam/sshd
echo "session optional pam_exec.so /usr/local/bin/pam-send-slack-message | sudo tee -a /etc/pam.d/sshd 

创建一个包含以下内容的文件/etc/pam.d/pam-send-slack-message.conf

slack_token = "<SLACK-TOKEN>"
slack_channel_id = "<SLACK-CHANNEL-ID>"
# see https://api.slack.com/reference/surfaces/formatting
open_session_message = """🕵️ ▶️▶️▶️ IP `{addr}` logged in `{hostname}` as `{user}` using `{auth_info}` at `{when}`"""
close_session_message = """🕵️ 🛑🛑🛑 IP `{addr}` logout from `{hostname}` (is was `{user}` using `{auth_info}`) at `{when}`"""
# could be "America/Sao_Paulo" or "America/Los_Angeles" or "Europe/Oslo"
timezone = "UTC"

<SLACK-TOKEN><SLACK-CHANNEL-ID>替换为你自己的。

用法

机器配置完成后,只需通过ssh登录机器即可。

pam/sshd配置

此程序需要在pam的会话阶段调用,你必须编辑/etc/pam.d/sshd以包含此行

session optional pam_exec.so /path/to/pam-send-slack-message

您可以在此处了解有关pam配置的信息。

pam-send-slack-message配置

位于/etc/pam.d/pam-send-slack-message.conf的文件用于配置此软件。

有效的键包括

  • slack_token:您的Slack令牌(必需)
  • slack_channel_id:您的Slack频道ID(必需)
  • open_session_message:用户登录时发送的消息(如果未指定,将使用默认消息)
  • close_session_message:用户注销时发送的消息(如果未指定,将使用默认消息)。
  • timezone:要使用的时区(默认为UTC)

您可以在 src/settings.default.toml 中查看默认值。

黑客攻击

手动编译

前提条件:您需要的只是一个工作状态下的 cargo + rust 编译器、make 和 gcc。

make clean
make all

测试

为了进行测试,您需要一个具有 SLACK-TOKEN channel.write 权限的 SLACK-CHANNEL-ID

使用 ssh 模拟 pam 登录

make SLACK_CHANNEL_ID=slack_channel_id SLACK_TOKEN=slack_token fake-open-session

使用 ssh 模拟 pam 注销

make SLACK_CHANNEL_ID=slack_channel_id SLACK_TOKEN=slack_token fake-close-session

为了避免始终传递环境变量,我建议使用 direnv,在 envrc.sample 中有一个示例 .envrc 文件。

cp envrc.sample .envrc
direnv allow .

在使用 pam 内部时启用日志

/etc/pam.d/sshd 修改为

session optional pam_exec.so debug log=/tmp/file_to_log.txt /usr/local/bin/pam-send-slack-message SLACK-CHANNEL-ID SLACK-TOKEN

查看 /tmp/pam-slack.log,也请查看审计日志,在 Ubuntu 中它们位于 /var/log/auth.log

贡献

欢迎 Pull 请求。对于重大更改,请先创建一个问题来讨论您想要进行哪些更改。

许可证

MIT

依赖关系

~6–19MB
~284K SLoC