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


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.