Eu criei um script que implantei nos computadores de meus filhos via Salt. O script implementa as horas de trabalho permitidas e funcionou bem, mas um dos meus filhos encontrou uma maneira de contornar isso e não consigo descobrir como consertar isso.
Eu usei timekpr, mas estava procurando por algo que eu pudesse controlar centralmente. Também descobri que o timekpr impedia que as tarefas de execução continuassem enquanto estavam bloqueadas.
Os computadores das crianças estão executando o Xubuntu 15.04, totalmente corrigido com login sem senha (existe uma senha, mas eles não precisam saber disso)
Se bloquearem a tela manualmente clicando no cadeado no menu do programa antes que o script bloqueie a sessão, eles poderão desbloquear a sessão mesmo quando a conta do usuário estiver no estado expirado. Eles só podem fazer isso uma vez antes do retorno esperado do comportamento.
Aqui está o meu script:
#!/bin/bash
users[0]='child1'
users[1]='child2'
users[2]='child3'
lock[0]=1930
lock[1]=1930
lock[2]=1930
unlock[0]=1300
unlock[1]=1300
unlock[2]=1300
# clean up at AT jobs that may already exist
for i in 'atq | cut -f1';
do
if at -c $i | grep -q '^/root/userRestrictions.sh$'
then
atrm $i
fi
done
currTime='date +%k%M'
for i in {0..2}
do
if id -u "${users[i]}" >/dev/null 2>&1; then
# username exists
if [ "$currTime" -ge ${unlock[i]} ] && [ "$currTime" -lt ${lock[i]} ]; then
# current time is between unlock and lock time
# unlock the users account
/usr/bin/chage -E -1 ${users[i]}
# run this script again at the lock time
atHour=$(( ${lock[i]} / 100 ))
# extract minutes and pad with zeros
atMinute=$(( ${lock[i]} % 100 ))
atMinute='printf %02d $atMinute'
echo "/root/userRestrictions.sh" | at "$atHour:$atMinute"
else
# current time is after lock time or before unlock time
# lock the users account
/usr/bin/chage -E 0 ${users[i]}
# lock screen if the user is logged in at all
if w | cut -d " " -f1 | grep -Fxq "${users[i]}"
then
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 dm-tool lock
fi
# run this script again at the unlock time
atHour=$(( ${unlock[i]} / 100 ))
# extract minutes and pad with zeros
atMinute=$(( ${unlock[i]} % 100))
atMinute='printf %02d $atMinute'
echo "/root/userRestrictions.sh" | at "$atHour:$atMinute"
fi
fi
done
Tags xubuntu security users shell-script