Могу ли я сделать так, чтобы веб-камера делала снимок при вводе неверного пароля?

Я использую ноутбук. Я думал о поддержке в моей машине с Ubuntu. Когда введен неверный пароль, позже делается снимок, показывающий, кто пытался получить доступ.

Я искал вокруг, и единственное, что я нашел, это что-то для Mac. Можно ли написать сценарий для Ubuntu, чтобы сделать то же самое.

Если возможно, то, что такое сценарий или программное обеспечение для этого.

72
задан 10 February 2013 в 00:24

2 ответа

На основе этого сообщения на Ubuntuforum BkkBonanza.

Это - подход с помощью PAM и будет работать на все неудавшиеся попытки входа в систему. Используя SSH, виртуальный терминал или через обычный экран входа в систему, это не имеет значения, поскольку все обрабатывается PAM в конце.

  1. Установите ffmpegInstall ffmpeg, мы собираемся использовать это в качестве командной строки способ захватить изображения веб-камеры. Обновление: ffmpeg удален, когда Вы обновляете до Ubuntu 14.04. Мы можем использовать avconv вместо ffmpeg в ниже сценария. Никакая потребность установить что-либо отдельно.

  2. Создайте маленький сценарий где-нибудь, например. /usr/local/bin/grabpicture со следующим содержанием:

    #!/bin/bash
    ts=`date +%s`
    ffmpeg -f video4linux2 -s vga -i /dev/video0 -vframes 3 /tmp/vid-$ts.%01d.jpg
    exit 0  #important - has to exit with status 0
    

    Изменитесь /dev/video0 с фактическим видеоустройством Вашей веб-камеры и выбирают путь, где картинки сохранены - я просто выбираю /tmp. В более новой версии использования Ubuntu avconv вместо ffmpeg (sudo apt-get install libav-tools).

  3. Сделайте это исполняемым файлом, например. chmod +x /usr/local/bin/grabpicture.

  4. Протестируйте его, просто назвав его: /usr/local/bin/grabpicture. Проверьте, видите ли Вы, что файлы появляются в /tmp/vid....jpg.

  5. Настройте PAM для вызова этого на каждой неудачной попытке.

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

    1. Откройте окно терминала с корневым доступом (sudo -i) и оставьте это открытым - на всякий случай Вы завинчиваете на следующих шагах.
    2. Открытый /etc/pam.d/common-auth в Вашем любимом редакторе, например, путем выполнения gksudo gedit /etc/pam.d/common-auth. Следует иметь в виду для следующих шагов, что порядок строк в этом файле имеет значение.
    3. Найдите строку ниже. По умолчанию существует одна строка перед той с pam_deny.so. В моих 12,04 системах это похоже на это:

      auth    [success=1 default=ignore]      pam_unix.so nullok_secure
      
    4. В этой строке изменяются success=1 кому: success=2 чтобы иметь его пропускают наш сценарий на успехе. Это - важный шаг.

    5. Прямо ниже там, добавьте новый для вызова фактического сценария:

      auth    [default=ignore]                pam_exec.so seteuid /usr/local/bin/grabpicture
      
    6. Сохраните и закройте файл. Никакая потребность перезапустить что-либо.

  6. Протестируйте его.

    1. В новом окне терминала, как обычный пользователь, попытка su -l username входить в систему как другой пользователь с именем пользователя username (изменение с фактическим, конечно). Сознательно введите неправильный пароль. Проверьте если этот результат в новое изображение.
    2. То же как выше, но теперь вводят правильный пароль. Проверьте, входите ли Вы в систему, и это не приводит к сделанному снимку.
  7. Если тесты успешно выполнились, можно зарегистрироваться из DE (Unity/KDE/...), и необходимо видеть то же при вводе неправильного пароля с экрана входа в систему.

59
ответ дан 10 February 2013 в 00:24

Объяснение

Одним из способов, позволяющих запустить команду при вводе неправильного пароля, является использование Журнала авторизации.

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

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

Подробнее здесь, в LinuxLogFiles

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

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

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


Решение

Замените echo "неудачный вход в систему" в сценариях ниже на команду, которую вы хотите запустить после неудачного входа в систему.

Вы можете отслеживать последнюю строку файла /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 для мониторинга файла вместо сна 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

Реализация

Чтобы запустить это решение как системную службу, выполните следующие действия:

  • Скопируйте и вставьте приведенный выше код скрипта (без эха "неудачный вход в систему", так как я добавил эту строку только для целей отладки ) в файл в вашем домашнем каталоге и назовите его 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

Уведомление:

Журнал авторизации будет содержать всевозможные неудачные попытки входа или аутентификации (например, GDM, SSH, аутентификация пользователя терминала, sudo и т. д.).

Если ваша цель состоит в том, чтобы просто активировать сценарий при фактическом физическом входе в систему (т.кто-то сидит перед вашим компьютером, использует вашу клавиатуру и смотрит на ваш экран), тогда вам нужно изменить приведенный выше оператор if следующим образом:

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

if GDM — ваш менеджер входа в систему. Таким образом, сценарий будет запущен только в том случае, если произойдет фактический неудачный физический вход в систему.

0
ответ дан 19 January 2021 в 18:53

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

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