Я пытаюсь отправить уведомление при входе в систему через PAM, но я не могу понять, как отправить его пользователю, который входит в систему.
Я настраиваю свой PAM для выполнения сценария каждый раз, когда пользователь входит в систему. Проблема в том, что мне нужно отправить уведомление, если были какие-либо попытки входа в систему (это часть более крупной меры безопасности, которую я пытаюсь добавить, где мой ноутбук принимает изображение с веб-камеры при неудачном входе в систему и уведомляет меня, когда я снова вхожу в систему, так как мои одноклассники почему-то любят пытаться угадать мой пароль). Проблема в том, что строка в моем файле .sh, которая отправляет уведомление пользователя, отправляет его пользователю root, поскольку это «пользователь», который выполняет скрипт, я хочу, чтобы мой скрипт отправлял уведомление моему текущему пользователю (называется «andreas» ), но у меня проблемы с этим.
Вот строка, которую я добавил в конец файловой системы PAM:
auth [default=ignore] pam_exec.so /etc/lockCam/call.sh
А вот и файл call.sh:
#!/bin/sh
/etc/lockCam/notifier.sh &
Причина, по которой я вызываю другой файл, заключается в том, что я хочу, чтобы он работал в фоновом режиме, ПОКА процесс входа в систему продолжается, таким образом, процесс не замедляет вход в систему.
Вот скрипт, который затем выполняется:
#!/bin/sh
#sleep 10s
echo -e "foo" > "/etc/lockCam/test"
#This line is simply to make sure that i know that my script was executed
newLogins=`sed -n '3 p' /etc/lockCam/lockdata`
if [ $newLogins -gt 0 ]
then
su andreas -c ' notify-send --urgency=critical --expire-time=6000 "Someone tried to log in!" "$newLogins new lockCam images!" && exit'
callsInRow=`sed -n '2 p' /etc/lockCam/lockdata`
crntS=$(date "+%S")
crntS=${crntS#0}
crntM=$(date "+%M")
crntM=${crntM#0}
crntH=$(date "+%H")
crntH=${crntH#0}
((crntTime = $crntH \* 60 \* 60 + $crntM \* 60 + $crntS ))
#This whole process is absolutely stupid but i cant figure out a better way to make sure none of the integers are called "01" or something like that, which would trigger an error
echo -e "$crntTime\n$callsInRow\n0" > "/etc/lockCam/lockdata"
fi
exit 0
И здесь я ДУМАЮ, что это моя ошибка, строка «su andreas -c....», скорее всего, отформатирована неправильно или я делаю что-то еще неправильно, все выполняется при входе в систему, ЗА ИСКЛЮЧЕНИЕМ уведомления не появляется. Если я выполняю скрипт с терминала, когда я уже вошел в систему, уведомления также не будет, если только я не удалю часть «su andreas -c» и просто не сделаю «уведомление-отправить ...», но это не отправит уведомление, когда я вхожу в систему, и я думаю, что это потому, что уведомление отправляется пользователю root, а не «andreas».