16.04 - lightdm - команда выполнения каждая попытка входа в систему и каждая учетная запись разблокировала

Я должен сделать изображение с веб-камерой при каждой попытке входа в систему. Таким образом, я записал сценарий удара, поместил его в/usr/local/bin/photo.sh

Но вот вопрос - я не знаю, как запустить этот скрипт при каждой попытке входа в систему (каждый неправильный или корректный введенный пароль, каждый входить в систему и каждая учетная запись разблокировали). Какие-либо предложения?

Ubuntu 16.04, Единица, lightdm.

0
задан 8 July 2016 в 00:02

3 ответа

tl; доктор:

Это работает, но некоторый пакет мог перезаписать Вашу конфигурацию, и затем Вы завинчены.


Я сделал некоторые успехи здесь. Я знаю, как выполнить что-то в *каждый* попытка аутентификации.

Мой/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

Некоторые сообщения были очень полезны:

0
ответ дан 29 September 2019 в 00:08

В программе запуска (используют Тире), можно сделать команду, когда компьютер запускается. я не уверен в попытках входа в систему.

0
ответ дан 29 September 2019 в 00:08

lightdm.conf файл поддерживает выполнение сценариев с помощью параметра сценария установки сессии (см. https://wiki.ubuntu.com/LightDM для получения дополнительной информации).

при редактировании/etc/lightdm/lightdm.conf ищите строку, которая запускает сценарий установки сессии, гарантируйте не прокомментированный (# символ), добавьте путь к файлу, таким образом, это похоже:

session-setup-script=/usr/local/bin/photo.sh

Примечание по безопасности:: Ваш скрипт был бы запущен как корень.

0
ответ дан 29 September 2019 в 00:08

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

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