Bloker for login ved hård nedlukning


Source: Download script

Last Updated: 4. December 2024 by Agnete Moos (agms@sonderborg.dk)

Parameters:

Navn Type Standardværdi Påkrævet
Click to see the source code
#!/bin/sh

# SYNOPSIS
#    hard_shutdown_lockdown.sh [ENFORCE]
#
# DESCRIPTION
#    This script installs two system services:
#
#    shutdown_monitor.service & shutdown_monitor.timer - checks
#    for a shutdown_lockfile at boot, and if it does not exist,
#    locks the user account
#
#    create_shutdown_lockfile.service - creates a
#    shutdown_lockfile during a normal reboot/poweroff
#
#    Logins are disabled with the user account expiry mechanism.
#
#    It takes one optional parameter: whether or not to enforce this policy.
#    Use a boolean to decide whether or not to enforce the policy. A checked
#    box will enable the script, an unchecked box will remove the policy
#
#    For use with the "unexpire_user.sh" and
#    "detect_user_expired_event.py" script
#
# IMPLEMENTATION
#    copyright       Copyright 2021 Magenta ApS
#    license         GNU General Public License

# TECHNICAL NOTES
#    You can check whether a user has been expired by checking the last column for the user in /etc/shadow

set -x

if get_os2borgerpc_config os2_product | grep --quiet kiosk; then
  echo "Dette script er ikke designet til at blive anvendt på en kiosk-maskine."
  exit 1
fi

ACTIVATE=$1


if [ "$ACTIVATE" = "True" ]; then
    mkdir -p /usr/local/lib/os2borgerpc

    cat <<"END" > /usr/local/lib/os2borgerpc/create_shutdown_lockfile.sh
#!/bin/sh

touch /etc/os2borgerpc/shutdown_lockfile
END
    chmod 700 /usr/local/lib/os2borgerpc/create_shutdown_lockfile.sh

    cat <<"END" > /etc/systemd/system/create_shutdown_lockfile.service
[Unit]
Description=Run create_shutdown_lockfile.sh when service stops

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/usr/local/lib/os2borgerpc/create_shutdown_lockfile.sh

[Install]
WantedBy=multi-user.target
END
    systemctl enable --now create_shutdown_lockfile.service
    # Initially run create_shutdown_lockfile as the "OnBootSec" of check_shutdown_lockfile.py will fire immediately if the event was in the past:
    # "If a timer configured with OnBootSec= or OnStartupSec= is already in the past when the timer unit is activated, it will immediately elapse and the configured unit is started."
    /usr/local/lib/os2borgerpc/create_shutdown_lockfile.sh

    cat <<"END" > /usr/local/lib/os2borgerpc/check_shutdown_lockfile.py
#!/usr/bin/env python3

from os import remove
from os.path import exists
from subprocess import run

SHUTDOWN_FILE = "/etc/os2borgerpc/shutdown_lockfile"

# Old versions of this script expired to 1970-01-02 like lockdown_usb.sh
# They were changed to use different dates so we can distinguish which
# script locked the account from the security event directly
def main():
    """Check if shutdown_lockfile exists, if not, expire the user account."""
    if exists(SHUTDOWN_FILE):
        remove(SHUTDOWN_FILE)
    else:
        run(["usermod", "-e", "1970-01-04", "user"])


if __name__ == "__main__":
    main()
END
    chmod 700 /usr/local/lib/os2borgerpc/check_shutdown_lockfile.py

    cat <<"END" > /etc/systemd/system/shutdown_monitor.timer
[Unit]
Description=Run shutdown_monitor.service once at system boot

[Timer]
OnBootSec=0min

[Install]
WantedBy=timers.target
END

    cat <<"END" > /etc/systemd/system/shutdown_monitor.service
[Unit]
Description=OS2BorgerPC Shutdown monitoring service

[Service]
Type=oneshot
ExecStart=/usr/local/lib/os2borgerpc/check_shutdown_lockfile.py
END
    systemctl enable --now shutdown_monitor.timer

else
    systemctl disable --now shutdown_monitor.timer
    systemctl disable --now create_shutdown_lockfile.service
    rm -f /usr/local/lib/os2borgerpc/check_shutdown_lockfile.py \
            /etc/systemd/system/shutdown_monitor.service \
            /etc/systemd/system/shutdown_monitor.timer \
            /usr/local/lib/os2borgerpc/create_shutdown_lockfile.sh \
            /etc/systemd/system/create_shutdown_lockfile.service
fi

Beskrivelse

Dette script låser bruger-kontoen ved en hård nedlukning (f.eks. hvis man hiver strømstikket ud eller slukker maskinen på knappen). Dets primære formål er at være med til at forhindre borgere i at omgå scriptet “Bloker for login ved USB-event”.

SIKKERHEDSMÆSSIGE OVERVEJELSER: En BorgerPC kan kun overvåges af software såsom sikkerhedsscripts, så længe, den er tændt. Dvs. hvis Borger kan tilgå maskinen mens den er slukket, kan der indsættes en keylogger, uden at det kan detekteres. Derfor er dette script skrevet til at låse en maskine for login til Borger og give en advarsel hvis strømmen går på maskinen, eksempelvis ved tryk på sluk-knappen eller ved at hive strømstikket. Dette script låser IKKE maskinen hvis den lukkes ned på normal vis - eksempelvis ved at vælge “Luk ned” fra menuen, eller kørsel af scripts til genstart/nedlukning. Af denne grund er det også centralt for dette script, at Borgers mulighed for at lukke ned/genstarte fjernes. Dette er der et script til, som nævnes længere nede.

BESKRIVELSE: Det er en god idé at verificere at det virker, hvis computeren slukkes på knappen eller strømstikket fjernes.

Dette script bruges sammen:

  • Scriptet “Fjern Luk Ned, Genstart og Hviletilstand fra menuen” …så Borgeren ikke bare kan lukke computeren ned fra menuen, så fjernelse af strømstik eller knappen på maskinen er eneste mulighed for at slukke den.

Når man så oplever, at Borger-kontoen er blevet låst, kan den låses op med Scriptet: “Sæt Borger som aktiv efter blokeret login (lås op)”.

Dette script er blevet testet og virker på Ubuntu 22.04.

Parametre

  1. Aktivér:
    Sæt hak: Blokering af login ved hård nedlukning slås til
    Lad stå tom: Blokering af login ved hård nedlukning slås fra (standard)