Skip to content

Instantly share code, notes, and snippets.

@krushik
Last active May 13, 2017 06:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krushik/1e770b8acd37fdbb1ed9abcd9eddd972 to your computer and use it in GitHub Desktop.
Save krushik/1e770b8acd37fdbb1ed9abcd9eddd972 to your computer and use it in GitHub Desktop.
наброски для юбикей-лока

автостарт ssh-agent'а

поставить keychain для упрощения управлением ssh-агентами

sudo apt install keychain

заполнить ~/.bashrc для автостарта и дедуплекации агентов

автовыгрузка ключей юбикея при скринлоке

положить скрипт ~/.kde/Autostart/screenlock-yubikey-unload.sh (должно быть можно и в более общем X session стартапе). висит демоном и слушает события скринлока

автоскринлок при вытаскивании юбикея

положить скрипт /usr/local/bin/yubikey-screen-lock.sh (форс скринлока. протестировано только на kde4)

заполнить /etc/udev/rules.d/85-yubikey-screen-lock.rules (чтобы вызывался скрипт скринлока). после этого sudo udevadm control --reload-rules

NB: средствами своего DE обязательно настроить жесткий форс скринлока через 5 мин неактивности. желательно еще средствами DE через 30 мин запуск скрипта типа такого:

#!/bin/bash
keepass2 --lock-all
qdbus org.kde.kwalletd /modules/kwalletd org.kde.KWallet.closeAllWallets
eval $(/usr/bin/keychain -q --eval --noask --agents ssh) ; ssh-add -e /usr/lib/x86_64-linux-gnu/libykcs11.so 2>/dev/null

опционально, еще поставить blueproximity, в нем Locking command qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock при Distance 10 / Duration 20

export SSH_ASKPASS=/usr/bin/ksshaskpass # для kwallet, чтобы обычный id_rsa (не юбикей) автоактивировал после мастер-пароля
eval $(/usr/bin/keychain -q --eval --agents ssh id_rsa) # авто-детект, не надо ли ssh-agent заспавнить. подгружает правильный env
k() { eval $(/usr/bin/keychain -q --eval --agents ssh id_rsa); }
yl() { ssh-add -s /usr/lib/x86_64-linux-gnu/libykcs11.so -t 10800 < /dev/null; } # подгрузить юбикей макс. на 3 часа
yu() { ssh-add -e /usr/lib/x86_64-linux-gnu/libykcs11.so 2>/dev/null; }
y() { k; yu; yl; } # основной алиас. юзать, когда ssh не срабатывает (после перевтыкания юбикея, например)
# /etc/udev/rules.d/85-yubikey-screen-lock.rules
SUBSYSTEM=="usb", ACTION=="remove", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}="0010", RUN+="/usr/local/bin/yubikey-screen-lock.sh enable"
#!/bin/bash
# ~/.kde/Autostart/screenlock-yubikey-unload.sh
dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
while read x; do
case "$x" in
# You can call your desired script in the following line instead of the echo:
*"boolean true"*)
eval $(/usr/bin/keychain -q --eval --noask --agents ssh)
ssh-add -e /usr/lib/x86_64-linux-gnu/libykcs11.so 2>/dev/null
;;
*"boolean false"*)
#echo SCREEN_UNLOCKED
;;
esac
done
#!/bin/bash
# /usr/local/bin/yubikey-screen-lock.sh
# based on https://www.dalemacartney.com/2013/01/14/locking-and-unlocking-the-gnome3-session-with-a-yubikey/
# NB: протестировано только на kde4! для других возм-но надо подкорректировать check_* и команды лок-скрина
log="/var/log/yubilock.log"
user=`ps aux | grep -v root | grep session | head -n 1 | awk '{print $1}'`
check_gnome=$(ps -aux | awk '{print $11}' | grep ^gnome-session)
if [[ -n $check_gnome ]]
then
DESKTOP=gnome
sessionid=`/bin/loginctl list-sessions | grep ${user} | awk '{print $1}'`
fi
check_cinnamon=$(ps -aux | awk '{print $11}' | grep ^cinnamon-session)
if [[ -n $check_cinnamon ]]
then
DESKTOP=cinnamon
fi
check_lxde=$(ps -aux | awk '{print $11}' | grep lxsession)
if [[ -n $check_lxde ]]
then
DESKTOP=lxde
fi
check_xfce=$(ps -aux | awk '{print $11}' | grep ^xfce4-session)
if [[ -n $check_xfce ]]
then
DESKTOP=xfce
fi
check_kde=$(ps -aux | awk '{print $11}' | grep kde)
if [[ -n $check_kde ]]
then
DESKTOP=kde
fi
echo "$(date) $(whoami) '$0' '$1' | Desktop Environment = '$DESKTOP'" >> ${log}
case "$1" in
enable)
if [ -n ${user} ]
then
case $DESKTOP in
gnome)
/bin/loginctl lock-session $sessionid
;;
cinnamon)
/bin/su ${user} -c "DISPLAY=:0 /usr/bin/cinnamon-screensaver-command -a"
;;
lxde)
/bin/su ${user} -c "DISPLAY=:0 /usr/bin/xscreensaver-command -activate"
;;
xfce)
/bin/su ${user} -c "DISPLAY=:0 /usr/bin/xflock4"
;;
kde)
#/bin/su ${user} -c "DISPLAY=:0 qdbus org.kde.screensaver /ScreenSaver Lock"
# более общий вариант
/bin/su ${user} -c "DISPLAY=:0 qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock"
;;
esac
fi
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment