アプリケーションへのアクセスを制限または制限するにはどうすればよいですか?


18

私の息子は、主に彼の新しい学校での使用のために、このクリスマスに新しいラップトップを受け取りました。

しかし、ラップトップは主に学校での使用を目的としているので、妻は私にSteamを削除することを望んでいます。

Steamへのアクセスを制限または制限する方法はありますか?おそらくSteam自体のパスワード、またはそれを実行できる時間を設定しますか?

理想的には、私の仕事は多くの場合自宅(およびコンピューター、通信など)から遠ざけられ、妻はコンピューターほど快適ではないので、非常に使いやすいものでなければなりません。より使いやすく、はるかに優れています。

確かに、このタスクを達成できる何かがそこにありますか?


ルーターのチャイルドプルーフロックを使用して、1日1時間など、スチームへのアクセスを制限できます。Steamは、クライアントトラフィックにUDP 27000-27015ポートを使用します。ルーターのこれらのポートを制限すると、息子はSteamにログインできなくなります。
ケフインスキー

最も簡単な解決策は、SteamをインストールするUbuntu上にユーザープロファイルを作成することです。息子が使用する新しいユーザープロファイルのパスワードを作成します。

@Begueradjキッズはスマートになります。また、マシンへの物理アクセスはルートアクセスの可能性を意味します。つまり、暗号化以外のすべてをバイパスできます。そのユーザーのホームディレクトリを暗号化して、安全に保護する必要があります。
バイトコマンダー

@Gregoryあなたの息子はコンピューターでどれほど賢いですか?100%安全なものが必要ですか?それとも、Steamへのアクセスが簡単ではない場合に十分ですか?
バイトコマンダー

回答:


2

プロセスまたはアプリケーションに時間制限を設定します

小さなバックグラウンドスクリプトを使用すると、プロセスまたはアプリケーションに時間制限を設定できます。
ユーザーが管理者のパスワードを知らない限り、簡単に超えられません。

以下の解決策

このような小さな背景スクリプトです。スクリプトの先頭に設定するために、1日あたりの使用量を定義された分数に制限します。一度設定すると(それほど難しくありません)、非常に簡単に実行でき、その後は追加のアクションは不要です。

スクリプト

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

使い方

  1. デスクトップ(または他の場所)で、次の名前のフォルダーを作成します。 limit
  2. 、空のファイルにスクリプトをコピーとして保存しますlimit_use(拡張子なし)フォルダ内およびそれを実行可能にします
  3. スクリプトの先頭で、制限するプロセス名、および許可される最大分数を編集します。例では:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the process name to limit below
    app = "gedit"
  4. フォルダーをディレクトリにコピーします/opt

    cp -r /path/to/limit /opt
  5. 次に、起動時に/etc/rc.localスクリプトを実行するように編集しますroot

    sudo -i gedit /etc/rc.local

    行の直前

    exit 0

    別の行:

    /opt/limit/limit_use &

それでおしまい

誰かがバックグラウンドスクリプトを殺そうとすると:

ここに画像の説明を入力してください

(アクションは許可されていません)

説明; 使い方

  • 10秒に1回、スクリプトはターゲットプロセスが実行されているかどうかを確認します。その場合、合計使用量に「ポイント」が1つ追加され、ファイルに記録されます(/opt/limit/uselog)。1日の制限に達すると、スクリプトはプロセスの実行を許可せず、存在する場合は強制終了します。
  • 日が変わると(日付はファイルに記録されるため、再起動は役に立たない)、ログファイルは削除され、新しい使用時間が蓄積されます。
  • 以来のスクリプトが実行され、ブートアップから、rc.localsudo権限を持つユーザーのみ(複数可)、ユーザは、プロセス名を知っている場合にのみ、その後も、スクリプトを停止することができます。

スクリプトを停止します

スクリプトを停止する場合は、次のコマンドを使用します。

sudo kill "$(pgrep limit_use)"

ただし、そのためには、sudoパスワードが必要になります。




編集

上記のスクリプトは、@ Bytecommanderで述べたように、アプリケーションの使用を制限する合理的に安全な方法を提供する必要がありますが、非常に簡単ではありませんが、超えることができます。あなたの息子セットアップを知っていて、Linux / Ubuntuの経験が十分でない限り、以下の対策との組み合わせは、これが起こる可能性を非常に低くします。

追加対策

「簡単な解決策」から少し離れていますが、セットアップするのはそれほど難しくありませんが、以下の追加の対策があります。場合は、私たちの疑い延滞は、スクリプトの呼び出し元を見つけるだろう/etc/rc.local、rootになるために管理する、との行を削除するだろう/etc/rc.localまたは方法は、我々は次の問題で彼に立ち向かうことができスクリプトを停止することができるだろう:アウト画面ブラック後ログイン。さらに、ソリューションは、再起動後5分後にバックグラウンドスクリプトが実行されているかどうかをチェックし、実行されていない場合はブラックアウトします。

余分な尺度は、ラインがあれば、スタートアップのチェックです/opt/limit/limit_use &中に存在し/etc/rc.localそしてスクリプトがまだ実行されている場合、5分後にチェック。スクリプトは(スタートアップアプリケーションから隠されている)ランチャーから実行されるため、実行方法/etc/xdg/autostartわからない限り、何が起こっているのかを見つけるのは非常に困難です。これらの2つの手段の組み合わせにより、あなたの息子が気付く可能性は低くなります。

設定方法

2つの簡単な手順が含まれます。

  1. 以下のコードを空のファイルにコピーしblackout.desktopて、デスクトップに保存します。

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

    ファイルをコピーします/etc/xdg/autostart

    sudo cp /path/to/blackout.desktop /etc/xdg/autostart
  2. 以下のスクリプトを空のファイルにコピーblackout.pyし、デスクトップに保存し、実行可能にして、次の場所にコピーします/usr/local/bin

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

    スクリプト

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

説明

ランチャーは/etc/xdg/autostart、すべてのユーザーに対してアプリケーション(この場合は追加のセキュリティチェック)を起動します。これローカルで上書きされる可能性があります、チェックの実行を知っている必要があります。NoDisplay=trueランチャーに行を入れると、その行はにローカルに表示されないStartup Applicationsため、存在することを知らずに発見される可能性は低くなります。

さらに、あなたの息子は見つけるのに15秒しかありません(画面が黒くなります)ので、彼は深刻な問題を抱えています。


しかし、息子がルートパスワードを使用してシステムにログインできる場合、rc.local?を編集することはできません。
ラファエル

1
@Raphaelだから、ユーザーが管理者でない限り、私は言及しました。しかし、彼がそうであるならば、彼が十分に賢いならば、彼が最終的に上回ることを実際に止めるものは何もない。
ジェイコブVlijm

Ikr、Linuxに精通している場合、またはGoogleを効率的に使用する方法を知っている場合、いずれにせよ、いずれの答えも機能しません。
ラファエル

1
もちろん、@ ByteCommanderはtrueです。それでも、問題の関心(時間の制限、ゲーミングに費やされる)を考えると、要求された単純なソリューション、制限された時間、合理的なレベルのセキュリティの合理的なバランスのようです。
ジェイコブVlijm

1
@JacobVlijmはい、もちろんです。私は彼らが8歳の子供をこのように締め出すかもしれないと指摘しているだけですが、技術的な知識を持った10代になると、100%のセキュリティがないことを知らなければなりません。(10代にいくつかの自由を与えたくないというわけではありません)
バイト司令官

4

私自身の経験から、コンピューターゲームへのアクセスを制限することは、子供たちを教育する上で最も困難な作業の1つです。もちろん、私たちの両親は、主に学校でコンピューターを使用することを望んでいますが、これは子供の意図と大きく対立しています。彼らは、学校でのみ使用できるハードウェアを提供することで私たちを嫌います。

そしてもちろん、我々はまた、彼らは仕事のためだけでなく、レジャーのためだけでなく、それを使用する方法を含めて、賢明な方法で自分のコンピュータを使用する方法を学びたいです。これには、ゲームやビデオの視聴が含まれます。

残念ながら、子供のコンピューティングを制限するための適切に管理されたペアレンタルコントロールは、Ubuntuではほとんど利用できません。もう一つの大きな問題は、彼らが賢い子供になるとすぐに私たちが取ったすべての手段が無駄になることです。彼らは、私たちが気付かなくても本当に賢い場合、私たちの制限を克服する方法を常に見つけます。

子供のコンピューターで実行されているブロッキングソフトウェアまたはPAM制限は一時的なものであり、遅かれ早かれ非常に簡単に克服される可能性があります。そのため、パスワードで保護されたルーターにジョブを実行させ、物理的なアクセスをはるかに簡単に制御できるようにすることにしました。

したがって、現時点でゲームをある程度制限するためにここで行うことは、以下のすべての組み合わせです。

  • 余暇にコンピュータを使用する方法とタイミング、および学校で使用するタイミングを教育するために、彼らに話しかけます。これは絶え間なく進行する、かなり退屈なプロセスであり、終わりのない議論と議論につながります。しかし、それは私たちが長期的に続く唯一のものであると感じるものです。
  • アカウントに対する管理者権限ありません。これは一時的なものです。彼らはsudo遅かれ早かれグループに参加できることを知っています。計画では、これを非表示にするのではなく、私たちにそれを求めます。
  • 明確に定義された計算時間について契約結ぶ。彼らは、自分のマシンを何のためにどのくらいの期間使用できるかを知る必要があります。彼らはこの時間を学校余暇のために分割する方法を学ぶ必要があります。
  • 睡眠時間中はすべてのインターネットをハードブロックします。

子供と私たち両方のコンピューターの使用に関する契約の履行を容易にするために、次の制限を設けました。

  • パスワードで保護されたルーターを使用して、ハードウェア(MAC)とタイムテーブルベースの組み合わせでインターネットアクセスを制限できるようにします。MACスプーフィングについて知らない限り、これは非常にうまく機能します。また、スマートフォンやタブレットからのアクセスも制限されます。もちろん、近所にオープンワイヤレスネットワークがある場合、これは機能しません。
  • 子供のコンピューターにSSHサーバーをインストールして、自分の意図で迷子になった場合に備えてプラグを抜いてください。これは、緊急の場合に必要なものでした。
  • 最悪の場合のアクセスをブロックするDNSブラックリストをインストールしました(コンピューターではなく、ルーターを介して!)。

インターネットアクセスをブロックすると、そのゲームがSteamMinecraft、またはその他のgamigサーバーなどのインターネットアクセスを必要とする場合、ゲームが事実上無効になります。ただし、オフラインで実行されるゲームには効果がありません。


sshアプリケーションを使用してシャットダウンするだけですか、それとも単に閉じますか?
ラファエル

状況によって異なります... SSHはすべてを実行し、シャットダウン、ユーザーの強制終了、アプリの強制終了、ハックの取り消し、sudoerからのユーザーの削除などを行うことができます。
Takkat

ニース、あなたがルートになると元に戻すことができるすべてのローカルのものを除いて、追加のセキュリティレイヤーを持っている最初の人です(物理的なアクセスがある場合は予防できません)。
バイトコマンダー

0

これは、シェルスクリプトを使用して実現できます。

最初のスクリプトは、Steam実行後すぐに強制終了します。

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

/path/to/anyname.sh名前を付けて保存し、起動アプリケーションのリストに追加します。

このスクリプトは、steam1秒ごとに名前が付けられている開いているプロセスをチェックし、見つかった場合は強制終了します。

しかし、steam特定の時間に適切に実行できるソリューションが必要です。そうすれば、その時間に息子がゲームをプレイできます。そのためには、別のスクリプトを作成する必要があります。

#!/bin/bash

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

exit 0

/path/to/anyname2.sh名前を付けて保存し、スタートアップアプリケーションのリストに追加します。

このスクリプトは10:00に最初のスクリプトを強制終了します。だから、あなたの息子がSteam10:00に走るとき。彼は今すぐプレイできるようになります。

3番目のスクリプトは、別の時点で最初のスクリプトを再起動して、Steamある時間間隔が経過した後、息子がゲームをプレイできないようにすることSteamです。

#!/bin/bash

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

exit 0

/path/to/anyname3.sh名前を付けて保存し、スタートアップアプリケーションのリストに追加します。

あなたの息子が見つけられないように、それらの道を隠しておいてください。


起動するたびに殺すのではなく、起動を停止する方法はありませんか?
エドワードトーバルズ

@edwardtorvalds-私は何も知らないので、このソリューションを投稿しました。
ラファエル

私はあなたの答えに賛成しますが、OPには技術的な手法ではなく、

そのシンプルで簡単な操作は、スクリプトをコピーして貼り付け、それらのファイルを保存し、それらをスタートアップアプリケーションに追加するだけです。
ラファエル

ループを殺す-私が想像できる最も汚い。
クロール

0

システム設定を介して)新しいユーザーアカウントを使用しない理由。これは、Linuxでの「許可」の唯一の方法です。

  1. 新しいユーザー「SteamUser」は、sudoers(制限されたアカウントのみ)であってはなりません。
  2. 次に、「SuperAdmin」という2番目のアカウントを作成し、sudoersアカウント(ルートアクセス)にします。ただし、パスワードは自分だけに保管してください。
  3. 次に、sudoersから息子のアカウントを削除します。(sudoグループ)。このアカウントはルートアクセス権を持たなくなり、ソフトウェアのインストールまたは削除、システム全体の設定の変更ができなくなります。
  4. 「SuperAdmin」アカウントにログインし、SteamバイナリSteamゲームフォルダの所有権を変更して、「SteamUser」以外の人が実行できないようにします。これには、「SteamUser」を除くすべてのユーザーからの読み取り、書き込み、実行アクセス権の削除が含まれます

いくつかのメモ..

  • 息子のアカウントでルートアクセスを許可することはできません。そうしないと、chown / chmodを使用してアクセス許可の制御が簡単にバイパスされます。
  • バックグラウンドスクリプトに基づく他の提案は、不安定な混乱です。これは、彼らが有望ではないことを意味します。ただし、セットアップは簡単かもしれません。
  • 「SteamAccount」に転送するフォルダーパスは次のとおり/home/son/.steamです。もちろん、バイナリファイル/usr/games/steam
  • Steamをプレイするには、「SteamUser」パスワードが必要です(「SteamUser」でログインし、steamを実行する必要があります。ロックしてしばらくしてからセッションを期限切れにする方法を探してみてください。そのようなツールがあるかどうかはわかりませんが、時間制限を設定することは技術的には可能ですが、プログラムではなくセッションに対してです。

ああ、私は...私は私のdownvoterを発見したと信じて
ジェイコブVlijm

これは実際には安全ではありません。十分に賢い子供(Googleを使用してステップバイステップガイドに従うことができれば十分)は、物理的なアクセスがあればユーザーの制限を簡単にバイパスできます。
バイトコマンダー

少なくとも@ByteCommanderは、バックグラウンドスクリプトよりも信頼性が高くなります。しかし、ええ、あなたは正しいです。Windowsと同じです。どこでも好きです。
クロール

違反はありませんが、これはどのように安全ですか?
ジェイコブVlijm

また、子供がSteamを使用できる期間の制限をどのように指定しますか?そして、許可された学校のものはどうですか?そのための別のアカウント?彼らは痛みが理由などないの共有設定を使用するようにしているので、私は個人的には、一人あたりあまりにも多くのアカウントでシステムを憎む
バイト司令
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.