Come posso limitare o limitare l'accesso a un'applicazione?


18

Mio figlio ha ricevuto un nuovo laptop lo scorso Natale, principalmente per l'uso nella sua nuova scuola ... E ora che ha il suo laptop, è entusiasta di installare Steam.

Ma la moglie vuole che rimuova Steam, perché il laptop è principalmente per uso scolastico ... Preferirei non farlo, se non dovessi.

Esiste un modo per limitare o altrimenti limitare l'accesso a Steam? Forse una password su Steam stessa o impostare orari durante i quali può essere eseguita?

Idealmente , deve essere qualcosa di piuttosto semplice da usare perché il mio lavoro spesso mi tiene lontano da casa (e computer, telecomunicazioni e ...) per lunghi periodi di tempo e mentre mia moglie non è a suo agio con i computer come me, più facile da usare è molto, molto meglio.

Sicuramente c'è qualcosa là fuori che può svolgere questo compito?


È possibile utilizzare la protezione bambini nel router per limitare l'accesso al vapore, ad es. 1 ora al giorno. Steam utilizza le porte UDP 27000 - 27015 per il traffico client. Se limiti queste porte nel tuo router, tuo figlio non sarà in grado di accedere a Steam.
Kev Inski,

La soluzione più semplice è creare un profilo utente sul tuo Ubuntu su cui installi Steam. Crea una password per il nuovo profilo utente che verrà utilizzato da tuo figlio.

@Begueradj I bambini possono essere intelligenti. E l'accesso fisico a una macchina significa possibile accesso root, il che significa che potresti bypassare tutto tranne forse la crittografia. Dovresti crittografare la home directory dell'utente per proteggerla in modo sicuro.
Byte comandante

@Gregory Quanto è intelligente tuo figlio con i computer? Hai bisogno di una cosa sicura al 100% o è sufficiente se l'accesso a Steam è reso non banale?
Byte comandante

Risposte:


2

Impostare un limite di tempo per un processo o un'applicazione

Con un piccolo script in background, è possibile impostare un limite di tempo per un processo o un'applicazione.
Finché l'utente non conosce la password dell'amministratore , non viene superato troppo facilmente.

La soluzione qui sotto

È uno script di sfondo così piccolo. Limita l'utilizzo al giorno a un numero definito di minuti, da impostare nell'intestazione dello script. Una volta installato (il che non è troppo difficile) si esegue molto facilmente e non sono necessarie ulteriori azioni in seguito.

Il copione

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

Come usare

  1. Sul desktop (o in qualsiasi altro luogo), crea una cartella denominata: limit
  2. Copia lo script in un file vuoto, salvalo come limit_use(nessuna estensione) all'interno della cartella e rendilo eseguibile
  3. Modifica nell'intestazione dello script il nome del processo da limitare e il numero massimo di minuti consentiti. Nell'esempio:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the process name to limit below
    app = "gedit"
  4. Copia la cartella nella directory /opt:

    cp -r /path/to/limit /opt
  5. Ora modifica /etc/rc.localper far funzionare lo script come rootall'avvio:

    sudo -i gedit /etc/rc.local

    Poco prima della linea

    exit 0

    un'altra linea:

    /opt/limit/limit_use &

Questo è tutto

Quando qualcuno tenta di uccidere lo script in background:

inserisci qui la descrizione dell'immagine

(azione non consentita)

Spiegazione; come funziona

  • Una volta ogni 10 secondi, lo script verifica se il processo di destinazione è in esecuzione. In tal caso, "aggiunge" un "punto" a un utilizzo totale, da registrare in un file ( /opt/limit/uselog). Se viene raggiunto il limite giornaliero, lo script non consente più l'esecuzione del processo, uccidendolo se esiste.
  • Alla modifica del giorno (la data viene registrata in un file, quindi il riavvio non aiuta), il file di registro viene eliminato, consentendo l'accumulo di una nuova quantità di tempo di utilizzo.
  • Poiché lo script viene eseguito all'avvio , rc.localsolo gli utenti con privilegi sudo possono interrompere lo script, anche solo se l'utente conosce il nome del processo.

Ferma la sceneggiatura

Nel caso in cui desideri interrompere lo script, utilizzare il comando:

sudo kill "$(pgrep limit_use)"

Ma ancora una volta, per farlo dovrai avere la password sudo.




MODIFICARE

Sebbene lo script sopra dovrebbe fornire un modo ragionevolmente sicuro di limitare l'utilizzo di un'applicazione, come menzionato da @Bytecommander, può essere superato, anche se non molto facilmente. La combinazione con la misura seguente renderà molto improbabile che ciò accada, a meno che tuo figlio non conosca l'installazione ed abbia una certa esperienza con Linux / Ubuntu.

Misura aggiuntiva

Un po 'più lontano da una "soluzione semplice", ma ancora non troppo difficile da configurare è la misura aggiuntiva di seguito. Se il nostro sospetto delinquente scopre da dove viene chiamato lo script /etc/rc.local, riuscirà a diventare root e rimuoverà la linea /etc/rc.local, o sarebbe in grado di fermare lo script in quel modo, possiamo affrontarlo con il prossimo problema: lo schermo si oscura dopo accedi. Inoltre, la soluzione verifica se lo script in background è in esecuzione dopo 5 minuti dopo il riavvio, in caso contrario oscura.

La misura in più è un controllo startup se la linea /opt/limit/limit_use &è presente in /etc/rc.local, e un controllo dopo 5 minuti se lo script viene eseguito ancora. Poiché lo script viene eseguito da un programma di avvio (nascosto dalle applicazioni di avvio) /etc/xdg/autostart, sarà abbastanza difficile scoprire cosa sta succedendo, a meno che non si sappia come è fatto. La combinazione di queste due misure rende improbabile che tuo figlio lo scoprirà e, se lo fa, probabilmente nulla lo fermerà.

Come impostare

Sono previsti due semplici passaggi:

  1. Copia il codice qui sotto in un file vuoto, salvalo come blackout.desktopsul desktop:

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

    Copia il file in /etc/xdg/autostart:

    sudo cp /path/to/blackout.desktop /etc/xdg/autostart
  2. Copia lo script seguente in un file vuoto, salvalo come blackout.pysul desktop, rendilo eseguibile e copialo in /usr/local/bin:

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

    Il copione

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

Spiegazione

I lanciatori in /etc/xdg/autostartavvieranno un'applicazione (in questo caso il controllo di sicurezza aggiuntivo) per tutti gli utenti. Questo potrebbe essere sovrascritto localmente, ma devi conoscere le esecuzioni di controllo. Inserendo la linea NoDisplay=truenel nostro launcher, non apparirà localmente in Startup Applications, quindi senza sapere che esiste, è improbabile che venga scoperto.

Inoltre, tuo figlio ha solo 15 secondi per scoprirlo (quindi lo schermo è oscurato), quindi avrebbe un problema serio, a meno che non sia un genio, abbia molta esperienza con Ubuntu e una mente creativa.


Ma se suo figlio può accedere al sistema usando la password di root, non sarà in grado di modificarlo rc.local?
Raphael,

1
@Raphael ecco perché l'ho citato fintanto che l'utente non è un amministratore . Ma se lo è, praticamente nulla gli impedirà di superare alla fine se è abbastanza intelligente.
Jacob Vlijm,

Ikr, se è esperto in Linux o se sa usare Google in modo efficiente, alla fine nessuna delle risposte funzionerebbe comunque.
Raffaello,

1
@ByteCommander vero ovviamente. Tuttavia sembra un ragionevole equilibrio tra la soluzione semplice richiesta , un tempo limitato e un livello ragionevole di sicurezza, dato l'interesse in questione (limitazione del tempo, gioco trascorso).
Jacob Vlijm,

1
@JacobVlijm Sì, certo. Sto solo sottolineando che potrebbero tenere fuori il loro bambino di 8 anni in questo modo, ma quando diventa un adolescente con alcune conoscenze tecniche, devono sapere che non esiste una sicurezza al 100%. (Non che non mi piacerebbe dare un po 'di libertà all'adolescente)
Byte Commander

4

Dalla mia esperienza, limitare l'accesso ai giochi per computer è uno dei compiti più impegnativi nell'educare i nostri figli. Naturalmente noi genitori vogliamo che usino i loro computer principalmente per la scuola, ma questo è fortemente in conflitto con le intenzioni del bambino. Ci odieranno per aver dato loro hardware utilizzabile solo per la scuola.

E ovviamente vogliamo anche che imparino ad usare il proprio computer in modo ragionevole, incluso come usarlo non solo per lavoro ma anche per piacere. Ciò include il gioco e la visione di video.

Sfortunatamente, il controllo parentale ben mantenuto e funzionante per limitare il calcolo del bambino è quasi non disponibile per Ubuntu. Un altro grosso problema è che non appena sono bambini intelligenti, tutte le misure che prendiamo diventano invano. Troveranno sempre modi per superare le nostre restrizioni, nel caso in cui siano davvero intelligenti senza che nemmeno noi possiamo accorgercene.

Qualsiasi software di blocco o restrizioni PAM in esecuzione sul computer del bambino sarà solo temporaneo e prima o poi potrà essere superato molto facilmente. Pertanto, abbiamo deciso di lasciare che il router protetto da password eseguisse il lavoro, in cui l'accesso fisico può essere controllato molto più facilmente.

Quindi quello che facciamo qui per limitare un po 'il gioco al momento è una combinazione di tutti i seguenti:

  • Parla con loro per educarli su come e quando usare i computer per il tempo libero e quando usarli per la scuola. Questo è un processo costantemente continuo, piuttosto noioso che porta a discussioni e argomenti senza fine. Ma è ciò che riteniamo sia l' unica cosa che durerà a lungo termine.
  • Nessuna autorizzazione di amministratore per il proprio account. Questa è una cosa temporanea. Sappiamo che sudoprima o poi saranno in grado di inserirsi nel gruppo. Il piano è che ci chiederanno questo invece di farlo nascosto.
  • Stipula un contratto per tempi di calcolo chiaramente definiti. Devono sapere per cosa e per quanto tempo possono usare le loro macchine. Devono imparare a dividersi questa volta per la scuola e per il tempo libero.
  • Blocca duramente Internet durante le ore di sonno .

Per facilitare l'adempimento del contratto sull'utilizzo del computer per entrambi, i bambini e noi abbiamo installato le seguenti restrizioni:

  • Utilizzare un router protetto da password che consente la limitazione dell'accesso a Internet su una combinazione di un hardware (MAC) e una tabella dei tempi. Se non conoscono lo spoofing MAC, funzionerà abbastanza bene. Limita anche l'accesso tramite i loro smartphone e tablet. Questo ovviamente non funzionerà se ci fosse una rete wireless aperta nel tuo quartiere.
  • Installa un server SSH sui computer del bambino per staccare la spina nel caso in cui si perdessero nelle loro intenzioni. Questo è per i casi di emergenza, siamo felici di non aver avuto bisogno di molto.
  • Installata una lista nera DNS (tramite il router, non il computer!) Che dovrebbe bloccare l'accesso al peggio.

Il blocco dell'accesso a Internet disabiliterà efficacemente i giochi se quel gioco richiede l'accesso a Internet come Steam , Minecraft o altri server di gioco. Tuttavia non avrà alcun effetto per i giochi che vanno fuori linea.


Ti riferisci allo spegnimento usando ssho semplicemente chiudendo l'applicazione?
Raffaello,

Dipende dalla situazione ... SSH può fare tutto, spegnere, uccidere l'utente, uccidere app, ripristinare gli hack, rimuovere utenti dai sudoers, ... per SSH abbiamo un account amministratore genitore su tutte le caselle dei bambini.
Takkat,

Bene, sei il primo ad avere un ulteriore livello di sicurezza tranne tutte le cose locali che si possono ripristinare se diventano root (cosa che non è prevenibile se hanno accesso fisico).
Byte Commander

0

Ciò può essere ottenuto utilizzando script di shell.

Il primo script è quello di uccidere Steamnon appena viene eseguito:

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

Salvalo come /path/to/anyname.she aggiungilo all'elenco delle applicazioni di avvio.

Quello che farà questo script è che controllerà ogni processo aperto chiamato steamogni secondo e se ne trova uno, lo ucciderà.

Ma hai bisogno di una soluzione che steampossa essere eseguita in un momento specifico in modo che tuo figlio possa giocare durante quell'intervallo. Per fare ciò devi scrivere un altro script:

#!/bin/bash

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

exit 0

Salvalo come /path/to/anyname2.she aggiungilo anche al tuo elenco di applicazioni di avvio.

Questo script ucciderà il primo script alle 10:00. Quindi, quando tuo figlio corre Steamalle 10:00. Ora sarà in grado di giocarci.

Il terzo script è di riavviare il primo script in un altro momento, in modo che si uccida Steamdopo un intervallo di tempo e tuo figlio non sarà più in grado di giocare Steam.

#!/bin/bash

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

exit 0

Salvalo come /path/to/anyname3.she aggiungilo al tuo elenco di applicazioni di avvio.

Assicurati di tenere nascosti quei percorsi, in modo che tuo figlio non lo scopra.


non esiste un modo per impedirne l'avvio anziché ucciderlo dopo ogni avvio?
Edward Torvalds,

@edwardtorvalds - Non ne conosco nessuno, quindi ho pubblicato questa soluzione.
Raphael,

Ho votato a favore della tua risposta, ma l'OP ha bisogno di un metodo tecnico SEMPLICE / FACILE e non TROPPO

È semplice e facile, tutto ciò che serve è copiare e incollare gli script, salvare quei file e aggiungerli alle applicazioni di avvio, quindi dimenticarsene.
Raphael,

kill loop - il più sporco che posso immaginare.
Croll,

0

Perché non utilizzare il nuovo account utente (tramite Impostazioni di sistema ). Questo è l'unico metodo su Linux per "permessi".

  1. Il nuovo utente "SteamUser" non dovrebbe essere sudoer (solo un account limitato).
  2. Quindi crea un secondo account chiamato "SuperAdmin" e rendilo sudoers account (accesso root). Ma mantieni la sua password solo con te.
  3. Quindi rimuovi l'account di tuo figlio dai sudoers. ( sudogruppo). Quindi questo account non avrà accesso come root, non sarà in grado di installare o rimuovere software, modificare le impostazioni a livello di sistema.
  4. Accedi al tuo account "SuperAdmin" e cambia la proprietà dei file binari di Steam e della cartella Steam Games per impedire che vengano eseguiti da chiunque tranne "SteamUser". Ciò include la rimozione dell'accesso lettura + scrittura + esecuzione da chiunque tranne "SteamUser"

Poche note ..

  • Non c'è capacità di lasciare un accesso root con l'account di tuo figlio, altrimenti il ​​controllo delle autorizzazioni viene facilmente aggirato con chown / chmod.
  • Altri suggerimenti basati su script in background sono solo pasticcio instabile. Ciò significa che non sono promettenti. Tuttavia, sono facili da configurare forse.
  • I percorsi delle cartelle da trasferire a "SteamAccount" sono: /home/son/.steame ovviamente il file binario/usr/games/steam
  • Per giocare a Steam, è richiesta la password "SteamUser" (dovrai accedere con "SteamUser" e far girare Steam. Puoi provare a cercare metodi per far scadere la sessione dopo un po 'di tempo con il blocco, per evitare di giocare troppo a lungo. non sono sicuro se ci sono strumenti del genere, ma è tecnicamente possibile impostare limiti di tempo, ma per le sessioni, non per i programmi.

Ah, credo di aver trovato il mio downvoter ...
Jacob Vlijm,

Questo non è davvero sicuro, perché i bambini abbastanza intelligenti (essere in grado di usare google e seguire una guida passo-passo è già abbastanza) possono facilmente aggirare le restrizioni dell'utente se hanno accesso fisico.
Byte Commander

@ByteCommander almeno è più affidabile degli script in background. Ma sì hai ragione. Proprio come su Windows. Come ovunque.
Croll,

Senza offesa, ma come è più sicuro?
Jacob Vlijm,

E come vuoi specificare un limite di tempo per quanto tempo il bambino può usare Steam? E le cose della scuola consentite? Un altro account per questo? Personalmente odio i sistemi con troppi account per persona, perché sono un dolore da usare a causa di impostazioni non condivise ecc.
Byte Commander
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.