Wie kann ich den Zugriff auf eine Anwendung beschränken oder einschränken?

18

Mein Sohn hat in den vergangenen Weihnachten einen neuen Laptop erhalten, der hauptsächlich für die Nutzung in seiner neuen Schule bestimmt war. Und jetzt, da er einen eigenen Laptop hat, ist er begeistert, Steam installieren zu lassen.

Aber die Frau möchte, dass ich Steam entferne, weil der Laptop hauptsächlich für die Schule bestimmt ist. Ich würde das lieber nicht tun, wenn ich nicht muss.

Gibt es eine Möglichkeit, den Zugriff auf Steam einzuschränken oder anderweitig einzuschränken? Vielleicht ein Passwort bei Steam selbst oder feste Zeiten, zu denen es ausgeführt werden kann?

Im Idealfall muss es etwas ziemlich Einfaches sein , da meine Arbeit mich oft für längere Zeit von zu Hause fernhält (und von Computern, Telekommunikation und ...), und meine Frau sich mit Computern nicht so wohl fühlt wie ich, einfacher zu bedienen ist weitaus besser.

Sicher gibt es da draußen etwas , das diese Aufgabe erfüllen kann?

Gregory Opera
quelle
Sie können die Kindersicherung in Ihrem Router verwenden, um den Zugang zu Dampf zu beschränken, z. B. 1 Stunde am Tag. Steam verwendet die Ports UDP 27000 - 27015 für den Client-Datenverkehr. Wenn Sie diese Ports in Ihrem Router einschränken, kann sich Ihr Sohn nicht bei Steam anmelden.
Kev Inski
Die einfachste Lösung ist, ein Benutzerprofil auf Ihrem Ubuntu zu erstellen, auf dem Sie Steam installieren. Erstellen Sie ein Kennwort für das neue Benutzerprofil, das von Ihrem Sohn verwendet wird.
@Begueradj Kinder können schlau sein. Der physische Zugriff auf eine Maschine bedeutet einen möglichen Root-Zugriff, was bedeutet, dass Sie alles außer der Verschlüsselung umgehen können. Sie müssten das Basisverzeichnis dieses Benutzers verschlüsseln, um es dann sicher zu schützen.
Byte Commander
@Gregory Wie schlau ist dein Sohn mit Computern? Benötigen Sie eine 100% sichere Sache, oder reicht es aus, wenn der Zugriff auf Steam nicht einfach ist?
Byte Commander

Antworten:

2

Legen Sie ein Zeitlimit für einen Prozess oder eine Anwendung fest

Mit einem kleinen Hintergrundskript können Sie ein Zeitlimit für einen Prozess oder eine Anwendung festlegen.
Solange Ihr Benutzer das Administratorkennwort nicht kennt , wird es nicht zu leicht überschritten.

Die Lösung unten

Ist so ein kleines Hintergrundskript. Es begrenzt die Nutzung pro Tag auf eine festgelegte Anzahl von Minuten, die im Kopf des Skripts festgelegt werden. Einmal eingerichtet (was nicht allzu schwierig ist), läuft es sehr einfach, und danach sind keine weiteren Maßnahmen erforderlich.

Das Drehbuch

#!/usr/bin/python3
import subprocess
import os
import sys
import time

#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"

uselog = "/opt/limit/uselog"
datefile = "/opt/limit/currdate"

def read(f):
    try:
        return int(open(f).read().strip())
    except FileNotFoundError:
        pass

currday1 = read(datefile)

while True:
    time.sleep(10)
    currday2 = int(time.strftime("%d"))

    # check if the day has changed, to reset the used quantum
    if currday1 != currday2:
        open(datefile, "wt").write(str(currday2))
        try:
            os.remove(uselog)  
        except FileNotFoundError:
            pass

    try:
        # if the pid of the targeted process exists, add a "tick" to the used quantum
        pid = subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
        n = read(uselog)
        n = n + 1 if n != None else 0
        # when time exceeds the permitted amount, kill the process
        if n > minutes*6: 
            subprocess.Popen(["kill", pid])
        open(uselog, "wt").write(str(n))
    except subprocess.CalledProcessError:
        pass

    currday1 = currday2

Wie benutzt man

  1. Erstellen Sie auf Ihrem Desktop (oder anderswo) einen Ordner mit dem Namen: limit
  2. Kopieren Sie das Skript in eine leere Datei, speichern Sie es als limit_use(keine Erweiterung) im Ordner und machen Sie es ausführbar
  3. Bearbeiten Sie im Kopf des Skripts den zu beschränkenden Prozessnamen und die maximal zulässige Anzahl von Minuten. Im Beispiel:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the process name to limit below
    app = "gedit"
  4. Kopieren Sie den Ordner in das Verzeichnis /opt:

    cp -r /path/to/limit /opt
  5. Bearbeiten Sie /etc/rc.localnun das Skript, damit es rootbeim Start wie folgt ausgeführt wird:

    sudo -i gedit /etc/rc.local

    Kurz vor der Linie

    exit 0

    eine andere Zeile:

    /opt/limit/limit_use &

Das ist es

Wenn jemand versucht, das Hintergrundskript zu beenden:

Bildbeschreibung hier eingeben

(Aktion nicht erlaubt)

Erläuterung; wie es funktioniert

  • Das Skript prüft einmal pro 10 Sekunden, ob der Zielprozess ausgeführt wird. In diesem Fall wird der Gesamtnutzung ein "Punkt" hinzugefügt, der in einer Datei aufgezeichnet werden soll ( /opt/limit/uselog). Wenn das Tageslimit erreicht ist, lässt das Skript die Ausführung des Prozesses nicht mehr zu und beendet ihn, falls vorhanden.
  • Bei der Änderung des Tages (das Datum wird in einer Datei aufgezeichnet, sodass ein Neustart nicht hilfreich ist) wird die Protokolldatei gelöscht, sodass eine neue Nutzungsdauer aufgebaut werden kann.
  • Da das Skript beim Hochfahren ausgeführt wird , können rc.localnur Benutzer mit sudo-Berechtigungen das Skript stoppen, auch wenn der Benutzer den Prozessnamen kennt.

Stoppen Sie das Skript

Wenn Sie das Skript anhalten möchten, verwenden Sie den folgenden Befehl:

sudo kill "$(pgrep limit_use)"

Aber auch hier benötigen Sie das sudo-Passwort.




BEARBEITEN

Obwohl das obige Skript eine einigermaßen sichere Möglichkeit zur Einschränkung der Verwendung einer Anwendung bieten sollte, wie von @Bytecommander erwähnt, kann es übertroffen werden, wenn auch nicht sehr einfach. Die Kombination mit der folgenden Maßnahme macht es sehr unwahrscheinlich, dass dies geschieht, es sei denn, Ihr Sohn kennt das Setup und ist mit Linux / Ubuntu recht erfahren.

Zusätzliche Maßnahme

Etwas weiter von einer "einfachen Lösung" entfernt, aber dennoch nicht zu schwierig einzurichten, ist die folgende zusätzliche Maßnahme. Wenn unser Verdacht delinquent des Skript aus aufgerufen wird , finden würde /etc/rc.local, würde verwalten root werden, und entfernen Sie die Zeile in /etc/rc.local, oder wäre in der Lage , das Skript zu stoppen auf diese Weise kann wir ihn mit dem nächsten Problem konfrontieren kann: der Bildschirm schwarz nach Melden Sie sich an. Zusätzlich überprüft die Lösung, ob das Hintergrundskript 5 Minuten nach dem Neustart ausgeführt wird, andernfalls wird es schwarz.

Die zusätzliche Maßnahme ist eine Startüberprüfung, ob die Zeile /opt/limit/limit_use &vorhanden ist /etc/rc.local, und eine Überprüfung nach 5 Minuten, ob das Skript noch ausgeführt wird. Da das Skript von einem (von Startup Applications ausgeblendeten) Startprogramm ausgeführt /etc/xdg/autostartwird, ist es schwierig, herauszufinden, was gerade passiert, es sei denn, Sie wissen, wie es ausgeführt wird. Die Kombination dieser beiden Maßnahmen macht es unwahrscheinlich, dass Ihr Sohn es herausfindet, und wenn er es tut, wird ihn wahrscheinlich nichts aufhalten.

Wie stellt man das ein

Es sind zwei einfache Schritte erforderlich:

  1. Kopieren Sie den folgenden Code in eine leere Datei und speichern Sie ihn blackout.desktopauf Ihrem Desktop:

    [Desktop Entry]
    Name=not allowed
    Exec=/bin/bash -c "sleep 15 && /usr/local/bin/blackout.py"
    Type=Application
    Terminal=false
    NoDisplay=true

    Kopieren Sie die Datei nach /etc/xdg/autostart:

    sudo cp /path/to/blackout.desktop /etc/xdg/autostart
  2. Kopieren Sie das unten stehende Skript in eine leere Datei, speichern Sie es blackout.pyauf Ihrem Desktop, machen Sie es ausführbar und kopieren Sie es nach /usr/local/bin:

    cp /path/to/blackout.py /usr/local/bin

    Das Drehbuch

    #!/usr/bin/env python3
    import subprocess
    import time
    
    def dim_screen():
        screen = [
            l.split()[0] for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
            if " connected" in l
            ]
        for scr in screen:
            subprocess.Popen(["xrandr", "--output", scr, "--brightness", "0"])
    
    if not "/opt/limit/limit_use &" in open("/etc/rc.local").read():
        dim_screen()
    
    time.sleep(300)
    
    try:
        pid = subprocess.check_output(["pgrep", "limit_use"]).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        dim_screen()

Erläuterung

Starter in /etc/xdg/autostartstarten eine Anwendung (in diesem Fall die zusätzliche Sicherheitsüberprüfung) für alle Benutzer. Dies könnte lokal überschrieben werden, aber Sie müssen die Überprüfungsläufe kennen . Wenn Sie die Zeile NoDisplay=truein unseren Launcher einfügen, wird sie nicht lokal in Startup Applicationsangezeigt. Ohne zu wissen, dass sie vorhanden ist, ist es unwahrscheinlich, dass sie entdeckt wird.

Außerdem hat Ihr Sohn nur 15 Sekunden Zeit, um das herauszufinden (dann ist der Bildschirm schwarz), sodass er ein ernstes Problem haben würde, es sei denn, er ist ein Genie, hat viel Erfahrung mit Ubuntu und einen kreativen Kopf.

Jacob Vlijm
quelle
Aber wenn sich sein Sohn mit dem root-Passwort beim System anmelden kann, kann er dann das nicht bearbeiten rc.local?
Raphael
1
@Raphael das ist der Grund, warum ich erwähnt habe , solange der Benutzer kein Administrator ist . Aber wenn er es ist, hindert ihn praktisch nichts daran, irgendwann zu übertreffen, wenn er klug genug ist.
Jacob Vlijm
Ikr, wenn er sich gut mit Linux auskennt oder wenn er weiß, wie man effizient mit Google umgeht, würde letztendlich keine der Antworten funktionieren.
Raphael
1
@ByteCommander stimmt natürlich. Trotzdem scheint es ein angemessenes Gleichgewicht zwischen der gewünschten einfachen Lösung, einer begrenzten Zeit und einem angemessenen Maß an Sicherheit zu sein, wenn man das fragliche Interesse berücksichtigt (Begrenzung der Zeit, ausgegebenes Spiel).
Jacob Vlijm
1
@JacobVlijm Ja, natürlich. Ich weise nur darauf hin, dass sie vielleicht ihr 8-jähriges Kind auf diese Weise fernhalten, aber wenn es ein Teenager mit etwas technischem Wissen wird, müssen sie wissen, dass es keine 100% ige Sicherheit gibt. (Nicht, dass ich dem Teen etwas Freiheit lassen möchte)
Byte Commander
4

Nach meiner eigenen Erfahrung ist die Einschränkung des Zugangs zu Computerspielen eine der schwierigsten Aufgaben bei der Erziehung unserer Kinder. Natürlich möchten wir Eltern, dass sie ihre Computer hauptsächlich für die Schule benutzen, aber dies widerspricht stark den Absichten des Kindes. Sie werden uns dafür hassen, dass wir ihnen Hardware geben, die nur für die Schule geeignet ist.

Und natürlich haben wir auch wollen , dass sie lernen , wie sie ihre Computer in einer vernünftigen Art und Weise zu verwenden, einschließlich , wie man es nicht nur für Arbeit , sondern auch für die Freizeit. Dies beinhaltet das Spielen und Ansehen von Videos.

Leider ist eine gut gewartete und funktionierende Kindersicherung zur Einschränkung des Computer -Aufwands für Ubuntu so gut wie nicht verfügbar. Ein weiteres wichtiges Problem ist, dass alle Maßnahmen, die wir ergriffen haben, vergebens waren , sobald sie kluge Kinder waren . Sie werden immer Wege finden, um unsere Einschränkungen zu überwinden, falls sie wirklich schlau sind, ohne dass wir es bemerken können.

Blockierungssoftware oder PAM-Beschränkungen, die auf dem Computer des Kindes ausgeführt werden, sind nur vorübergehend und können früher oder später sehr einfach überwunden werden. Deshalb haben wir uns entschlossen, den passwortgeschützten Router die Arbeit machen zu lassen, wo der physische Zugriff viel einfacher gesteuert werden kann.

Was wir hier also tun, um das Spielen im Moment etwas einzuschränken, ist eine Kombination aus allem Folgenden:

  • Sprechen Sie mit ihnen , um ihnen beizubringen, wie und wann sie Computer in der Freizeit und für die Schule verwenden sollen. Dies ist ein ständig andauernder, ziemlich langwieriger Prozess, der zu endlosen Diskussionen und Auseinandersetzungen führt. Aber es ist das, was wir für das Einzige halten, was auf lange Sicht Bestand haben wird.
  • Keine Administratorrechte für ihr Konto. Dies ist eine vorübergehende Sache. Wir wissen, dass sie sich sudofrüher oder später in die Gruppe einfügen können. Der Plan ist, dass sie uns danach fragen, anstatt dies zu verbergen.
  • Machen Sie einen Vertrag für klar definierte Rechenzeiten. Sie müssen wissen, wofür und wie lange sie ihre Maschinen benutzen dürfen. Sie müssen lernen, diese Zeit für Schule und Freizeit aufzuteilen .
  • Blockieren Sie das gesamte Internet während der Schlafstunden .

Um die Erfüllung des Vertrags über die Computernutzung für uns und die Kinder zu vereinfachen, haben wir die folgenden Einschränkungen installiert:

  • Verwenden Sie einen passwortgeschützten Router , der eine Beschränkung des Internetzugriffs auf der Basis einer Hardware (MAC) und eines Zeitplans ermöglicht. Solange sie nicht über MAC-Spoofing Bescheid wissen, wird dies recht gut funktionieren. Es wird auch den Zugriff über ihre Smartphones und Tablets einschränken. Dies funktioniert natürlich nicht, wenn in Ihrer Nachbarschaft ein offenes drahtloses Netzwerk vorhanden ist.
  • Installieren Sie einen SSH-Server auf den Computern der Kinder, um den Stecker herauszuziehen, falls sie sich in ihren eigenen Absichten verlaufen haben. Dies ist für Notfälle, wir sind froh, dass wir nicht viel gebraucht hatten.
  • Installierte eine DNS-Blacklist (über den Router, nicht über den Computer!), Die den Zugang zum schlechtesten blockieren sollte.

Durch das Blockieren des Internetzugangs werden Spiele effektiv deaktiviert, wenn für dieses Spiel ein Internetzugang wie Steam , Minecraft oder andere Gamigserver erforderlich ist. Dies hat jedoch keine Auswirkung auf Spiele, die offline laufen.

Takkat
quelle
Beziehen Sie sich auf das Herunterfahren mit sshoder schließen Sie nur die Anwendung?
Raphael
Hängt von der Situation ab ... SSH kann alles, Herunterfahren, Benutzer töten, App töten, Hacks rückgängig machen, Benutzer von Sudoern entfernen, ... Für SSH haben wir ein übergeordnetes Administratorkonto für alle Kinderboxen.
Takkat
Schön, Sie sind der erste, der eine zusätzliche Sicherheitsebene hat, mit Ausnahme aller lokalen Dinge, die zurückgesetzt werden können, wenn sie root werden (was nicht verhindert werden kann, wenn sie physischen Zugriff haben).
Byte Commander
0

Dies kann durch die Verwendung von Shell-Skripten erreicht werden.

Das erste Skript soll töten Steam, sobald es ausgeführt wird:

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

Speichern Sie es als /path/to/anyname.shund fügen Sie es der Liste der Startanwendungen hinzu.

Dieses Skript prüft jeden geöffneten Prozess, der steamjede Sekunde benannt wird, und wenn es einen findet, bricht es ihn ab.

Sie benötigen jedoch eine Lösung steam, die zu einem bestimmten Zeitpunkt ausgeführt werden kann, damit Ihr Sohn in diesem Zeitraum Spiele spielen kann. Dazu müssen Sie ein anderes Skript schreiben:

#!/bin/bash

    echo "pkill anyname.sh" | at 10:00

exit 0

Speichern Sie es als /path/to/anyname2.shund fügen Sie es Ihrer Liste der Startanwendungen hinzu.

Dieses Skript beendet das erste Skript um 10:00 Uhr. Also, wenn dein Sohn Steamum 10:00 Uhr rennt . Er wird es jetzt spielen können.

Das dritte Skript ist das erneute Starten des ersten Skripts zu einem anderen Zeitpunkt, sodass es Steamnach einer bestimmten Zeit abbricht und Ihr Sohn keine Spiele Steammehr spielen kann.

#!/bin/bash

    echo "bash /path/to/anyname.sh" | at 12:00

exit 0

Speichern Sie es als /path/to/anyname3.shund fügen Sie es Ihrer Liste der Startanwendungen hinzu.

Stellen Sie sicher, dass diese Pfade verborgen bleiben, damit Ihr Sohn es nicht herausfindet.

Raphael
quelle
Gibt es keinen Weg, wie wir verhindern können, dass es startet, anstatt es jedes Mal zu töten, wenn es startet?
Edward Torvalds
@edwardtorvalds - Ich kenne keine, also habe ich diese Lösung gepostet.
Raphael
Ich stimme Ihrer Antwort zu, aber das OP benötigt eine
Es ist einfach und leicht. Alles, was Sie tun müssen, ist, die Skripte zu kopieren und einzufügen. Speichern Sie diese Dateien und fügen Sie sie zu Startanwendungen hinzu. Vergessen Sie sie dann.
Raphael
kill loop - das dreckigste was ich mir vorstellen kann.
Croll
0

Warum nicht neues Benutzerkonto (über Systemeinstellungen ). Dies ist die einzige Methode unter Linux für "Berechtigungen".

  1. Neuer Benutzer "SteamUser" sollte nicht in Sudoern sein (nur ein eingeschränktes Konto).
  2. Dann erstelle ein zweites Konto mit dem Namen "SuperAdmin" und lege es als sudoers-Konto an (root-Zugriff). Aber bewahren Sie das Passwort nur bei sich auf.
  3. Dann entferne den Account deines Sohnes von den Sudoern. ( sudoGruppe). Dann hat dieses Konto keinen Root-Zugriff, es kann keine Software installieren oder entfernen und keine systemweiten Einstellungen ändern.
  4. Melden Sie sich bei Ihrem "SuperAdmin" -Konto an und ändern Sie den Besitz von Steam-Binärdateien und Steam-Spiele- Ordnern, um zu verhindern, dass sie von anderen Benutzern außer "SteamUser" ausgeführt werden. Dies beinhaltet das Entfernen des Lese-, Schreib- und Ausführungszugriffs von jedem außer "SteamUser".

Einige Notizen ..

  • Es gibt keine Möglichkeit, einen Root-Zugriff mit dem Konto Ihres Sohnes zu hinterlassen, da sonst die Berechtigungskontrolle mit chown / chmod leicht umgangen werden kann.
  • Andere Vorschläge, die auf Hintergrundskripten basieren, sind nur instabiles Durcheinander. Das heißt, sie sind nicht vielversprechend. Sie sind jedoch möglicherweise einfach einzurichten.
  • Ordnerpfade für die Übertragung an "SteamAccount" sind: /home/son/.steamund natürlich die Binärdatei/usr/games/steam
  • Um Steam zu spielen, ist ein "SteamUser" -Passwort erforderlich (Sie müssen sich mit "SteamUser" anmelden, damit Steam ausgeführt wird. Sie können versuchen, nach Methoden zu suchen, mit denen die Sitzung nach einiger Zeit abläuft, um ein zu langes Spielen zu verhindern. Ich bin Ich bin nicht sicher, ob es solche Tools gibt, aber es ist technisch möglich, Zeitlimits festzulegen, aber für Sitzungen, nicht für Programme.
Croll
quelle
Ah, ich glaube, ich habe meinen Downvoter gefunden ...
Jacob Vlijm
Dies ist nicht wirklich sicher, da intelligent genug Kinder (es reicht bereits aus, Google zu verwenden und eine Schritt-für-Schritt-Anleitung zu befolgen) Benutzerbeschränkungen leicht umgehen können, wenn sie physischen Zugriff haben.
Byte Commander
@ByteCommander ist zumindest zuverlässiger als Hintergrundskripte. Aber ja, du hast recht. Genau wie unter Windows. Wie überall.
Croll
Nichts für ungut, aber wie ist das sicherer?
Jacob Vlijm
Und wie möchten Sie ein Zeitlimit für die Dauer festlegen, für die das Kind Steam verwenden darf? Und was ist mit den erlaubten Schulsachen? Ein anderer Account dafür? Ich persönlich hasse Systeme mit zu vielen Konten pro Person, weil sie wegen nicht gemeinsam genutzter Einstellungen usw. nicht zu benutzen sind.
Byte Commander