Я должен сделать изображение с веб-камерой при каждой попытке входа в систему. Таким образом, я записал сценарий удара, поместил его в/usr/local/bin/photo.sh
Но вот вопрос - я не знаю, как запустить этот скрипт при каждой попытке входа в систему (каждый неправильный или корректный введенный пароль, каждый входить в систему и каждая учетная запись разблокировали). Какие-либо предложения?
Ubuntu 16.04, Единица, lightdm.
Это работает, но некоторый пакет мог перезаписать Вашу конфигурацию, и затем Вы завинчены.
Я сделал некоторые успехи здесь. Я знаю, как выполнить что-то в *каждый* попытка аутентификации.
Мой/etc/pam.d/common-auth:
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
auth [success=2 default=ignore] pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth optional pam_exec.so quiet /usr/local/bin/onlogin.sh fail
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth optional pam_exec.so quiet /usr/local/bin/onlogin.sh ok
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_ecryptfs.so unwrap
# end of pam-auth-update config
Так, давайте начнем с вершины:
auth [success=2 default=ignore] pam_unix.so nullok_secure
Значение по умолчанию, успех равняется 1 здесь. Это говорит PAM, сколько строк это должно пропустить, если пользователь прошел проверку подлинности успешно. Я изменил его на 2, потому что я добавил строку:
auth optional pam_exec.so quiet /usr/local/bin/onlogin.sh fail
Так, auth
говорит PAM команде выполнения при каждой аутентификации, конечно. Затем optional
должен передать сценарий, даже если бы была ошибка, которую я предполагаю. pam_exec.so
библиотека, которая работает /usr/local/bin/onlogin.sh
сценарий с fail
в качестве параметра, потому что эта строка выполняется, когда пользователь ввел неправильные учетные данные. Я добавил quiet
, потому что на моем VM была ошибка в каждом sudo
/su
аутентификация.
Следующая строка, заканчивающаяся pam_deny.so
, как имя говорит, препятствует пользователю доступ. Это - значение по умолчанию здесь.
Затем та же строка как выше, но заканчивающийся ok
, сказать сценарий что пользователь, аутентифицируемый успешно.
auth optional pam_exec.so quiet /usr/local/bin/onlogin.sh ok
Все работало правильно, но …, которым состояла в том проблема, когда я попытался войти во встроенную Гостевую учетную запись Ubuntu. Поскольку, uhm, нет никакой аутентификации. Никакой пароль = никакая аутентификация. В этом случае решение, предоставленное работами @NGRhodes.
В моей Ubuntu гостеприимный VM все работало правильно, таким образом, я переместил его в свою реальную машину, перезагрузил машину, вошел в мою учетную запись, вошедшую гостю. Хороший. Перезагрузите снова - работы как очарование.
Так, вечером как повседневный я обновил свою машину. Перезагрузка.Авторизоваться. Неправильный пароль. Попробованный еще раз - пароль неправильный …, Загружающий некоторый livecd дистрибутив, cd
в /etc/pam.d/
выключить это и что я вижу? success=2
стал success=1
и каждая попытка - успешно или отказавший - выполняемый pam_deny.so
.
Загруженный снова, вошел в систему успешно, tailf /var/log/apt/history.log | grep -i pam
, и некоторая дикая местность libpam-cgfs
появляется. Так, этот пакет (вероятно), перезаписанная часть /etc/pam.d/common-auth
.
Присоединение onlogin.sh
для потомков :) - не забывают устанавливать fswebcam сначала.
#!/bin/bash
# $PAM_* variables are described in `man pam_exec`
RESULT="${1}" # login result (ok/fail)
WEBCAM_DEV="/dev/video0" # webcam device
WEBCAM_RES="1280x720" # desired screen resolution (if too large fswebcam fallbacks to device's max)
FRAMES="1" # how many shots to take (also add nanoseconds to date in filename to prevent overwrite and/or fswebcam crash)
PHOTO_DIR="/opt/_webcam" # where to save photos
FILENAME="${RESULT}_${PAM_USER}_$(date +%Y-%m-%d_%H-%M-%S).jpg" # filename
OUTPUT="${PHOTO_DIR}/${FILENAME}" # dir+filename
# create dir
mkdir -p ${PHOTO_DIR}
# append to the log
if [[ ${RESULT} == 'ok' ]]; then
RESULT='succeed'
else
RESULT='failed'
fi
logger -t 'onlogin.sh' "Login ${RESULT} by ${PAM_SERVICE} at ${PAM_TTY} for user ${PAM_USER}"
# say cheeeeese (if authorization is provided by lightdm)
if [[ ${PAM_SERVICE} == "lightdm" ]]; then
fswebcam -d ${WEBCAM_DEV} -r ${WEBCAM_RES} --jpeg 90 -q -F ${FRAMES} ${OUTPUT}
else
# if authorization is provided by something else (e.g. sudo) do nothing
:
fi
Некоторые сообщения были очень полезны:
В программе запуска (используют Тире), можно сделать команду, когда компьютер запускается. я не уверен в попытках входа в систему.
lightdm.conf файл поддерживает выполнение сценариев с помощью параметра сценария установки сессии (см. https://wiki.ubuntu.com/LightDM для получения дополнительной информации).
при редактировании/etc/lightdm/lightdm.conf ищите строку, которая запускает сценарий установки сессии, гарантируйте не прокомментированный (# символ), добавьте путь к файлу, таким образом, это похоже:
session-setup-script=/usr/local/bin/photo.sh
Примечание по безопасности:: Ваш скрипт был бы запущен как корень.