#!/bin/bash

# Skrypt suspenduser blokujący konto użytkownika na nieokreślony czas.

homedir="/home"         # Katalog domowy użytkownika.
secs=10                 # Czas w sekundach, zanim użytkownik zostanie wylogowany.

if [ -z $1 ] ; then
  echo "Użycie: $0 nazwa_konta" >&2 ; exit 1
elif [ "$(id -un)" != "root" ] ; then
  echo "Błąd. Aby użyć tego skryptu, musisz być zalogowany jako użytkownik root." >&2; exit 1
fi

echo "Ustal nowe hasło dla konta $1."
passwd $1

# Sprawdzenie, czy użytkownik jest zalogowany, i wyrzucenie go z systemu.
if who|grep "$1" > /dev/null ; then

  for tty in $(who | grep $1 | awk '{print $2}'); do

    cat << "EOF" > /dev/$tty

*************************************************************
PILNA WIADOMOŚĆ OD ADMINISTRATORA:

Za $secs sekund zostaniesz wylogowany, a twoje konto zostanie zablokowane.
Zamknij natychmiast wszystkie używane aplikacje i wyloguj się.

Jeżeli masz pytania, skontaktuj się ze swoim przełożonym lub z Janem
Nowakiem, dyrektorem Działu Informatyki.
*************************************************************
EOF
  done

  echo "(Użytkownik $1 poinformowany, zwłoka $secs sekund)."

  sleep $secs

  jobs=$(ps -u $1 | cut -d\  -f1)

  kill -s HUP $jobs                  # Wysłanie sygnału przerywającego procesy użytkownika.
  sleep 1                            # Sekunda zwłoki...
  kill -s KILL $jobs > /dev/null 2>1 # ... i przerwanie wszystkich pozostałych procesów.

  echo "Użytkownik $1 był zalogowany i został wylogowany."
fi

# Na koniec ukrycie katalogu domowego użytkownika przed ciekawskimi.
chmod 000 $homedir/$1

echo "Konto $1 zostało zablokowane."

exit 0
