Como faço para “bloquear” minha caixa de Linux por algumas horas?

0

Como uso excessivamente meu computador, gostaria de bloqueá-lo por algumas horas, por exemplo, todos os dias, de 23 a 7, para que eu não possa usá-lo nesse intervalo de tempo.

Atualmente, estou usando crontab para suspender / desligar o computador quando chegar a hora, e faço isso a cada minuto, de modo que - em geral - se eu tentar fazer o login ou ligar o computador, tem apenas alguns segundos antes de ser suspenso novamente. A questão é que esses poucos segundos são suficientes para mudar o crontab e bloquear o mecanismo.

Então, pensei em bloquear o processo de login completamente (mesmo para o root!) nessas horas, para que ninguém pudesse acessar o computador de qualquer maneira, de 23 para 7. Se eu quisesse desabilitar esse comportamento, eu tive que faça isso de antemão.

Então, como posso configurar minha caixa do Linux para que, por algumas horas, ninguém possa logar? Devo usar o PAM? Se sim, como?

Nota: Eu gostaria de evitar o registro em log tanto no GDM quanto no shell.

    
por AkiRoss 10.11.2016 / 11:54

5 respostas

2

Outra abordagem é desativar o mouse e o teclado (assumindo um sistema com dispositivos de entrada USB):

00 23 * * * rmmod usbhid
00  7 * * * modprobe usbhid

Isso não impedirá que você desligue e ligue o sistema novamente, o que reativaria o teclado e o mouse ... Você poderia brincar com a lista negra do módulo se quiser evitar isso, mas provavelmente precisaria para reconstruir seu initramfs toda vez ( usbhid precisa ser carregado muito cedo durante a inicialização, pois você deseja que um teclado funcione para consertar as coisas quando o sistema não puder inicializar).

Se usbhid estiver embutido no kernel em seu sistema ( por exemplo. Fedora), você ainda pode conseguir o mesmo efeito desassociando todos os dispositivos HID; a parte difícil então é ligá-los novamente às 7h - você precisará armazenar em algum lugar os drivers dos quais eles estavam livres (a menos que haja uma maneira de reenumerá-los). Para desvincular todos os dispositivos:

for device in /sys/bus/hid/devices/*; do
    echo ${device##*/} > ${device}/driver/unbind
done

(com verificação de erro apropriada, claro). Para religar, você precisa lembrar qual driver o ${device}/driver apontou e echo o identificador do dispositivo para bind no diretório do driver.

    
por 10.11.2016 / 12:26
4

Eu sugeriria um ataque em duas frentes:

  1. Configure um script (via crontab do root) que desligará (suspenderá) o computador às 23:00 horas. Configure-o para rodar a cada minuto de 2300 a 2315, para o caso de algo cancelar o primeiro. Isso vai te levar pra fora da hora de dormir.
  2. Defina em ~/.bashrc e também em root, um comando para interromper o sistema se o tempo estiver entre 2300 e 0700 horas. Isso impedirá o login durante esses horários.

No entanto, como mencionei nos comentários, nada você pode configurar será infalível. Você tem acesso root à sua própria caixa.

Este é um exemplo clássico de procurar uma solução técnica para um problema humano; Se você quiser dormir entre 2300 e 0700 horas, precisará lidar com sua autodisciplina nesse ponto de outras maneiras. O Root não pode fazer isso por você, porque você é root. vai assumir responsabilidade pessoal.

Eu tenho muitas informações altamente viáveis sobre este ponto, mas vou retê-lo como seria fora do tópico. :)

    
por 10.11.2016 / 12:22
1

pare o gdm e o getty por essas horas.

    
por 10.11.2016 / 11:58
1

Hahaha, isso parece divertido.

Você pode adicionar um pequeno script em seu .bashrc (provavelmente também root) para sair do shell durante essas horas. Isso impede que você abra um terminal e altere seu crontab durante essa janela de um minuto.

Ou você pode editar sua cláusula /etc/init.d/gdm e adicionar uma cláusula if impedindo que o daemon inicie durante essas horas.

    
por 10.11.2016 / 11:59
1

Você poderia criar um serviço, digamos self_discipline , criar um serviço varia dependendo do sistema mas há muitos guias on-line .

E um exemplo de script que o serviço poderia iniciar seria algo assim.

#!/bin/bash
while [ true ]
do
   HOUR="$(date +%H)"
   if [ "$HOUR" -gt 23 ] || [ "$HOUR" -lt 07 ]
   then
      shutdown -h now
   fi
   sleep 60                                                                                
done 

Em seguida, basta definir este serviço para ser executado na inicialização, o que deve impedir que você possa desabilitá-lo simplesmente reinicializando-o. Se você quiser desativá-lo antes do tempo, você pode apenas service self_discipline stop

    
por 10.11.2016 / 15:31

Tags