Resolvendo problema de desvio de trava para a conta de usuário expirada

1

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
    
por OttoTheBusDriver 25.12.2015 / 17:30

0 respostas