web-dev-qa-db-fra.com

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

Mon fils a reçu un nouvel ordinateur portable Noël dernier, principalement pour être utilisé dans sa nouvelle école ... Et maintenant qu’il a son propre ordinateur portable, il est ravi d’avoir installé Steam.

Mais la femme veut que je supprime Steam, parce que l'ordinateur portable est principalement destiné à l'école ... Je préférerais ne pas le faire, si je ne suis pas obligé.

Est-il possible de restreindre ou de limiter l'accès à Steam? Peut-être un mot de passe sur Steam lui-même ou des temps fixes pendant lesquels il peut être exécuté?

idéalement, cela doit être joli simple à utiliser car mon travail me tient souvent loin de chez moi (et des ordinateurs, des télécommunications et ...) pendant de longues périodes et bien que ma femme ne soit pas aussi à l'aise avec les ordinateurs que moi, il est beaucoup plus facile de l'utiliser, loin mieux.

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

17
Gregory Opera

Fixer une limite de temps pour un processus ou une application

Avec un petit script en arrière-plan, vous pouvez définir une limite de temps 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 dépassé trop facilement.

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 dans l'en-tête du script. Une fois installé (ce qui n’est pas trop difficile), la procédure est très simple et aucune action supplémentaire n’est nécessaire par la suite.

Le scénario

#!/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 le nom limit_use (sans extension) dans le dossier et rendez-le exécutable
  3. Modifiez dans l'en-tête du script le nom du processus à limiter et le nombre maximal 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.local pour que le script l'exécute en tant que root au démarrage:

    Sudo -i gedit /etc/rc.local
    

    Juste avant la ligne

    exit 0
    

    une autre ligne:

    /opt/limit/limit_use &
    

C'est tout

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

enter image description here

(action non autorisée)

Explication; comment ça marche

  • Une fois toutes les 10 secondes, le script recherche si le processus ciblé est en cours d'exécution. Si tel 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 n'autorise plus l'exécution du processus, ce qui le tue s'il existe.
  • Lors du changement de jour (la date est enregistrée dans un fichier, le redémarrage ne vous aidera pas), le fichier journal est supprimé, ce qui permet une nouvelle durée d'utilisation.
  • Étant donné que le script s'exécute au boot up , à partir de rc.local, seuls les utilisateurs dotés des privilèges Sudo peuvent arrêter le script, même si l'utilisateur connaît le nom du processus.

Arrête le script

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

Sudo kill "$(pgrep limit_use)"

Mais encore une fois, vous aurez besoin du mot de passe Sudo pour le faire.




MODIFIER

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, à moins que votre fils connaisse la configuration et connaisse assez bien Linux/Ubuntu.

Mesure supplémentaire

Un peu plus loin d'une "solution simple", mais toujours pas trop difficile à mettre en place se trouve la mesure supplémentaire ci-dessous. Si notre délinquant présumé découvrirait que le script est appelé depuis /etc/rc.local, parviendrait à devenir root et supprimerait la ligne dans /etc/rc.local, ou serait capable d'arrêter le script de cette façon, nous pouvons le confronter au prochain problème: l'écran s'éteint après la connexion. De plus, la solution vérifie si le script d'arrière-plan est en cours d'exécution 5 minutes après le redémarrage. .

La mesure supplémentaire est une vérification au 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 est toujours exécuté. Comme le script s'exécute depuis un lanceur (masqué depuis les applications de démarrage) dans /etc/xdg/autostart, il sera assez difficile de savoir ce qui se passe, à moins que vous sachiez comment procéder. La combinaison de ces deux mesures rend peu probable que votre fils le découvre et, s’il le fait, rien ne l’arrêtera probablement.

Comment mettre en place

Deux étapes simples sont impliquées:

  1. Copiez le code ci-dessous dans un fichier vide, enregistrez-le sous le nom blackout.desktop sur 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 sous le nom blackout.py sur votre bureau, et rendez-le exécutable et le copier 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 dans /etc/xdg/autostart lanceront une application (dans ce cas, le contrôle de sécurité supplémentaire) pour tous les utilisateurs. Cela pourrait être écrasé localement, mais vous devez connaître l'exécution de la vérification. En plaçant la ligne NoDisplay=true dans notre programme de lancement, elle n'apparaîtra pas localement dans Startup Applications. Par conséquent, sans savoir si elle existe, il est peu probable qu'elle soit découverte.

De plus, votre fils n'a que 15 secondes pour le savoir (l'écran est alors noirci), ce qui l'empêcherait d'avoir un grave problème, à moins qu'il ne soit un génie, qu'il ait beaucoup d'expérience avec Ubuntu et un esprit créatif.

2
Jacob Vlijm

D'après ma propre expérience, limiter l'accès aux jeux informatiques est l'une des tâches les plus difficiles de l'éducation de nos enfants. Bien sûr, nous les parents voulons qu’ils utilisent leur ordinateur principalement pour l’école, mais cela va à l’encontre des intentions de l’enfant. Ils vont nous haïr pour leur donner du matériel utilisable pour l'école seulement.

Et bien sûr, nous voulons également apprendre à utiliser leur ordinateur de manière rationnelle, y compris à l’utiliser non seulement pour le travail, mais aussi pour les loisirs. . Cela inclut les jeux et regarder des vidéos.

Malheureusement, bien entretenu et fonctionnel contrôles parentaux limitant l'informatique des enfants est presque indisponible pour Ubuntu. Un autre problème majeur est que dès qu'ils sont enfants intelligents toutes les mesures que nous avons prises sont devenues vaines. Ils trouveront toujours des moyens de surmonter nos restrictions, au cas où ils seraient vraiment intelligents sans même que nous puissions nous en rendre compte.

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 apprendre comment et quand utiliser un ordinateur pour leurs loisirs et quand les utiliser à l'école. Il s’agit d’un processus continuellement fastidieux, plutôt fastidieux, menant à des discussions et des arguments sans fin. Mais c’est ce que nous pensons être la chose seulement qui durera à long terme.
  • Aucune autorisation d'administrateur sur leur compte. Ceci est une chose temporaire. Nous savons qu’ils seront capables de se placer dans le groupe Sudo tôt ou tard. Le plan est qu'ils nous le demanderont plutôt que de le cacher.
  • Établissez un contrat pour des temps de calcul clairement définis. Ils ont besoin de savoir pourquoi et combien de temps ils sont autorisés à utiliser leurs machines. Ils doivent apprendre à partager ce temps pour l’école et pour le loisir .
  • Bloquez complètement tous les accès Internet pendant heures de sommeil .

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

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

Bloquer l'accès à Internet désactivera effectivement les jeux si ce jeu nécessite un accès à Internet tel que Steam , Minecraft , ou d'autres serveurs de gamig. Cela n'aura toutefois aucun effet pour les jeux hors ligne.

4
Takkat

Ceci peut être réalisé en utilisant des scripts Shell.

Le premier script consiste à tuer Steamdès son exécution:

#!/bin/bash

while true
do
    pkill Steam
    sleep 1
done

exit 0

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

Ce script fera en sorte qu'il vérifie chaque processus ouvert nommé Steamchaque seconde et s'il en trouve, il le tuera.

Toutefois, vous avez besoin d’une solution permettant à Steamde s’exécuter à une heure précise afin 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 le nom /path/to/anyname2.sh et ajoutez-le également à votre liste d'applications de démarrage.

Ce script va tuer le premier script à 10h00. Ainsi, lorsque votre fils exécute Steamà 10h00. Il pourra y 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 à des jeux avec Steamname__.

#!/bin/bash

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

exit 0

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

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

0
Raphael

Pourquoi ne pas utiliser new ser Account (via System Settings). C'est la seule méthode sous Linux pour les "autorisations".

  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 créez-en un compte sudoers (accès root). Mais conservez son mot de passe uniquement avec vous.
  3. Ensuite, supprimez le compte de votre fils de sudoers. (Sudo group). Ensuite, ce compte n'aura pas d'accès root, il ne pourra pas installer ni supprimer de logiciel, ni modifier les paramètres à l'échelle du système.
  4. Connectez-vous à votre compte "SuperAdmin" et changez le propriétaire de fichiers binaires Steam et du dossier de jeux Steam pour empêcher leur exécution par quiconque sauf " SteamUser ". Cela inclut la suppression de l'accès en lecture + écriture + exécution de quiconque 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 facilement ignoré avec chown/chmod.
  • D'autres suggestions basées sur des scripts d'arrière-plan ne sont qu'un désordre instable. Cela signifie qu'ils ne sont pas prometteurs. Cependant, ils sont faciles à installer peut-être.
  • Les chemins de dossier à transférer vers "SteamAccount" sont: /home/son/.Steam et bien sûr le fichier binaire /usr/games/Steam
  • Pour jouer à Steam, le mot de passe "SteamUser" est requis (vous devez vous connecter avec "SteamUser" et les exécuter sous Steam. Vous pouvez essayer de rechercher des méthodes pour expirer la session après un certain temps avec le verrouillage, pour éviter de jouer trop longtemps. Je suis Je ne sais pas s'il existe de tels outils, mais il est techniquement possible de fixer des délais, mais pour des sessions, pas des programmes.
0
Croll