응용 프로그램에 대한 액세스를 제한하거나 제한하려면 어떻게해야합니까?


18

내 아들은 이번 크리스마스에 새 ​​학교에서 주로 새 학교에서 사용하기 위해 새 랩톱을 받았습니다. 이제 자신의 랩톱이 있으므로 Steam을 설치했습니다.

그러나 아내는 내가 노트북을 주로 학교용으로 사용하기 때문에 Steam을 제거하기를 원합니다. 필요하지 않으면 오히려 그렇게하지 않을 것입니다.

Steam에 대한 액세스를 제한하거나 제한 할 수있는 방법이 있습니까? 아마도 Steam 자체의 암호 또는 암호를 실행할 수있는 시간을 설정하십시오.

이상적으로 는 내 일이 종종 집 (컴퓨터, 통신 등)에서 오랫동안 집을 떠나 있고 아내가 컴퓨터만큼 편안하지 않기 때문에 사용하기 매우 간단한 것이 이상적 입니다. 사용하기가 훨씬 낫습니다.

분명히 거기에 뭔가 이 작업을 달성 할 수 거기는?


라우터의 어린이 보호 잠금 장치를 사용하여 하루 1 시간 등 증기에 대한 액세스를 제한 할 수 있습니다. Steam은 클라이언트 트래픽에 UDP 27000-27015 포트를 사용합니다. 라우터에서이 포트를 제한하면 아들이 스팀에 로그인 할 수 없습니다.
— Kev Inski

가장 간단한 해결책은 Steam을 설치 한 Ubuntu에서 사용자 프로필을 만드는 것입니다. 아들이 사용할 새 사용자 프로필의 암호를 만드십시오.

@Begueradj Kids는 똑똑 할 수 있습니다. 머신에 대한 물리적 액세스는 가능한 루트 액세스를 의미하므로 암호화를 제외한 모든 것을 우회 할 수 있습니다. 그 사용자를 안전하게 보호하려면 해당 사용자의 홈 디렉토리를 암호화해야합니다.
— 바이트 사령관

@Gregory 아들이 컴퓨터를 얼마나 똑똑합니까? 100 % 안전한 것이 필요합니까, 아니면 Steam에 액세스하는 것이 사소한 것이면 충분합니까?
— 바이트 사령관

답변:


2

프로세스 또는 애플리케이션에 대한 시간 제한 설정

작은 백그라운드 스크립트를 사용하면 프로세스 또는 응용 프로그램에 시간 제한을 설정할 수 있습니다.
사용자가 관리자의 비밀번호를 모르면 너무 쉽게 넘어 가지 않습니다.

아래 솔루션

그런 작은 배경 스크립트입니다. 스크립트 헤드에서 설정하기 위해 하루 사용량 을 정의 된 시간 (분)으로 제한합니다 . 일단 설정하면 (너무 어렵지 않음) 매우 쉽게 실행되며 나중에 추가 조치가 필요하지 않습니다.

스크립트

#!/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 초에 한 번 스크립트는 대상 프로세스가 실행 중인지 확인합니다. 그렇다면, 총 사용량에 하나의 "포인트"를 "추가"하여 파일 ( /opt/limit/uselog)에 기록합니다 . 일별 제한에 도달하면 스크립트는 더 이상 프로세스 실행을 허용하지 않으며 프로세스가 존재하면 종료합니다.
  • 요일 변경 (날짜가 파일에 기록되므로 재부팅해도 도움이되지 않음)에서 로그 파일이 삭제되어 새로운 사용 시간이 쌓일 수 있습니다.
  • 의 스크립트 실행 이후 부팅 에서, rc.local사용자가 프로세스 이름을 알고도 다음 경우에만 스크립트를 중지 할 수 있습니다 sudo는 권한을 가진 유일한 사용자 (들).

스크립트를 중지

스크립트를 중지하려면 다음 명령을 사용하십시오.

sudo kill "$(pgrep limit_use)"

그러나 다시, 그렇게하려면 sudo 비밀번호가 필요합니다.




편집하다

위의 스크립트는 @Bytecommander가 언급했듯이 응용 프로그램의 사용을 제한하는 합리적으로 안전한 방법을 제공해야 하지만 매우 쉽지는 않지만 능가 할 수 있습니다. 아래 측정 값과 함께 사용하면 아들 이 설정을 알고 Linux / Ubuntu에 익숙 하지 않은 경우 이런 일이 발생할 가능성이 거의 없습니다 .

추가 측정

"간단한 솔루션"에서 조금 더 멀었지만 설정하기가 여전히 어렵지 않은 것은 아래 의 추가 조치입니다. 경우 우리의 의심 연체 스크립트가 호출 찾을 것입니다 /etc/rc.local, 루트되기 위해 관리하고있는 줄을 제거 것 /etc/rc.local, 또는 방법은, 우리가 다음 문제 그를 대면 할 수있는 스크립트를 중지 할 수있을 것입니다 : 밖으로 화면 흑인 후 또한 솔루션은 다시 시작한 후 5 분 후에 백그라운드 스크립트가 실행 중인지 확인하고 그렇지 않으면 블랙 아웃됩니다.

라인이 경우 추가 조치는 startup- 체크 인 /opt/limit/limit_use &에 존재하는 /etc/rc.local, 그리고 스크립트가 여전히 실행하는 경우 5 분 후에 체크. 스크립트는 (시작 응용 프로그램에서 숨겨져 있음) 실행기에서 실행 되므로 수행 방법 /etc/xdg/autostart을 알지 못하면 진행 상황을 찾기가 매우 어렵 습니다. 이 두 가지 조치의 조합은 당신의 아들이 찾아 낼 가능성이 거의 없으며, 만일 그렇게한다면 그를 막을 수있는 것은 없을 것입니다.

설정 방법

두 가지 간단한 단계가 포함됩니다.

  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?
— Raphael

1
@Raphael이므로 사용자가 관리자가 아닌 한 언급 했습니다 . 그러나 만약 그가 현명하다면, 그가 충분히 똑똑하다면 실제로 그를 능가하는 것을 막을 수있는 것은 아무것도 없습니다.
— Jacob Vlijm

Ikr은 Linux에 정통하거나 Google을 효율적으로 사용하는 방법을 알고 있다면 결국 아무런 대답도 작동하지 않습니다.
— Raphael

1
@ByteCommander 물론입니다. 그럼에도 불구하고 , 질문에 관심이있는 경우 (시간 제한, 게임 이용 시간), 요청 된 간단한 솔루션, 제한된 시간 및 합리적인 수준의 보안 의 합리적인 균형으로 보입니다 .
— Jacob Vlijm

1
@JacobVlijm 물론입니다. 나는 그들이 8 살짜리 아이를 이런 식으로 쫓아 낼 수 있다고 지적하고 있지만, 기술적 인 지식을 가진 십대가되면 100 % 보안이 없다는 것을 알아야합니다. (나는 십대에게 약간의 자유를 원치 않습니다)
— 바이트 사령관

4

내 자신의 경험에서 컴퓨터 게임에 대한 액세스를 제한하는 것은 아이들을 교육하는 데 가장 어려운 과제 중 하나입니다. 물론 부모님은 주로 학교에서 컴퓨터를 사용하기를 원하지만 이것은 어린이의 의도와 크게 상충됩니다. 학교에서만 사용할 수있는 하드웨어를 제공하는 것이 우리를 미워할 것입니다.

물론 우리 는 또한 업무용뿐만 아니라 여가 용 컴퓨터를 사용하는 방법을 포함하여 합리적인 방법으로 컴퓨터를 사용하는 방법을 배우기를 원합니다. 여기에는 게임 및 비디오 시청이 포함됩니다.

불행히도, 아이의 컴퓨팅을 제한하기 위해 잘 유지되고 작동하는 부모 통제 기능 은 우분투에서 거의 사용할 수 없습니다. 또 다른 주요 문제는 그들이 똑똑한 아이들 이 되 자마자 우리가 취한 모든 조치가 헛된 것입니다. 그들은 우리가 눈치 채지도 못하고 정말로 똑똑 할 경우 항상 우리의 제한을 극복 할 수있는 방법을 찾을 것입니다.

아이의 컴퓨터에서 실행되는 모든 차단 소프트웨어 또는 PAM 제한은 일시적 일 뿐이며 조만간 매우 쉽게 극복 할 수 있습니다. 따라서 암호로 보호 된 라우터가 물리적 액세스를 훨씬 쉽게 제어 할 수있는 작업을 수행하도록 결정했습니다.

따라서 현재 게임을 다소 제한하기 위해 우리가하는 일은 다음과 같은 것의 조합입니다.

  • 자녀 에게 컴퓨터를 사용하여 여가를 언제 어떻게 사용하는지, 언제 학교를 위해 사용하는지 교육 시키십시오. 이것은 끊임없는 토론과 논쟁으로 이어지는 지속적으로 진행되는 다소 지루한 과정입니다. 그러나 우리가 느끼는 것은 장기적으로 지속될 유일한 것입니다.
  • 계정에 대한 관리자 권한이 없습니다 . 이것은 일시적인 것입니다. 우리는 그들이 sudo조만간 그룹 에 참여할 수 있다는 것을 알고 있습니다 . 계획은 그들이 이것을 숨기지 않고 우리에게 요구할 것입니다.
  • 명확하게 정의 된 컴퓨팅 시간을 계약하십시오 . 그들은 기계를 사용할 수있는 기간과 기간을 알아야합니다. 그들은 학교 와 여가 를 위해이 시간을 나누는 방법을 배워야합니다 .
  • 수면 시간 동안 모든 인터넷을 강제 차단합니다 .

아이들과 우리 모두의 컴퓨터 사용 계약을 쉽게 이행하기 위해 다음과 같은 제한 사항을 설치했습니다.

  • 하드웨어 (MAC)와 시간표를 조합하여 인터넷 액세스를 제한 할 수 있는 암호로 보호 된 라우터 를 사용하십시오 . MAC 스푸핑에 대해 모르는 한이 방법은 꽤 효과적입니다. 또한 스마트 폰과 태블릿을 통한 액세스를 제한합니다. 이웃에 개방형 무선 네트워크가있는 경우에는 물론 작동하지 않습니다.
  • 아이의 컴퓨터에 SSH 서버 를 설치하여 의도에 따라 플러그를 뽑습니다. 이것은 긴급한 경우에 우리가 많이 필요하지 않은 것을 기쁘게 생각합니다.
  • 최악의 액세스를 차단해야하는 DNS 블랙리스트 (컴퓨터가 아닌 라우터를 통해)를 설치했습니다 .

해당 게임에 Steam , Minecraft 또는 기타 gamig 서버 와 같은 인터넷 액세스가 필요한 경우 인터넷 액세스를 차단하면 게임이 효과적으로 비활성화됩니다 . 그러나 오프라인으로 실행되는 게임에는 영향을 미치지 않습니다.


ssh응용 프로그램을 사용 하거나 종료하는 것을 의미 합니까?
— Raphael

상황에 따라 ... SSH는 모든 작업을 수행하고, 종료하고, 사용자를 죽이고, 앱을 죽이고, 해킹을 되돌리고, sudoers에서 사용자를 제거 할 수 있습니다.
— Takkat

좋아, 당신은 루트가 될 때 되돌릴 수있는 모든 로컬 물건을 제외하고 추가 보안 계층을 가진 첫 번째 사람입니다 (물리적 액세스 권한이 있으면 막을 수는 없습니다).
— 바이트 사령관

0

쉘 스크립트를 사용하면됩니다.

첫 번째 스크립트는 Steam실행되는 즉시 종료하는 것입니다.

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

다른 이름으로 저장하고 /path/to/anyname.sh시작 응용 프로그램 목록에 추가하십시오.

이 스크립트는 steam매 초마다 이름이 지정된 열린 프로세스를 확인 하고 발견하면 프로세스를 종료 합니다.

그러나 steam자녀가 해당 간격 동안 게임을 할 수 있도록 특정 시간에 바로 실행할 수 있는 솔루션이 필요 합니다. 그렇게하려면 다른 스크립트를 작성해야합니다.

#!/bin/bash

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

exit 0

다른 이름으로 저장하고 /path/to/anyname2.sh시작 응용 프로그램 목록에 추가하십시오.

이 스크립트는 10:00 시간에 첫 번째 스크립트를 종료합니다. 따라서 아들이 Steam10시 정각에 달할 때 . 그는 지금 그것을 할 수있을 것입니다.

세 번째 스크립트는 다른 시점에서 첫 번째 스크립트를 다시 시작하여 종료되도록하는 것입니다 Steam 시간 간격 후에 종료되어 아들이 Steam더 이상 게임을 할 수 없도록하는 것입니다.

#!/bin/bash

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

exit 0

파일을 다른 이름으로 저장하고 /path/to/anyname3.sh시작 응용 프로그램 목록에 추가하십시오.

아들이 찾지 못하도록 그 길을 숨겨 두십시오.


시작할 때마다 죽이지 않고 시작을 막을 수있는 방법이 없습니까?
— Edward Torvalds

@edwardtorvalds-나는 아무것도 몰라서이 솔루션을 게시했습니다.
— Raphael

나는 당신의 대답을 upvote에, 그러나 영업 이익은 SIMPLE / EASY과 너무 기술적 인 방법이 필요

간단하고 쉬운 방법은 스크립트를 복사하여 붙여 넣기하여 해당 파일을 저장하고 시작 응용 프로그램에 추가 한 다음 잊어 버리는 것입니다.
— Raphael

킬 루프-내가 생각할 수있는 가장 더러운.
— Croll

0

왜 새로운 사용하는 사용자 계정을 통해 ( 시스템 설정 ). 이것은 "권한"에 대한 Linux의 유일한 방법입니다.

  1. 새로운 사용자 "SteamUser"는 sudoers에 있지 않아야합니다 (단지 제한된 계정).
  2. 그런 다음 "SuperAdmin"이라는 두 번째 계정을 만들어 sudoers 계정 (루트 액세스)으로 만듭니다. 그러나 비밀번호는 본인 만 가지고 있어야합니다.
  3. 그런 다음 아들의 계정을 sudoers에서 제거하십시오. (sudo 그룹). 그런 다음이 계정은 루트 액세스 권한이 없으며 소프트웨어를 설치 또는 제거하거나 시스템 전체 설정을 변경할 수 없습니다.
  4. "SuperAdmin"계정에 로그인 하고 "SteamUser"이외의 사람 이 스팀 바이너리 및 스팀 게임 폴더 를 실행하지 못하도록 스팀 바이너리 및 스팀 게임 폴더의 소유권을 변경하십시오 . 여기에는 "SteamUser"를 제외한 모든 사람으로부터 읽기 + 쓰기 + 실행 액세스 권한이 제거됩니다

몇 가지 메모 ..

  • 아들의 계정으로 루트 액세스 권한을 남겨 두는 것이 무의미하지 않습니다. 그렇지 않으면 chown / chmod를 사용하여 권한 제어를 쉽게 우회 할 수 있습니다.
  • 백그라운드 스크립트를 기반으로 한 다른 제안은 불안정한 혼란입니다. 이것은 그들이 유망하지 않다는 것을 의미합니다. 그러나 설정하기 쉽습니다.
  • "SteamAccount"로 전송할 폴더 경로는 다음 /home/son/.steam과 같습니다. 물론 이진 파일/usr/games/steam
  • Steam을 플레이하려면 "SteamUser"비밀번호가 필요합니다 ( "SteamUser"로 로그인해야하고 비밀번호를 실행해야합니다. 잠긴 후 세션이 만료되어 너무 오래 플레이하지 못하게하는 방법을 찾을 수 있습니다. 그런 도구가 있는지 확실하지 않지만 기술적으로 시간 제한을 설정할 수 있지만 프로그램이 아닌 세션의 경우 시간 제한을 설정할 수 있습니다.

아, 난 내가 downvoter를 발견했다고 생각합니다 ...
— Jacob Vlijm

똑똑한 충분한 아이들이 (Google을 사용하고 단계별 가이드를 이미 따르면 충분합니다) 물리적 액세스 권한이 있으면 사용자 제한을 쉽게 우회 할 수 있기 때문에 이것은 실제로 안전하지 않습니다.
— 바이트 사령관

@ByteCommander 최소한 백그라운드 스크립트보다 안정적입니다. 하지만 네 말이 맞아요. Windows에서와 마찬가지로. 어디서나 좋아
— Croll

공격은 없지만 어떻게 더 안전합니까?
— Jacob Vlijm

그리고 아이가 스팀을 얼마나 오래 사용할 수 있는지에 대한 시간 제한을 어떻게 지정하고 싶습니까? 그리고 허용되는 학교 물건은 어떻습니까? 또 다른 계정? 공유 설정 등이 아니기 때문에 사용하기가
— Byte Commander
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.