Comment puis-je limiter ou restreindre l'accès à une application?

18

Mon fils a reçu un nouvel ordinateur portable à Noël dernier, principalement pour une utilisation dans sa nouvelle école ... Et maintenant qu'il a son propre ordinateur portable, il est content d'avoir installé Steam.

Mais la femme veut que je supprime Steam, car l'ordinateur portable est principalement destiné à l'école ... Je préfère ne pas le faire, si je n'ai pas à le faire.

Existe-t-il un moyen de restreindre ou de limiter l'accès à Steam? Peut-être un mot de passe sur Steam lui-même, ou définir des heures pendant lesquelles il peut être exécuté?

Idéalement , cela doit être quelque chose d'assez simple à utiliser car mon travail m'éloigne souvent de la maison (et des ordinateurs, des télécommunications et ...) pendant de longues périodes et alors que ma femme n'est pas aussi à l'aise avec les ordinateurs que moi, plus facile à utiliser est bien mieux.

Il y a sûrement quelque chose qui peut accomplir cette tâche?

Gregory Opera
la source
Vous pouvez utiliser la sécurité enfants de votre routeur pour limiter l'accès à la vapeur, par exemple 1h par jour. Steam utilise les ports UDP 27000 - 27015 pour le trafic client. Si vous limitez ces ports dans votre routeur, votre fils ne pourra pas se connecter à Steam.
Kev Inski
La solution la plus simple consiste à créer un profil utilisateur sur votre Ubuntu sur lequel vous installez Steam. Créez un mot de passe pour le nouveau profil utilisateur qui sera utilisé par votre fils.
@Begueradj Kids peut être intelligent. Et l'accès physique à une machine signifie un accès root possible, ce qui signifie que vous pouvez tout contourner sauf peut-être le cryptage. Vous devrez alors crypter le répertoire personnel de cet utilisateur pour le protéger en toute sécurité.
Byte Commander
@Gregory Votre fils est-il intelligent avec les ordinateurs? Avez-vous besoin d'une solution 100% sûre, ou est-ce suffisant si l'accès à Steam est simplement non trivial?
Byte Commander

Réponses:

2

Fixer un délai pour un processus ou une demande

Avec un petit script d'arrière-plan, vous pouvez définir un délai pour un processus ou une application.
Tant que votre utilisateur ne connaît pas le mot de passe de l'administrateur , il n'est pas trop facilement dépassé.

La solution ci-dessous

Est-ce un si petit script d'arrière-plan. Il limite l'utilisation par jour à un nombre défini de minutes, à définir en tête du script. Une fois installé (ce qui n'est pas trop difficile), il fonctionne très facilement et aucune action supplémentaire n'est nécessaire par la suite.

Le script

#!/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

Comment utiliser

  1. Sur votre bureau (ou ailleurs), créez un dossier nommé: limit
  2. Copiez le script dans un fichier vide, enregistrez-le sous limit_use(sans extension) dans le dossier et rendez-le exécutable
  3. Modifiez dans la tête du script le nom du processus à limiter et le nombre maximum de minutes autorisées. Dans l'exemple:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the process name to limit below
    app = "gedit"
  4. Copiez le dossier dans le répertoire /opt:

    cp -r /path/to/limit /opt
  5. Maintenant éditez /etc/rc.localpour que le script s'exécute comme rootau démarrage:

    sudo -i gedit /etc/rc.local

    Juste avant la ligne

    exit 0

    une autre ligne:

    /opt/limit/limit_use &

C'est ça

Lorsque quelqu'un essaie de tuer le script d'arrière-plan:

entrez la description de l'image ici

(action non autorisée)

Explication; Comment ça fonctionne

  • Une fois toutes les 10 secondes, le script vérifie si le processus ciblé est en cours d'exécution. Si c'est le cas, il "ajoute" un "point" à une utilisation totale, à enregistrer dans un fichier ( /opt/limit/uselog). Si la limite journalière est atteinte, le script ne permet plus au processus de s'exécuter, le tuant s'il existe.
  • Lors du changement de jour (la date est enregistrée dans un fichier, donc le redémarrage n'aidera pas), le fichier journal est supprimé, ce qui permet à une nouvelle durée d'utilisation de s'accumuler.
  • Étant donné que le script s'exécute au démarrage , rc.localseuls les utilisateurs disposant des privilèges sudo peuvent arrêter le script, même si l'utilisateur ne connaît pas le nom du processus.

Arrêtez le script

Si vous souhaitez arrêter le script, utilisez la commande:

sudo kill "$(pgrep limit_use)"

Mais encore une fois, vous auriez besoin du mot de passe sudo pour le faire.




ÉDITER

Bien que le script ci-dessus devrait fournir un moyen raisonnablement sûr de limiter l'utilisation d'une application, comme mentionné par @Bytecommander, il peut être dépassé, mais pas très facilement. La combinaison avec la mesure ci-dessous rendra très peu probable que cela se produise, sauf si votre fils connaît la configuration et est assez expérimenté avec Linux / Ubuntu.

Mesure supplémentaire

Un peu plus loin d'une «solution simple», mais toujours pas trop difficile à mettre en place est la mesure supplémentaire ci-dessous. Si notre délinquant suspect découvre que le script est appelé /etc/rc.local, parvient à devenir root et supprime la ligne /etc/rc.local, ou peut arrêter le script de cette façon, nous pouvons le confronter au problème suivant: l'écran s'éteint après connectez-vous. De plus, la solution vérifie si le script d'arrière-plan s'exécute au bout de 5 minutes après le redémarrage, en noircissant sinon.

La mesure supplémentaire est une vérification de démarrage si la ligne /opt/limit/limit_use &est présente dans /etc/rc.local, et une vérification après 5 minutes si le script fonctionne toujours. Étant donné que le script s'exécute à partir d'un lanceur (caché des applications de démarrage), /etc/xdg/autostartil sera assez difficile de savoir ce qui se passe, sauf si vous savez comment cela se fait. La combinaison de ces deux mesures fait qu'il est peu probable que votre fils le découvre, et s'il le fait, probablement rien ne l'arrêtera.

Comment installer

Deux étapes simples sont impliquées:

  1. Copiez le code ci-dessous dans un fichier vide, enregistrez-le comme blackout.desktopsur votre bureau:

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

    Copiez le fichier dans /etc/xdg/autostart:

    sudo cp /path/to/blackout.desktop /etc/xdg/autostart
  2. Copiez le script ci-dessous dans un fichier vide, enregistrez-le comme blackout.pysur votre bureau, rendez-le exécutable et copiez-le dans /usr/local/bin:

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

    Le script

    #!/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()

Explication

Les lanceurs en /etc/xdg/autostartlanceront une application (dans ce cas le contrôle de sécurité supplémentaire) pour tous les utilisateurs. Cela pourrait être remplacé localement, mais vous devez connaître les vérifications. En mettant la ligne NoDisplay=truedans notre lanceur, elle n'apparaîtra pas localement Startup Applications, donc sans savoir qu'elle existe, il est peu probable qu'elle soit découverte.

De plus, votre fils n'a que 15 secondes pour le découvrir (puis l'écran est noirci), il aurait donc un problème grave, à moins qu'il ne soit génial, ait beaucoup d'expérience avec Ubuntu et un esprit créatif.

Jacob Vlijm
la source
Mais si son fils peut se connecter au système en utilisant le mot de passe root, ne pourra-t-il pas modifier le rc.local?
Raphael
1
@Raphael, c'est pourquoi je l'ai mentionné tant que l'utilisateur n'est pas administrateur . Mais s'il l'est, pratiquement rien ne l'empêchera de surpasser éventuellement s'il est assez intelligent.
Jacob Vlijm
Ikr, s'il connaît bien Linux ou s'il sait comment utiliser Google efficacement, finalement aucune des réponses ne fonctionnerait de toute façon.
Raphael
1
@ByteCommander vrai bien sûr. Néanmoins, il semble un équilibre raisonnable de la solution simple demandée , un temps limité et un niveau de sécurité raisonnable, compte tenu de l'intérêt en question (limitation du temps, jeu passé).
Jacob Vlijm
1
@JacobVlijm Oui, bien sûr. Je souligne simplement qu'ils peuvent garder leur enfant de 8 ans de cette façon, mais quand il devient un adolescent avec des connaissances techniques, ils doivent savoir qu'il n'y a pas de sécurité à 100%. (Non pas que je ne voudrais pas donner à l'adolescent un peu de liberté)
Byte Commander
4

D'après ma propre expérience, restreindre l'accès aux jeux informatiques est l'une des tâches les plus difficiles à éduquer nos enfants. Bien sûr, nous, les parents, voulons qu'ils utilisent leurs ordinateurs principalement pour l'école, mais cela contredit fortement les intentions de l'enfant. Ils nous détesteront de leur avoir donné du matériel utilisable uniquement pour l'école.

Et bien sûr, nous voulons également qu'ils apprennent à utiliser leur ordinateur de manière sensée, y compris à l'utiliser non seulement pour le travail mais aussi pour les loisirs. Cela comprend les jeux et regarder des vidéos.

Malheureusement, des contrôles parentaux bien entretenus et efficaces pour restreindre l'informatique de l'enfant sont presque indisponibles pour Ubuntu. Un autre problème majeur est que dès qu'ils sont des enfants intelligents, toutes les mesures que nous avons prises deviennent vaines. Ils trouveront toujours des moyens de surmonter nos restrictions, au cas où ils seraient vraiment intelligents sans que nous puissions même le remarquer.

Tout logiciel de blocage ou restriction PAM s'exécutant sur l'ordinateur de l'enfant ne sera que temporaire et pourra tôt ou tard être surmonté très facilement. Par conséquent, nous avons décidé de laisser le routeur protégé par mot de passe faire le travail, où l'accès physique peut être contrôlé beaucoup plus facilement.

Donc, ce que nous faisons ici pour limiter quelque peu le jeu en ce moment est une combinaison de tous les éléments suivants:

  • Parlez-leur pour leur expliquer comment et quand utiliser les ordinateurs pour les loisirs et quand les utiliser pour l'école. Il s'agit d'un processus continu, plutôt fastidieux, qui mène à des discussions et des débats sans fin. Mais c'est ce que nous pensons être la seule chose qui durera à long terme.
  • Aucune autorisation d'administrateur sur leur compte. C'est une chose temporaire. Nous savons qu'ils pourront se mettre sudotôt ou tard dans le groupe. Le plan est qu'ils nous le demanderont plutôt que de le faire en cachette.
  • Faites un contrat pour des temps de calcul clairement définis. Ils doivent savoir pendant combien de temps et pendant combien de temps ils sont autorisés à utiliser leurs machines. Ils doivent apprendre à partager cette période pour l'école et les loisirs.
  • Bloquez durement tout Internet pendant les heures de sommeil .

Pour faciliter l'exécution du contrat d'utilisation de l'ordinateur pour les enfants et pour nous, nous avons installé les restrictions suivantes:

  • Utilisez un routeur protégé par mot de passe qui permet de restreindre l'accès à Internet sur une combinaison d'un matériel (MAC) et d'un calendrier. Tant qu'ils ne connaissent pas l'usurpation d'adresse MAC, cela fonctionnera très bien. Il restreindra également l'accès via leurs téléphones intelligents et tablettes. Bien sûr, cela ne fonctionnera pas s'il y avait un réseau sans fil ouvert dans votre quartier.
  • Installez un serveur SSH sur les ordinateurs des enfants pour débrancher au cas où ils se perdraient dans leurs propres intentions. C'est pour les cas d'urgence, nous sommes heureux de ne pas avoir eu besoin de beaucoup.
  • Installé une liste noire DNS (via le routeur, pas l'ordinateur!) Qui devrait bloquer l'accès au pire.

Le blocage de l'accès à Internet désactivera efficacement les jeux si ce jeu a besoin d'un accès à Internet tel que Steam , Minecraft ou d'autres serveurs de jeux. Cela n'aura cependant aucun effet pour les jeux hors ligne.

Takkat
la source
Faites-vous référence à un arrêt utilisant sshou fermant simplement l'application?
Raphael
Cela dépend de la situation ... SSH peut tout faire, arrêter, tuer l'utilisateur, tuer l'application, annuler les piratages, supprimer les utilisateurs des sudoers, ... pour SSH, nous avons un compte administrateur parent sur toutes les boîtes pour enfants.
Takkat
Bien, vous êtes le premier à avoir une couche de sécurité supplémentaire à l'exception de toutes les choses locales que l'on peut rétablir si elles deviennent root (ce qui n'est pas évitable si elles ont un accès physique).
Byte Commander
0

Cela peut être réalisé en utilisant des scripts shell.

Le premier script est de tuer Steamdès qu'il est exécuté:

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

Enregistrez-le sous /path/to/anyname.shet ajoutez-le à la liste des applications de démarrage.

Ce que ce script fera, c'est qu'il vérifiera tout processus ouvert nommé steamtoutes les secondes et s'il en trouve, il le tuera.

Mais, vous avez besoin d'une solution qui steampeut être exécutée à un moment précis pour que votre fils puisse jouer à des jeux pendant cet intervalle. Pour ce faire, vous devez écrire un autre script:

#!/bin/bash

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

exit 0

Enregistrez-le sous /path/to/anyname2.shet ajoutez-le également à votre liste d'applications de démarrage.

Ce script tuera le premier script à 10h00. Donc, quand votre fils court Steamà 10h00. Il pourra le jouer maintenant.

Le troisième script consiste à relancer le premier script à un autre moment afin qu'il tue Steamaprès un intervalle de temps et que votre fils ne puisse plus jouer aux jeux Steam.

#!/bin/bash

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

exit 0

Enregistrez-le sous /path/to/anyname3.shet ajoutez-le à votre liste d'applications de démarrage.

Assurez-vous de garder ces chemins cachés, afin que votre fils ne le sache pas.

Raphael
la source
N'y a-t-il pas un moyen de l'empêcher de démarrer au lieu de le tuer après chaque démarrage?
Edward Torvalds
@edwardtorvalds - Je n'en connais aucun, j'ai donc posté cette solution.
Raphael
J'ai voté pour votre réponse, mais l'OP a besoin d'une méthode technique SIMPLE / FACILE et pas TROP
C'est simple et facile, tout ce que l'op doit faire est de copier et coller les scripts, d'enregistrer ces fichiers et de les ajouter aux applications de démarrage, puis d'oublier.
Raphael
kill loop - le plus sale que je puisse imaginer.
Croll
0

Pourquoi ne pas utiliser un nouveau compte utilisateur (via les paramètres système ). C'est la seule méthode sous Linux pour les "permissions".

  1. Le nouvel utilisateur "SteamUser" ne devrait pas être dans sudoers (juste un compte limité).
  2. Créez ensuite un deuxième compte appelé "SuperAdmin" et faites-en un compte sudoers (accès root). Mais gardez son mot de passe uniquement avec vous.
  3. Supprimez ensuite le compte de votre fils des sudoers. ( sudogroupe). Ensuite, ce compte n'aura pas d'accès root, il ne pourra pas installer ou supprimer de logiciels, modifier les paramètres à l'échelle du système.
  4. Connectez-vous à votre compte "SuperAdmin" et changez la propriété des fichiers binaires Steam et des jeux Steam pour les empêcher d'être exécutés par quiconque sauf "SteamUser". Cela comprend la suppression de l'accès en lecture + écriture + exécution de toute personne sauf "SteamUser"

Quelques notes ..

  • Il n'y a aucune possibilité de laisser un accès root avec le compte de votre fils, sinon le contrôle des autorisations est contourné facilement avec chown / chmod.
  • D'autres suggestions basées sur des scripts d'arrière-plan ne sont que des dégâts instables. Cela signifie qu'ils ne sont pas prometteurs. Cependant, ils sont peut-être faciles à configurer.
  • Les chemins de dossier à transférer vers "SteamAccount" sont: /home/son/.steamet bien sûr le fichier binaire/usr/games/steam
  • Pour jouer à Steam, un mot de passe "SteamUser" est requis (vous devrez vous connecter avec "SteamUser" et les exécuter Steam. Vous pouvez essayer de rechercher des méthodes pour expirer la session après un certain temps avec le verrouiller, pour éviter de jouer trop longtemps. Je suis Je ne sais pas s'il y a des outils comme ça, mais il est techniquement possible de fixer des limites de temps, mais pour les sessions, pas pour les programmes.
Croll
la source
Ah, je crois que j'ai trouvé mon downvoter ...
Jacob Vlijm
Ce n'est pas vraiment sûr, car les enfants assez intelligents (pouvoir utiliser Google et suivre un guide étape par étape suffit déjà) peuvent facilement contourner les restrictions des utilisateurs s'ils ont un accès physique.
Byte Commander
@ByteCommander au moins, il est plus fiable que les scripts d'arrière-plan. Mais oui tu as raison. Comme sous Windows. Comme partout.
Croll
Aucune infraction, mais comment est-ce plus sûr?
Jacob Vlijm
Et comment voulez-vous spécifier une limite de temps pendant laquelle l'enfant peut utiliser Steam? Et qu'en est-il du matériel scolaire autorisé? Un autre compte pour ça? Personnellement, je déteste les systèmes avec trop de comptes par personne, car ils sont difficiles à utiliser en raison de paramètres non partagés, etc.
Byte Commander