LightDM: Как я могу инициировать команду удара каждый раз, кому-то не удается войти в систему?

Я хотел бы взять и сохранить картинку от веб-камеры, каждый раз, когда кто-то пытается войти в систему в систему и сбои. Я знаю, что могу сделать это с:

mplayer -vo png -frames 1 tv://

Вопрос: Как я могу инициировать эту команду, когда кому-то не удается войти в w/LightDM?

1
задан 28 February 2020 в 23:59

1 ответ

Объяснение

Один путь состоит в том, чтобы использовать Журнал Авторизации.

Журнал авторизации

Журнал Авторизации отслеживает использование систем авторизации, механизмов для авторизации пользователей, которые запрашивают пароли пользователя, такие как система Сменного модуля аутентификации (PAM), команда sudo, удаленные входы в систему sshd и так далее. В Файле журнала Авторизации можно получить доступ /var/log/auth.log. Этот журнал полезен для приобретения знаний о пользовательских логинах и использовании команды sudo.

Больше здесь на LinuxLogFiles

На неудавшейся попытке входа в систему запись будет добавлена к /var/log/auth.log файл и последняя строка будут содержать что-то как:

pam_unix(gdm-password:auth): authentication failure;

Если Вы постоянно контролируете файл для модификации и проверки, если последняя строка содержит отказ ключевого слова с, например, grep failure затем Вы знаете, что неудавшаяся попытка входа в систему только что произошла, и можно выполнить любую команду, которую Вы хотите на основе этого действия.


Решение

Можно контролировать последнюю строку /var/log/auth.log файл со сценарием как это:

#!/bin/bash

while true
do
       sleep 1


        if (( $(tail -1 /var/log/auth.log | grep failure | wc -l) == 1))

        then

                echo "failed login"

                # Your command here

        fi

done

Или еще лучше, можно установить inotify-tools и используйте inotifywait контролировать файл вместо sleep 1 и сценарий будет похож на это:

#!/bin/bash

while inotifywait -q -e modify /var/log/auth.log >/dev/null

do

        if (( $(tail -1 /var/log/auth.log | grep failure | wc -l) == 1))

        then

                echo "failed login"

                # Your command here

        fi


done

inotify-tools может быть установлен со следующей командой:

sudo apt install inotify-tools

Реализация

Для выполнения этого решения как системной службы выполните эти шаги:

  • Скопируйте и вставьте код сценария выше (без echo "failed login" поскольку я добавил эту строку для отладки только целей) в файл в Вашем корневом каталоге, и назовите его TakePicture.sh и сохраните файл.

  • Сделайте исполняемый файл файла сценария оболочки путем выполнения следующей команды в терминале:

chmod +x ~/TakePicture.sh
  • Создайте и отредактируйте пользовательский systemd сервис для выполнения сценария оболочки при начальной загрузке путем выполнения следующей команды в терминале:
sudo nano /etc/systemd/system/TakePicture.service 
  • Скопируйте и вставьте следующий код в редактора, замену USERNAME с Вашим именем пользователя и сохраняют, оно путем нажатия Ctrl + X затем нажимает, Y затем нажимают Enter:
[Unit]
Description=Take Picture

[Service]
Type=oneshot
ExecStart=/home/USERNAME/TakePicture.sh

[Install]
WantedBy=multi-user.target
  • Запустите сервис путем выполнения следующей команды в терминале:
sudo systemctl start TakePicture
  • Включите сервис путем выполнения следующей команды в терминале:
sudo systemctl enable TakePicture

Всего наилучшего

1
ответ дан 17 March 2020 в 00:12

Другие вопросы по тегам:

Похожие вопросы: