File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/beacons/__pycache__/btmp.cpython-310.pyc
o
�N�g�! � @ s� d Z ddlZddlZddlZddlZddlZddlZddlZdZ dZ
dZg d�Ze�
e�ZdZe�e�Zz
ddlmZ dZW n eyI d ZY nw d
d� Zdd
� Zdd� Zdd� Zdd� Zdd� Zdd� ZdS )a?
Beacon to fire events at failed login of users
.. versionadded:: 2015.5.0
Example Configuration
=====================
.. code-block:: yaml
# Fire events on all failed logins
beacons:
btmp: []
# Matching on user name, using a default time range
beacons:
btmp:
- users:
gareth:
- defaults:
time_range:
start: '8am'
end: '4pm'
# Matching on user name, overriding the default time range
beacons:
btmp:
- users:
gareth:
time_range:
start: '8am'
end: '4pm'
- defaults:
time_range:
start: '8am'
end: '4pm'
# Matching on group name, overriding the default time range
beacons:
btmp:
- groups:
users:
time_range:
start: '8am'
end: '4pm'
- defaults:
time_range:
start: '8am'
end: '4pm'
Use Case: Posting Failed Login Events to Slack
==============================================
This can be done using the following reactor SLS:
.. code-block:: jinja
report-wtmp:
runner.salt.cmd:
- args:
- fun: slack.post_message
- channel: mychannel # Slack channel
- from_name: someuser # Slack user
- message: "Failed login from `{{ data.get('user', '') or 'unknown user' }}` on `{{ data['id'] }}`"
Match the event like so in the master config file:
.. code-block:: yaml
reactor:
- 'salt/beacon/*/btmp/':
- salt://reactor/btmp.sls
.. note::
This approach uses the :py:mod:`slack execution module
<salt.modules.slack_notify>` directly on the master, and therefore requires
that the master has a slack API key in its configuration:
.. code-block:: yaml
slack:
api_key: xoxb-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXX
See the :py:mod:`slack execution module <salt.modules.slack_notify>`
documentation for more information. While you can use an individual user's
API key to post to Slack, a bot user is likely better suited for this. The
:py:mod:`slack engine <salt.engines.slack>` documentation has information
on how to set up a bot user.
� NZbtmpz
/var/log/btmps hi32s4s32s256shhiii4i20x)
�typeZPID�lineZinittab�user�hostname�exit_status�session�time�addrzbtmp.locTFc C s0 t j�t�rtS t� d�} t�dt| � d| fS )Nz does not exist.zUnable to load %s beacon: %sF)�os�path�isfile�BTMP�__virtualname__�log�error)�err_msg� r �E/opt/saltstack/salt/lib/python3.10/site-packages/salt/beacons/btmp.py�__virtual__� s
r c sD � s||fS t � t�sd}d}t� fdd�dD ��sd}d}||fS )�
Check time range
Fz>The time_range parameter for btmp beacon must be a dictionary.c 3 s � | ]}|� v V qd S )Nr )�.0�k��tranger r � <genexpr>� s � z'_validate_time_range.<locals>.<genexpr>)�start�endzJThe time_range parameter for btmp beacon must contain start & end options.)�
isinstance�dict�all)r �status�msgr r r �_validate_time_range� s
�r"