Crates.io | pam-send-slack-message |
lib.rs | pam-send-slack-message |
version | 0.2.0 |
source | src |
created_at | 2021-10-12 03:44:14.996428 |
updated_at | 2021-10-15 15:31:57.60378 |
description | pam helper that publishes messages on Slack based on ssh access |
homepage | |
repository | https://github.com/iuridiniz/pam-send-slack-message/ |
max_upload_size | |
id | 463826 |
size | 51,452 |
pam-send-slack-message is a program that publishes messages on slack when the linux server is accessed through ssh.
Go to releases page and download last release. There are static binaries for Linux (ARM64, x86_64, x86) and a debian package for debian based systems (Ubuntu).
Here a example of how to install it using upx (compressed) binary:
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
In order to work, you need a SLACK-TOKEN
with channel.write
permission and a SLACK-CHANNEL-ID
. Follow instructions here, if you are lost.
# configure pam/sshd
echo "session optional pam_exec.so /usr/local/bin/pam-send-slack-message | sudo tee -a /etc/pam.d/sshd
create a file /etc/pam.d/pam-send-slack-message.conf
with the following content:
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"
replace <SLACK-TOKEN>
and <SLACK-CHANNEL-ID>
with your own.
After machine configuration, just log in the machine through ssh.
This program need to be called by pam at session phase, you must edit /etc/pam.d/sshd
to have this line:
session optional pam_exec.so /path/to/pam-send-slack-message
You can learn about pam configuration here.
A file located at /etc/pam.d/pam-send-slack-message.conf
is used to configure this software.
The valid keys are:
slack_token
: your slack token (required)slack_channel_id
: your slack channel id (required)open_session_message
: the message to send when a user logs in (if not specified, the default message will be used)close_session_message
: the message to send when a user logs out (if not specified, the default message will be used).timezone
: the timezone to use (defaults to UTC)You can view default values in src/settings.default.toml
Pre-requisites: All you need is a working cargo + rust compiler, make and gcc.
make clean
make all
In order to test, you need a SLACK-TOKEN
with channel.write
permission and a SLACK-CHANNEL-ID
.
Simulate a pam login using ssh:
make SLACK_CHANNEL_ID=slack_channel_id SLACK_TOKEN=slack_token fake-open-session
Simulate a pam logout using ssh:
make SLACK_CHANNEL_ID=slack_channel_id SLACK_TOKEN=slack_token fake-close-session
In order to avoid pass env vars all the time, I recommend use direnv
, there's a sample .envrc
in envrc.sample
cp envrc.sample .envrc
direnv allow .
change /etc/pam.d/sshd
to:
session optional pam_exec.so debug log=/tmp/file_to_log.txt /usr/local/bin/pam-send-slack-message SLACK-CHANNEL-ID SLACK-TOKEN
See /tmp/pam-slack.log
, also see audit logs, in ubuntu they are located in /var/log/auth.log
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.