Bagaimana saya bisa membatasi atau membatasi akses ke aplikasi?

18

Anak saya menerima laptop baru melewati Natal ini, terutama untuk penggunaan di sekolah barunya ... Dan sekarang dia memiliki laptop sendiri, dia ingin memasang Steam.

Tetapi istri ingin saya menghapus Steam, karena laptop ini terutama untuk penggunaan sekolah ... Saya lebih suka tidak melakukannya, jika saya tidak harus melakukannya.

Apakah ada cara saya dapat membatasi atau membatasi akses ke Steam? Mungkin kata sandi di Steam sendiri, atau setel waktu selama itu dapat dijalankan?

Idealnya , itu harus menjadi sesuatu yang sangat sederhana untuk digunakan karena pekerjaan saya sering membuat saya jauh dari rumah (dan komputer, dan telekomunikasi dan ...) untuk jangka waktu yang lama dan sementara istri saya tidak merasa nyaman di sekitar komputer seperti saya, lebih mudah digunakan jauh, jauh lebih baik.

Tentunya ada sesuatu di luar sana yang dapat mencapai tugas ini?

Gregory Opera
sumber
Anda dapat menggunakan kunci anti-anak di router Anda untuk membatasi akses ke steam, mis. 1 jam sehari. Steam menggunakan port UDP 27000 - 27015 untuk lalu lintas klien. Jika Anda membatasi port-port ini di router Anda, putra Anda tidak akan bisa masuk ke steam.
Kev Inski
Solusi paling sederhana adalah membuat profil pengguna di Ubuntu tempat Anda memasang Steam. Buat kata sandi untuk profil pengguna baru yang akan digunakan oleh putra Anda.
@Begueradj Anak-anak bisa menjadi pintar. Dan akses fisik ke mesin berarti akses root yang memungkinkan, yang berarti Anda dapat mem-bypass semuanya kecuali enkripsi. Anda harus mengenkripsi direktori beranda pengguna itu untuk melindunginya dengan aman.
Byte Commander
@Gregory Seberapa pintar putra Anda dengan komputer? Apakah Anda memerlukan hal yang 100% aman, atau cukup jika mengakses Steam hanya dibuat non-sepele?
Byte Commander

Jawaban:

2

Tetapkan batas waktu pada suatu proses atau aplikasi

Dengan skrip latar belakang kecil, Anda dapat menetapkan batas waktu pada suatu proses atau aplikasi.
Selama pengguna Anda tidak mengetahui kata sandi administrator , itu tidak terlampau mudah.

Solusinya di bawah ini

Apakah skrip latar belakang kecil. Ini membatasi penggunaan per hari untuk jumlah menit yang ditentukan, untuk ditetapkan di kepala skrip. Setelah diatur (yang tidak terlalu sulit) itu berjalan sangat mudah, dan tidak ada tindakan tambahan yang diperlukan setelah itu.

Naskah

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

Cara Penggunaan

  1. Di desktop Anda (atau di mana pun), buat folder dengan nama: limit
  2. Salin skrip ke file kosong, simpan sebagai limit_use(tidak ada ekstensi) di dalam folder dan membuatnya dapat dieksekusi
  3. Edit di kepala skrip nama proses untuk dibatasi, dan jumlah menit maksimum yang diizinkan. Dalam contoh:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the process name to limit below
    app = "gedit"
  4. Salin folder ke direktori /opt:

    cp -r /path/to/limit /opt
  5. Sekarang edit /etc/rc.localuntuk membuat skrip menjalankannya seperti rootpada saat startup:

    sudo -i gedit /etc/rc.local

    Tepat sebelum garis

    exit 0

    baris lain:

    /opt/limit/limit_use &

Itu dia

Ketika seseorang mencoba membunuh skrip latar belakang:

masukkan deskripsi gambar di sini

(tindakan tidak diizinkan)

Penjelasan; bagaimana itu bekerja

  • Sekali per 10 detik, skrip terlihat jika proses yang ditargetkan berjalan. Jika demikian, itu "menambahkan" satu "titik" ke total penggunaan, untuk direkam dalam file ( /opt/limit/uselog). Jika batas harian tercapai, skrip tidak lagi memungkinkan proses untuk berjalan, mematikannya jika ada.
  • Pada perubahan hari (tanggal dicatat dalam file, jadi reboot tidak akan membantu), file log dihapus, memungkinkan jumlah waktu penggunaan yang baru untuk membangun.
  • Karena skrip berjalan saat boot , dari rc.localhanya pengguna yang memiliki hak sudo dapat menghentikan skrip, bahkan hanya jika pengguna mengetahui nama proses.

Hentikan skripnya

Jika Anda ingin menghentikan skrip, gunakan perintah:

sudo kill "$(pgrep limit_use)"

Tetapi sekali lagi, Anda memerlukan kata sandi sudo untuk melakukannya.




EDIT

Meskipun skrip di atas harus menyediakan cara yang cukup aman untuk membatasi penggunaan aplikasi, seperti yang disebutkan oleh @Bytecommander, itu bisa dilampaui, meskipun tidak terlalu mudah. Kombinasi dengan ukuran di bawah ini akan membuatnya sangat tidak mungkin bahwa ini akan terjadi, kecuali anak Anda mengetahui pengaturannya, dan cukup berpengalaman dengan Linux / Ubuntu.

Ukuran tambahan

Sedikit lebih jauh dari "solusi sederhana", tetapi masih tidak terlalu sulit untuk diatur adalah langkah tambahan di bawah ini. Jika tersangka kenakalan kami akan mengetahui skrip dipanggil /etc/rc.local, akan berhasil menjadi root, dan menghapus baris /etc/rc.local, atau akan dapat menghentikan skrip seperti itu, kita dapat menghadapinya dengan masalah berikutnya: layar mati setelah log in. Selain itu, solusinya memeriksa apakah skrip latar belakang berjalan setelah 5 menit setelah restart, pingsan jika tidak.

Ukuran ekstra adalah pemeriksaan startup-jika garis /opt/limit/limit_use &hadir /etc/rc.local, dan cek setelah 5 menit jika skrip masih berjalan. Karena skrip dijalankan dari peluncur (tersembunyi dari Aplikasi Startup) di /etc/xdg/autostartdalamnya akan sangat sulit untuk mengetahui apa yang terjadi, kecuali jika Anda tahu cara melakukannya. Kombinasi dari kedua langkah ini membuat anak Anda tidak mungkin mengetahuinya, dan jika dia melakukannya, mungkin tidak ada yang akan menghentikannya.

Cara mengatur

Dua langkah sederhana terlibat:

  1. Salin kode di bawah ini ke file kosong, simpan seperti blackout.desktopdi desktop Anda:

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

    Salin file ke /etc/xdg/autostart:

    sudo cp /path/to/blackout.desktop /etc/xdg/autostart
  2. Salin skrip di bawah ini ke file kosong, simpan sebagai blackout.pydi desktop Anda, buat itu dapat dieksekusi dan salin ke /usr/local/bin:

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

    Naskah

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

Penjelasan

Peluncur di /etc/xdg/autostartakan meluncurkan aplikasi (dalam hal ini pemeriksaan keamanan tambahan) untuk semua pengguna. Ini bisa ditimpa secara lokal, tetapi Anda harus tahu proses pemeriksaan berjalan. Dengan menempatkan garis NoDisplay=trueke peluncur kami, itu tidak akan muncul secara lokal Startup Applications, jadi tanpa mengetahuinya, itu tidak mungkin ditemukan.

Selain itu, putra Anda hanya memiliki waktu 15 detik untuk mengetahuinya (kemudian layarnya gelap) sehingga ia akan memiliki masalah serius, kecuali ia jenius, memiliki banyak pengalaman dengan Ubuntu dan pikiran kreatif.

Yakub Vlijm
sumber
Tetapi jika putranya dapat masuk ke sistem menggunakan kata sandi root, maka apakah dia tidak dapat mengedit rc.local?
Raphael
1
@ Raphael itu sebabnya saya sebutkan selama pengguna bukan administrator . Tetapi jika dia, praktis tidak ada yang akan menghentikannya pada akhirnya jika dia cukup pintar.
Jacob Vlijm
Yaitu, jika dia fasih dalam linux atau jika dia tahu cara menggunakan google secara efisien, akhirnya tidak ada jawaban yang akan berhasil.
Raphael
1
@ByteCommander benar tentu saja. Namun demikian tampaknya keseimbangan yang wajar dari solusi sederhana yang diminta , waktu yang terbatas dan tingkat keamanan yang wajar, mengingat minat yang dipertanyakan (membatasi waktu, menghabiskan game).
Jacob Vlijm
1
@ JacobVlijm Ya, tentu saja. Saya hanya menunjukkan bahwa mereka dapat menjaga anak mereka yang berusia 8 tahun dengan cara ini, tetapi ketika menjadi remaja dengan pengetahuan teknis, mereka harus tahu bahwa tidak ada keamanan 100%. (Bukannya aku tidak ingin memberi sedikit kebebasan pada remaja itu)
Byte Commander
4

Dari pengalaman saya sendiri, membatasi akses ke permainan komputer adalah salah satu tugas paling menantang dalam mendidik anak-anak kita. Tentu saja kami orang tua ingin mereka menggunakan komputer mereka terutama untuk sekolah tetapi ini sangat bertentangan dengan niat anak itu. Mereka akan membenci kita karena memberi mereka perangkat keras yang hanya bisa digunakan untuk sekolah.

Dan tentu saja kami juga ingin mereka belajar bagaimana menggunakan komputer mereka dengan cara yang masuk akal, termasuk bagaimana menggunakannya tidak hanya untuk bekerja tetapi juga untuk bersantai. Ini termasuk bermain game dan menonton video.

Sayangnya, kontrol orangtua yang dikelola dengan baik dan terbatas untuk membatasi komputasi anak hampir tidak tersedia untuk Ubuntu. Masalah besar lainnya adalah bahwa begitu mereka anak - anak yang cerdas, semua tindakan yang kita ambil menjadi sia-sia. Mereka akan selalu menemukan cara untuk mengatasi batasan kita, jika mereka benar-benar pintar tanpa kita sadari.

Setiap perangkat lunak pemblokiran atau pembatasan PAM yang berjalan di komputer anak itu hanya bersifat sementara, dan cepat atau lambat dapat diatasi dengan sangat mudah. Oleh karena itu kami memutuskan untuk membiarkan router yang dilindungi kata sandi melakukan pekerjaan, di mana akses fisik dapat dikendalikan lebih mudah.

Jadi apa yang kami lakukan di sini untuk membatasi permainan saat ini adalah kombinasi dari semua yang berikut:

  • Bicaralah dengan mereka untuk mendidik mereka bagaimana dan kapan menggunakan komputer untuk bersantai, dan kapan menggunakannya untuk sekolah. Ini adalah proses yang terus menerus, agak membosankan yang mengarah pada diskusi dan argumen yang tak ada habisnya. Tapi itu yang kami rasakan adalah satu - satunya hal yang akan bertahan dalam jangka panjang.
  • Tidak ada izin administrator di akun mereka. Ini adalah hal sementara. Kami tahu bahwa mereka akan dapat menempatkan diri mereka dalam sudogrup cepat atau lambat. Rencananya adalah mereka akan meminta kita untuk itu daripada menyembunyikannya.
  • Buat kontrak untuk waktu komputasi yang ditentukan dengan jelas. Mereka perlu tahu untuk apa dan berapa lama mereka diizinkan untuk menggunakan mesin mereka. Mereka perlu belajar bagaimana membagi waktu ini untuk sekolah dan liburan.
  • Blokir keras semua internet selama jam tidur .

Untuk memudahkan memenuhi kontrak penggunaan komputer untuk keduanya, anak-anak, dan kami, kami memasang batasan berikut:

  • Gunakan router yang dilindungi kata sandi yang memungkinkan pembatasan akses internet berdasarkan kombinasi perangkat keras (MAC) dan tabel waktu. Selama mereka tidak tahu tentang MAC-spoofing, ini akan bekerja dengan baik. Ini juga akan membatasi akses melalui ponsel pintar dan tablet mereka. Ini tentu saja tidak akan berhasil jika ada jaringan nirkabel terbuka di lingkungan Anda.
  • Instal server SSH di komputer anak itu untuk menarik steker seandainya mereka tersesat di niat mereka sendiri. Ini untuk kasus darurat kami senang kami tidak membutuhkan banyak.
  • Menginstal daftar hitam DNS (melalui router, bukan komputer!) Yang seharusnya memblokir akses ke yang terburuk.

Memblokir akses internet akan secara efektif menonaktifkan game jika game itu membutuhkan akses internet seperti Steam , Minecraft , atau server gamig lainnya. Namun itu tidak akan berpengaruh pada game yang berjalan di luar jalur.

Takkat
sumber
Apakah Anda mengacu pada shutdown menggunakan sshatau hanya menutup aplikasi?
Raphael
Bergantung pada situasinya ... SSH dapat melakukan semuanya, mematikan, membunuh pengguna, membunuh aplikasi, mengembalikan peretasan, menghapus pengguna dari sudoers, ... untuk SSH kami memiliki akun admin orang tua di semua kotak anak.
Takkat
Bagus, Anda adalah orang pertama yang memiliki lapisan keamanan tambahan kecuali semua barang lokal yang dapat dikembalikan jika mereka menjadi root (yang tidak dapat dicegah jika mereka memiliki akses fisik).
Byte Commander
0

Ini dapat dicapai dengan menggunakan skrip shell.

Skrip pertama adalah untuk membunuh Steamsegera setelah dijalankan:

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

Simpan sebagai /path/to/anyname.shdan tambahkan ke daftar aplikasi start-up.

Apa yang akan dilakukan skrip ini adalah bahwa ia akan memeriksa setiap proses terbuka yang dinamai steamsetiap detik dan jika ia menemukannya maka ia akan membunuhnya.

Tetapi, Anda memerlukan solusi di mana steamdapat dijalankan pada waktu tertentu dengan benar sehingga putra Anda dapat bermain game selama interval itu. Untuk melakukan itu, Anda harus menulis skrip lain:

#!/bin/bash

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

exit 0

Simpan sebagai /path/to/anyname2.shdan juga tambahkan ini ke daftar aplikasi start-up Anda.

Skrip ini akan mematikan skrip pertama pada pukul 10:00. Jadi, ketika putra Anda berlari Steampada pukul 10:00. Dia akan bisa memainkannya sekarang.

Skrip ketiga adalah memulai ulang skrip pertama di titik waktu lain sehingga skrip tersebut mati Steamsetelah selang waktu tertentu dan putra Anda tidak akan dapat bermain game Steamlagi.

#!/bin/bash

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

exit 0

Simpan sebagai /path/to/anyname3.shdan tambahkan ke daftar aplikasi startup Anda.

Pastikan untuk menjaga jalur itu tersembunyi, sehingga putra Anda tidak mengetahuinya.

Raphael
sumber
tidak adakah cara kita menghentikannya alih-alih membunuhnya setelah setiap kali dimulai?
Edward Torvalds
@edwardtorvalds - Saya tidak tahu, jadi saya memposting solusi ini.
Raphael
Saya memilih jawaban Anda, tetapi OP membutuhkan SEDERHANA / MUDAH dan tidak TERLALU metode teknis
Sederhana dan mudah, semua yang perlu dilakukan op adalah menyalin dan menempelkan skrip, menyimpan file-file itu dan menambahkannya ke aplikasi startup, kemudian lupakan.
Raphael
kill loop - paling kotor yang bisa saya bayangkan.
Croll
0

Mengapa tidak menggunakan Akun Pengguna baru (melalui Pengaturan Sistem ). Ini adalah satu-satunya metode di Linux untuk "izin".

  1. Pengguna baru "SteamUser" tidak boleh berada di sudoers (hanya akun terbatas).
  2. Kemudian buat akun kedua yang disebut "SuperAdmin" dan buat akun itu sudoers (akses root). Tetapi simpan kata sandinya hanya dengan Anda.
  3. Kemudian hapus akun anak Anda dari sudoers. ( sudogrup). Maka akun ini tidak akan memiliki akses root, tidak akan dapat menginstal atau menghapus perangkat lunak, mengubah pengaturan seluruh sistem.
  4. Masuk ke akun "SuperAdmin" Anda dan ubah kepemilikan binari uap dan folder permainan uap untuk mencegahnya dijalankan oleh siapa pun kecuali "SteamUser". Ini termasuk menghapus akses baca + tulis + eksekusi dari siapa pun kecuali "SteamUser"

Beberapa catatan ..

  • Tidak ada kemampuan untuk meninggalkan akses root dengan akun putra Anda, jika tidak kontrol izin dilewati dengan mudah dengan chown / chmod.
  • Saran lain berdasarkan skrip latar belakang hanya kekacauan tidak stabil. Ini berarti mereka tidak menjanjikan. Namun, mereka mudah diatur mungkin.
  • Jalur folder untuk ditransfer ke "SteamAccount" adalah: /home/son/.steamdan tentu saja file biner/usr/games/steam
  • Untuk memainkan steam, kata sandi "SteamUser" diperlukan (Anda harus masuk dengan "SteamUser" dan menjalankannya. Anda dapat mencoba mencari metode untuk kedaluwarsa sesi setelah beberapa waktu dengan menguncinya, untuk mencegah bermain terlalu lama. Saya tidak yakin apakah ada alat seperti itu, tetapi secara teknis dimungkinkan untuk menetapkan batas waktu, tetapi untuk sesi, bukan program.
Gulungan
sumber
Ah, saya percaya saya menemukan downvoter saya ...
Jacob Vlijm
Ini tidak benar-benar aman, karena anak-anak yang cukup pintar (bisa menggunakan google dan mengikuti panduan langkah demi langkah sudah cukup) dapat dengan mudah melewati batasan pengguna jika mereka memiliki akses fisik.
Byte Commander
@ByteCommander setidaknya lebih dapat diandalkan daripada skrip latar belakang. Tapi ya kamu benar. Sama seperti di Windows. Seperti di mana saja.
Croll
Jangan tersinggung, tetapi bagaimana ini lebih aman?
Jacob Vlijm
Dan bagaimana Anda ingin menentukan batas waktu berapa lama anak tersebut dapat menggunakan Steam? Dan bagaimana dengan barang sekolah yang diizinkan? Akun lain untuk itu? Saya pribadi membenci sistem dengan terlalu banyak akun per orang, karena mereka sulit digunakan karena tidak berbagi pengaturan dll.
Byte Commander