Làm cách nào tôi có thể giới hạn hoặc hạn chế quyền truy cập vào một ứng dụng?


18

Con trai tôi đã nhận được một máy tính xách tay mới vào Giáng sinh vừa qua, chủ yếu để sử dụng tại trường học mới của mình ... Và bây giờ khi nó có máy tính xách tay của riêng mình, anh ấy đã rất phấn khích khi cài đặt Steam.

Nhưng người vợ muốn tôi gỡ bỏ Steam, vì máy tính xách tay chủ yếu để sử dụng ở trường ... Tôi không muốn làm điều đó, nếu tôi không phải làm vậy.

Có cách nào để tôi có thể hạn chế hoặc hạn chế quyền truy cập vào Steam không? Có lẽ mật khẩu trên Steam hoặc đặt thời gian có thể chạy?

Lý tưởng nhất là sử dụng một thứ khá đơn giản vì công việc của tôi thường khiến tôi xa nhà (và máy tính, viễn thông và ...) trong thời gian dài và trong khi vợ tôi không thoải mái với máy tính như tôi, dễ dàng hơn để sử dụng là xa, xa hơn.

Chắc chắn có một cái gì đó ngoài kia có thể đạt được nhiệm vụ này?


Bạn có thể sử dụng khóa chống trẻ em trong bộ định tuyến của mình để hạn chế quyền truy cập vào hơi nước, ví dụ 1h mỗi ngày. Steam sử dụng các cổng UDP 27000 - 27015 cho lưu lượng khách. Nếu bạn giới hạn các cổng này trong bộ định tuyến, con trai bạn sẽ không thể đăng nhập vào hơi nước.
Kev Inski

Giải pháp đơn giản nhất là tạo hồ sơ người dùng trên Ubuntu mà bạn cài đặt Steam. Tạo một mật khẩu cho hồ sơ người dùng mới sẽ được sử dụng bởi con trai của bạn.

@Begueradj Trẻ em có thể thông minh. Và truy cập vật lý vào máy có nghĩa là có thể truy cập root, có nghĩa là bạn có thể bỏ qua mọi thứ trừ khi có thể mã hóa. Bạn sẽ cần mã hóa thư mục chính của người dùng đó để bảo vệ an toàn sau đó.
Chỉ huy Byte

@Gregory Con trai bạn thông minh thế nào với máy tính? Bạn có cần một thứ an toàn 100% không, hay nó là đủ nếu việc truy cập Steam chỉ là không tầm thường?
Chỉ huy Byte

Câu trả lời:


2

Đặt giới hạn thời gian cho một quy trình hoặc ứng dụng

Với một tập lệnh nền nhỏ, bạn có thể đặt giới hạn thời gian cho một quy trình hoặc ứng dụng.
Miễn là người dùng của bạn không biết mật khẩu của quản trị viên , nó không bị vượt quá dễ dàng.

Giải pháp dưới đây

Là một kịch bản nền nhỏ như vậy. Nó giới hạn việc sử dụng mỗi ngày ở một số phút xác định, để đặt vào phần đầu của tập lệnh. Sau khi thiết lập (không quá khó), nó sẽ chạy rất dễ dàng và không cần thực hiện thêm hành động nào sau đó.

Kịch bản

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

Cách sử dụng

  1. Trên máy tính để bàn của bạn (hoặc bất cứ nơi nào khác), tạo một thư mục có tên: limit
  2. Sao chép tập lệnh vào một tệp trống, lưu nó dưới dạng limit_use(không có phần mở rộng) trong thư mụclàm cho nó có thể thực thi được
  3. Chỉnh sửa trong phần đầu của kịch bản tên quy trình để giới hạn và số phút tối đa được phép. Trong ví dụ:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the process name to limit below
    app = "gedit"
  4. Sao chép thư mục vào thư mục /opt:

    cp -r /path/to/limit /opt
  5. Bây giờ chỉnh sửa /etc/rc.localđể làm cho kịch bản chạy nó như khi rootkhởi động:

    sudo -i gedit /etc/rc.local

    Ngay trước dòng

    exit 0

    một dòng khác:

    /opt/limit/limit_use &

Đó là nó

Khi ai đó cố gắng giết tập lệnh nền:

nhập mô tả hình ảnh ở đây

(hành động không được phép)

Giải trình; làm thế nào nó hoạt động

  • Cứ sau 10 giây, tập lệnh sẽ xem xét nếu quá trình được nhắm mục tiêu đang chạy. Nếu vậy, nó "thêm" một "điểm" vào tổng mức sử dụng, sẽ được ghi lại trong một tệp ( /opt/limit/uselog). Nếu đạt đến giới hạn hàng ngày, tập lệnh không còn cho phép tiến trình chạy, giết nó nếu nó tồn tại.
  • Vào ngày thay đổi (ngày được ghi trong một tệp, vì vậy khởi động lại sẽ không giúp ích), tệp nhật ký sẽ bị xóa, cho phép tạo ra một lượng thời gian sử dụng mới.
  • Vì tập lệnh chạy khi khởi động , rc.localchỉ từ (các) người dùng có quyền sudo mới có thể dừng tập lệnh, ngay cả khi người dùng biết tên quy trình.

Dừng kịch bản

Trong trường hợp bạn muốn dừng tập lệnh, hãy sử dụng lệnh:

sudo kill "$(pgrep limit_use)"

Nhưng một lần nữa, bạn cần mật khẩu sudo để làm như vậy.




BIÊN TẬP

Mặc dù tập lệnh ở trên sẽ cung cấp một cách an toàn hợp lý để hạn chế việc sử dụng ứng dụng, như được đề cập bởi @Bytecommander, nhưng nó có thể được vượt qua, mặc dù không dễ dàng lắm. Sự kết hợp với biện pháp dưới đây sẽ khiến việc này rất khó xảy ra, trừ khi con trai bạn biết thiết lập và khá có kinh nghiệm với Linux / Ubuntu.

Biện pháp bổ sung

Một chút nữa từ một "giải pháp đơn giản", nhưng vẫn không quá khó để thiết lập là biện pháp bổ sung dưới đây. Nếu tội phạm bị nghi ngờ của chúng ta sẽ tìm hiểu kịch bản được gọi là từ /etc/rc.local, sẽ quản lý để trở thành người chủ, và loại bỏ các dòng trong /etc/rc.local, hoặc sẽ có thể để ngăn chặn kịch bản như vậy, chúng ta có thể đối đầu với anh ta với vấn đề tiếp theo: màn hình màu đen ra sau đăng nhập. Ngoài ra, giải pháp kiểm tra xem tập lệnh nền có chạy sau 5 phút sau khi khởi động lại hay không, nếu không.

Các biện pháp bổ sung là một tấm séc khởi động cùng win nếu dòng /opt/limit/limit_use &hiện diện trong /etc/rc.local, một tấm séc sau 5 phút nếu kịch bản vẫn chạy. Vì tập lệnh chạy từ trình khởi chạy (ẩn khỏi Ứng dụng khởi động) trong /etc/xdg/autostartnên sẽ khá khó để tìm hiểu điều gì đang xảy ra, trừ khi bạn biết cách thực hiện. Sự kết hợp của hai biện pháp này khiến con trai bạn không thể phát hiện ra, và nếu có, có lẽ không có gì ngăn cản được nó.

Làm thế nào để thiết lập

Hai bước đơn giản có liên quan:

  1. Sao chép mã dưới đây vào một tệp trống, lưu nó như blackout.desktoptrên máy tính để bàn của bạn:

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

    Sao chép tệp vào /etc/xdg/autostart:

    sudo cp /path/to/blackout.desktop /etc/xdg/autostart
  2. Sao chép tập lệnh bên dưới vào một tệp trống, lưu nó như blackout.pytrên máy tính để bàn của bạn, làm cho tập tin thực thi và sao chép nó vào /usr/local/bin:

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

    Kịch bản

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

Giải trình

Các trình khởi chạy trong /etc/xdg/autostartsẽ khởi chạy một ứng dụng (trong trường hợp này là kiểm tra bảo mật bổ sung) cho tất cả người dùng. Điều này có thể được ghi đè cục bộ, nhưng bạn phải biết kiểm tra chạy. Bằng cách đưa dòng NoDisplay=truevào launcher của chúng tôi, nó sẽ không xuất hiện cục bộ Startup Applications, vì vậy mà không biết nó tồn tại, nó khó có thể được phát hiện.

Hơn nữa, con trai của bạn chỉ có 15 giây để tìm hiểu (sau đó màn hình bị tắt) vì vậy nó sẽ gặp vấn đề nghiêm trọng, trừ khi nó là một người tài giỏi, có nhiều kinh nghiệm với Ubuntu và một bộ óc sáng tạo.


Nhưng nếu con trai anh ta có thể đăng nhập vào hệ thống bằng mật khẩu gốc thì anh ta có thể chỉnh sửa rc.localkhông?
Raphael

1
@Raphael đó là lý do tại sao tôi đề cập miễn là người dùng không phải là quản trị viên . Nhưng nếu là anh ta, thực tế sẽ không có gì ngăn cản anh ta vượt qua cuối cùng nếu anh ta đủ thông minh.
Jacob Vlijm

Ikr, nếu anh ta thành thạo linux hoặc nếu anh ta biết sử dụng google hiệu quả, cuối cùng không có câu trả lời nào hoạt động.
Raphael

1
@ByteCommander đúng là tất nhiên. Tuy nhiên, có vẻ như một sự cân bằng hợp lý của giải pháp đơn giản được yêu cầu , thời gian hạn chế và mức độ bảo mật hợp lý, được quan tâm trong câu hỏi (giới hạn thời gian, dành cho chơi game).
Jacob Vlijm

1
@JacobVlijm Vâng, tất nhiên. Tôi chỉ chỉ ra rằng họ có thể giữ đứa trẻ 8 tuổi của mình theo cách này, nhưng khi nó trở thành một thiếu niên với một số kiến ​​thức kỹ thuật, họ phải biết rằng không có bảo mật 100%. (Không phải là tôi không muốn cho thiếu niên tự do một chút)
Chỉ huy Byte

4

Từ kinh nghiệm của riêng tôi, việc hạn chế truy cập vào các trò chơi trên máy tính là một trong những nhiệm vụ khó khăn nhất trong việc giáo dục trẻ em của chúng tôi. Tất nhiên cha mẹ chúng tôi muốn chúng sử dụng máy tính của chúng chủ yếu cho trường học nhưng điều này mâu thuẫn nặng nề với ý định của đứa trẻ. Họ sẽ ghét chúng tôi vì đã cho họ phần cứng chỉ có thể sử dụng cho trường học.

Và tất nhiên chúng tôi cũng muốn họ học cách sử dụng máy tính của họ một cách hợp lý, bao gồm cả cách sử dụng nó không chỉ cho công việc mà còn để giải trí. Điều này bao gồm chơi game và xem video.

Thật không may, các biện pháp kiểm soát của cha mẹ được duy trì và làm việc tốt để hạn chế tính toán của đứa trẻ gần như không có sẵn cho Ubuntu. Một vấn đề lớn khác là ngay khi chúng là những đứa trẻ thông minh, mọi biện pháp chúng tôi thực hiện đều trở nên vô ích. Họ sẽ luôn tìm cách khắc phục những hạn chế của chúng tôi, trong trường hợp họ thực sự thông minh mà không cần chúng tôi có thể nhận thấy.

Mọi phần mềm chặn hoặc hạn chế PAM chạy trên máy tính của trẻ sẽ chỉ là tạm thời và sớm muộn gì cũng có thể khắc phục được. Do đó, chúng tôi quyết định để bộ định tuyến được bảo vệ bằng mật khẩu thực hiện công việc, nơi truy cập vật lý có thể được kiểm soát dễ dàng hơn nhiều.

Vì vậy, những gì chúng tôi làm ở đây để hạn chế phần nào chơi game tại thời điểm này là sự kết hợp của tất cả những điều sau đây:

  • Nói chuyện với họ để giáo dục họ cách sử dụng máy tính để giải trí và khi nào nên sử dụng chúng cho trường học. Đây là một quá trình liên tục, khá tẻ nhạt dẫn đến các cuộc thảo luận và tranh luận bất tận. Nhưng đó là những gì chúng tôi cảm thấy là điều duy nhất sẽ tồn tại trong dài hạn.
  • Không có quyền quản trị viên trên tài khoản của họ. Đây là một điều tạm thời. Chúng tôi biết rằng họ sẽ sớm có thể đưa mình vào sudonhóm sớm hơn. Kế hoạch là họ sẽ yêu cầu chúng tôi cho điều đó hơn là thực hiện điều này trong việc che giấu.
  • Làm hợp đồng cho thời gian tính toán được xác định rõ ràng. Họ cần biết những gì và trong bao lâu họ được phép sử dụng máy của họ. Họ cần học cách phân chia thời gian này để đi học giải trí.
  • Cứng chặn tất cả internet trong giờ ngủ .

Để dễ dàng thực hiện hợp đồng sử dụng máy tính cho cả hai, trẻ em và chúng tôi, chúng tôi đã cài đặt các hạn chế sau:

  • Sử dụng bộ định tuyến được bảo vệ bằng mật khẩu cho phép hạn chế truy cập internet trên sự kết hợp giữa phần cứng (MAC) và cơ sở bảng thời gian. Miễn là họ không biết về giả mạo MAC thì việc này sẽ hoạt động khá tốt. Nó cũng sẽ hạn chế quyền truy cập thông qua điện thoại thông minh và máy tính bảng của họ. Điều này tất nhiên sẽ không hoạt động nếu có một mạng không dây mở trong khu phố của bạn.
  • Cài đặt máy chủ SSH trên máy tính của đứa trẻ để rút phích cắm trong trường hợp chúng bị lạc trong ý định của riêng chúng. Đây là trường hợp khẩn cấp, chúng tôi rất vui vì chúng tôi không cần nhiều.
  • Đã cài đặt một danh sách đen DNS (thông qua bộ định tuyến, không phải máy tính!) Sẽ chặn truy cập đến điều tồi tệ nhất.

Chặn truy cập internet sẽ vô hiệu hóa chơi game một cách hiệu quả nếu trò chơi đó cần truy cập internet như Steam , Minecraft hoặc các máy chủ gamig khác. Tuy nhiên, nó sẽ không có hiệu lực đối với các trò chơi chạy trực tuyến.


Bạn đang đề cập đến tắt máy bằng cách sử dụng sshhoặc chỉ đóng ứng dụng?
Raphael

Tùy thuộc vào tình huống ... SSH có thể làm tất cả, tắt máy, giết người dùng, tắt ứng dụng, hoàn nguyên hack, xóa người dùng khỏi sudoers, ... đối với SSH, chúng tôi có tài khoản quản trị viên phụ huynh trên tất cả các hộp của trẻ em.
Takkat

Thật tuyệt, bạn là người đầu tiên có một lớp bảo mật bổ sung ngoại trừ tất cả nội dung cục bộ mà người ta có thể hoàn nguyên nếu chúng trở thành root (không thể ngăn chặn được nếu chúng có quyền truy cập vật lý).
Chỉ huy Byte

0

Điều này có thể đạt được bằng cách sử dụng các kịch bản shell.

Kịch bản đầu tiên là giết Steamngay khi nó được chạy:

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

Lưu nó dưới dạng /path/to/anyname.shvà thêm nó vào danh sách các ứng dụng khởi động.

Kịch bản này sẽ làm gì là nó sẽ kiểm tra bất kỳ quy trình mở nào được đặt tên steammỗi giây và nếu nó tìm thấy bất kỳ thì nó sẽ giết nó.

Nhưng, bạn cần một giải pháp steamcó thể chạy vào một thời điểm cụ thể để con trai bạn có thể chơi trò chơi trong khoảng thời gian đó. Để làm điều đó bạn phải viết một kịch bản khác:

#!/bin/bash

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

exit 0

Lưu nó dưới dạng /path/to/anyname2.shvà cũng thêm nó vào danh sách các ứng dụng khởi động của bạn.

Kịch bản này sẽ giết kịch bản đầu tiên lúc 10:00 giờ. Vì vậy, khi con trai của bạn chạy Steamvào lúc 10:00. Anh ấy sẽ có thể chơi nó bây giờ.

Kịch bản thứ ba là khởi tạo lại kịch bản đầu tiên vào một thời điểm khác để nó giết Steamsau một khoảng thời gian và con trai bạn sẽ không thể chơi trò chơi Steamnữa.

#!/bin/bash

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

exit 0

Lưu nó dưới dạng /path/to/anyname3.shvà thêm nó vào danh sách các ứng dụng khởi động của bạn.

Hãy chắc chắn để giữ những con đường đó ẩn, để con trai của bạn không phát hiện ra.


không có cách nào để chúng ta có thể ngăn chặn nó bắt đầu thay vì giết nó sau mỗi lần nó bắt đầu?
Edward Torvalds

@edwardtorvalds - Tôi không biết gì, vì vậy tôi đã đăng giải pháp này.
Raphael

Tôi nêu lên câu trả lời của bạn, nhưng OP cần một phương pháp kỹ thuật ĐƠN GIẢN / DỄ DÀNG chứ không phải

Rất đơn giản và dễ dàng, tất cả các thao tác cần làm là sao chép và dán các tập lệnh lưu các tệp đó và thêm chúng vào các ứng dụng khởi động, sau đó quên nó đi.
Raphael

vòng lặp giết - bẩn nhất tôi có thể tưởng tượng.
Croll

0

Tại sao không sử dụng Tài khoản người dùng mới (thông qua Cài đặt hệ thống ). Đây là phương pháp duy nhất trên Linux cho "quyền".

  1. Người dùng mới "SteamUser" không nên ở trong sudoers (chỉ là một tài khoản giới hạn).
  2. Sau đó, tạo tài khoản thứ hai có tên "SuperAdmin" và tạo tài khoản sudoers (quyền truy cập root). Nhưng chỉ giữ mật khẩu của nó với bạn.
  3. Sau đó xóa tài khoản của con trai bạn khỏi sudoers. ( sudonhóm). Sau đó, tài khoản này sẽ không có quyền truy cập root, nó sẽ không thể cài đặt hoặc gỡ bỏ phần mềm, thay đổi cài đặt toàn hệ thống.
  4. Đăng nhập vào tài khoản "SuperAdmin" của bạn và thay đổi quyền sở hữu các tệp nhị phân hơithư mục trò chơi hơi để ngăn chúng chạy bởi bất kỳ ai ngoại trừ "SteamUser". Điều này bao gồm xóa quyền truy cập đọc + ghi + thực thi từ bất kỳ ai ngoại trừ "SteamUser"

Vài ghi chú ..

  • Không có khả năng để lại quyền truy cập root bằng tài khoản của con trai bạn, nếu không thì việc kiểm soát quyền được bỏ qua dễ dàng với chown / chmod.
  • Các đề xuất khác dựa trên các kịch bản nền chỉ là mớ hỗn độn không ổn định. Điều này có nghĩa là họ không hứa hẹn. Tuy nhiên, chúng có thể dễ dàng thiết lập.
  • Đường dẫn thư mục để chuyển sang "SteamAccount" là: /home/son/.steamvà tất nhiên là tệp nhị phân/usr/games/steam
  • Để chơi steam, cần có mật khẩu "SteamUser" (bạn sẽ cần phải đăng nhập bằng "SteamUser" và chúng chạy steam. Bạn có thể thử tìm các phương thức để hết hạn phiên sau một thời gian với việc khóa nó, để tránh chơi quá lâu. không chắc chắn nếu có các công cụ như vậy, nhưng về mặt kỹ thuật có thể đặt giới hạn thời gian, nhưng đối với các phiên, không phải chương trình.

À, tôi tin rằng tôi đã tìm thấy downvoter của mình ...
Jacob Vlijm

Điều này không thực sự an toàn, bởi vì những đứa trẻ đủ thông minh (có thể sử dụng google và làm theo hướng dẫn từng bước là đủ) có thể dễ dàng vượt qua các hạn chế của người dùng nếu chúng có quyền truy cập vật lý.
Chỉ huy Byte

@ByteCommander ít nhất nó đáng tin cậy hơn các tập lệnh nền. Nhưng vâng, bạn đúng. Giống như trên Windows. Giống như bất cứ nơi nào.
Croll

Không có hành vi phạm tội, nhưng làm thế nào là an toàn hơn?
Jacob Vlijm

Và bạn muốn chỉ định giới hạn thời gian cho đứa trẻ có thể sử dụng Steam trong bao lâu? Và những gì về các công cụ học tập được phép? Một tài khoản khác cho điều đó? Cá nhân tôi ghét các hệ thống có quá nhiều tài khoản cho mỗi người, vì chúng gây khó sử dụng vì không được chia sẻ cài đặt, v.v.
Chỉ huy Byte
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.