Cách chặn các ứng dụng cụ thể mở trong các tài khoản cụ thể


13

Cách chặn một số ứng dụng nhất định mở trên một số tài khoản nhất định (ví dụ: Dừng tài khoản John mở Firefox hoặc Gimp). Giả sử đây là dành cho GUI chứ không phải thiết bị đầu cuối và sẽ chỉ áp dụng cho người dùng cụ thể, vì vậy, ví dụ người dùng X có thể mở Gimp nhưng không phải Firefox, người dùng Z có thể mở Trung tâm phần mềm nhưng không phải VirtualBox.

Cách tốt và dễ dàng là có để làm điều này cho một người dùng mới của Ubuntu.


Đặt ACL vào các tập tin cụ thể?
mdpc

Mức độ bảo mật cần thiết là gì? Sẽ có câu trả lời có thể sử dụng ở đây: Askubfox.com/questions/447043/ Khăn
Jacob Vlijm

Ngay bây giờ mức độ bảo mật là tối thiểu. Người dùng chỉ cần bị từ chối truy cập (bằng mọi cách) đối với bất kỳ loại ứng dụng nào. Những người dùng tôi đoán có kiến ​​thức thấp về Linux và có thể sẽ không bao giờ sử dụng thiết bị đầu cuối nhưng bạn có thể thêm bất kỳ thông tin nào về nó.
Luis Alvarado

Tôi không biết đủ để thực sự làm điều đó, nhưng có lẽ bạn có thể thiết lập tất cả các ứng dụng quan trọng chỉ có thể truy cập được bởi một nhóm. Sau đó, bạn có thể thêm người dùng nâng cao vào nhóm đó để truy cập đầy đủ. Đối với người dùng bị hạn chế, bạn có thể sử dụng sudo (không phải root) cùng với các mục thích hợp trong sudoers để cung cấp cho họ quyền truy cập được bảo vệ bằng mật khẩu cho các lệnh khác trong từng trường hợp.
Joe

Đây là những gì tôi tưởng tượng AppArmor có nghĩa là để làm, nhưng tôi không nghĩ rằng nó đủ điều kiện là một cách "dễ dàng".
muru

Câu trả lời:


15

A. Tùy chọn cấu hình

Nếu khối này có nghĩa là chặn người dùng không có kinh nghiệm sử dụng một số ứng dụng nhất định, chỉnh sửa (bản sao cục bộ) tệp máy tính để bàn của ứng dụng (như được mô tả trong [1]) có lẽ là cách nhanh nhất và dễ dàng nhất.
Một số điều bổ sung có thể được thực hiện để tạo thêm một rào cản và / hoặc để ngăn chặn việc người dùng phát hiện quá dễ dàng những gì chúng tôi đã làm để chặn ứng dụng ( [2][3]).

Việc thiết lập không phù hợp với các tình huống không giám sát với người dùng có kinh nghiệm. Trong các tình huống "nhà" với người dùng trung bình, nó sẽ đủ trong nhiều trường hợp.

1.Ví dụ để chặn gedit bằng cách chỉnh sửa (phiên bản cục bộ) của tệp .desktop

  • Sao chép tập tin máy tính để bàn của ứng dụng trong /usr/share/applicationsđể ~/.local/share/applications:

    cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
    
  • Chỉnh sửa tệp: mở tệp bằng gedit (trong khi bạn vẫn có thể :)) bằng cách kéo tệp qua cửa sổ mở.

    • thay thế dòng

      Exec=gedit %U
      

      bởi:

      Exec=zenity --info --text 'You are not allowed to use this application'
      
    • xóa các phím tắt (có thể) để ngăn khởi động ứng dụng từ một trong các phím tắt:

      xóa dòng (ví dụ gedit):

      Actions=Window;Document;
      

      và các phần như:

      [Desktop Action Window]
      Name=Open a New Window
      Exec=gedit --new-window
      OnlyShowIn=Unity;
      

    Từ đó trở đi (sau khi đăng xuất / đăng nhập), người dùng sẽ thấy thông báo này nếu họ cố mở gedit từ Dash hoặc cố gắng mở tệp được liên kết với ứng dụng:

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

    • Ẩn ứng dụng khỏi Dash (biện pháp tùy chọn)

      Sau khi chúng tôi thực hiện các thay đổi ở trên, khi gedit.desktoptệp vẫn mở, chúng tôi có thể thêm một dòng bổ sung:

      NoDisplay=true
      

      Bằng cách thêm dòng này, geditthậm chí sẽ không hiển thị trong Dash.

    Hoàn tác

    Để hoàn tác, chỉ cần xóa .desktoptệp cục bộ khỏi~/.local/share/applications

2. Làm cho nó khó khăn hơn một chút để tìm hiểu

Mặc dù, sau khi chỉnh sửa .desktoptệp, ứng dụng sẽ không hiển thị trong Dash nữa, tìm kiếm Dash vẫn sẽ hiển thị gedit.desktoptệp mới được tạo của chúng tôi , điều này có thể vô tình đưa ra gợi ý về cách thoát khỏi khối ứng dụng.

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

Để tránh điều đó, chúng ta nên loại trừ thư mục ~/.local/share/applicationskhỏi tìm kiếm Dash và xóa lịch sử tìm kiếm.
Mở Cài đặt hệ thống> "Bảo mật & quyền riêng tư"> "Tệp & ứng dụng" (tab). Thêm thư ~/.local/share/applicationsmục vào danh sách để loại trừ khỏi tìm kiếm.

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

3. (Không) sử dụng thiết bị đầu cuối / dòng lệnh

Chuyển hướng geditlệnh(1)

Chỉnh sửa .desktoptệp sẽ ngăn việc sử dụng ứng dụng từ Dash, nhưng nếu người dùng biết AltF2kết hợp và lệnh để chạy ứng dụng, họ vẫn có thể khởi động ứng dụng, giống như với thiết bị đầu cuối. Một cách dễ dàng và dễ dàng để thiết lập biện pháp bổ sung là tạo (nếu nó chưa tồn tại) thư mục ~/binvà tạo một tập lệnh nhỏ trong thư mục:

#!/bin/bash
zenity --info --text 'You are not allowed to use this application'

Làm cho nó thực thi và đặt tên theo ứng dụng; gedittrong trường hợp này.

Kể từ khi ~/binvào PATH, chạy lệnh sẽ gọi tập lệnh thay vì geditứng dụng "thực" . Kết quả là, cùng một You are not allowed to use this applicationđiều sẽ xuất hiện

Chuyển hướng geditlệnh(2)

Một cách khác (với hiệu ứng hạn chế hơn, xem ghi chú) về việc chuyển hướng lệnh của ứng dụng là thêm bí danh vào .bashrctệp:

gedit ~/.bashrc

thêm dòng (ví dụ gedit):

alias gedit='zenity --info --text "You are not allowed to use this application"'

Lưu ý : điều này chỉ được sử dụng như một biện pháp bổ sung, vì nó chỉ ngăn ứng dụng được gọi trực tiếp từ thiết bị đầu cuối. .txtTuy nhiên, nhấp đúp vào tệp (ví dụ) sẽ vẫn mở ứng dụng.

Làm cho việc sử dụng thiết bị đầu cuối khó khăn hoặc không thể

Để ngăn việc sử dụng thiết bị đầu cuối, bạn cũng có thể thực hiện thủ thuật tương tự trên gnome-terminal.desktoptệp - như trong [1]và / hoặc thay đổi tổ hợp phím tắt mặc định để chạy thiết bị đầu cuối (Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Khởi động" )


4. Một công cụ nhỏ để tự động tạo (hoặc hoàn tác) phiên bản đã chỉnh sửa của .desktoptệp (như trong 1.)

Nếu bạn chạy tập lệnh bên dưới với đối số blockhoặc unblock(bạn phải chạy tập lệnh này với một trong hai), bạn sẽ được cung cấp một danh sách với các tệp máy tính để bàn (toàn cầu), đại diện cho các ứng dụng đã cài đặt của bạn:

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

Chọn một và ứng dụng của bạn bị chặn hoặc bỏ chặn, tùy thuộc vào đối số bạn chạy với nó.

Ghi chú

Bạn có thể phải đăng xuất / đăng nhập để làm cho nó hoạt động.

Kịch bản

#!/usr/bin/env python3

import os
import shutil
import sys

mode = sys.argv[1]

home = os.environ["HOME"]
global_dir = "/usr/share/applications/"

files = [file for file in os.listdir(global_dir) if file.endswith(".desktop")]
relevant = []
for i in range(len(files)):
    file = files[i]
    with open(global_dir+file) as src:
        text = src.read()
    if not "NoDisplay=true" in text:
        relevant.append((file))
for i in range (len(relevant)):
    print(str(i+1)+".", relevant[i])

choice = int(input("\nplease enter the number of the corresponding .desktop file: "))
filename = relevant[choice-1]

local_file = home+"/"+".local/share/applications/"+filename
global_file = global_dir+filename

def block_application(filename):
    if not os.path.exists(local_file):
        shutil.copyfile(global_file, local_file)
    with open(local_file) as src:
        lines = src.readlines()
    shortcuts_section = [i for i in range(len(lines)) if lines[i].startswith("Actions=")]
    if len(shortcuts_section) != 0:
        lines = lines[:shortcuts_section[0]]
    command = [i for i in range(len(lines)) if lines[i].startswith("Exec=")]
    if len(command) != 0:
        lines[command[0]] = 'Exec=zenity --info --text "You are not allowed to use this application"\n'
    with open(local_file, "wt") as out:
        for line in lines:
            out.write(line)

if mode == "block":
    block_application(filename)
elif mode == "unblock":
    os.remove(local_file)

Sao chép tập lệnh vào một tệp trống, lưu nó dưới dạng block_apps.pyvà chạy nó bằng cách:

python3 /path/to/block_apps.py block

hoặc là

python3 /path/to/block_apps.py unblock

B. Tùy chọn kịch bản

Việc chặn một số ứng dụng cũng có thể được thực hiện bằng cách chạy tập lệnh ở chế độ nền. Kịch bản sẽ phải thực hiện một số hành động nhất định nếu một trong những ứng dụng "bị cấm" được chạy.

1. Tập lệnh để thao tác trên màn hình khi các ứng dụng bị cấm được sử dụng.

Kịch bản dưới đây cung cấp một cách linh hoạt để chặn các ứng dụng do người dùng xác định. Nó chạy với một lệnh đơn giản, với các ứng dụng bị cấm làm đối số, ví dụ (giả sử bạn đã tạo tập lệnh thực thi):

    /path/to/block_apps.py firefox gedit gnome-terminal

Ưu điểm của việc chặn các ứng dụng như thế này là nó linh hoạt; ngay cả trong một tài khoản, các cài đặt khác nhau có thể được sử dụng, chỉ bằng cách sử dụng các ứng dụng khác làm đối số.

Những gì nó làm

Bằng cách bỏ bình luận một trong những dòng:

# action = "xrandr --output "+screen+" --brightness 0"

hoặc là

# action = "xrandr --output "+screen+" --rotate inverted"

Kịch bản:

làm đen màn hình ( action = "xrandr --output "+screen+" --brightness 0"):

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

hoặc lật ngược nó lại ( action = "xrandr --output "+screen+" --rotate inverted"):
( ai nói Unity không cho phép đặt launcher ở bên phải? )

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

Kịch bản

#!/usr/bin/env python3
import subprocess
import getpass
import sys
import time

applications = []
i = 1

while True:
    try:
        applications.append(sys.argv[i])
        i = i+1
    except IndexError:
        break

cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]

#-- uncomment (only) one of the options below
# action = "xrandr --output "+screen+" --brightness 0"
action = "xrandr --output "+screen+" --rotate inverted"
#--

while True:
    cmd2 = "ps -u "+getpass.getuser()
    applist = subprocess.check_output(["/bin/bash", "-c", cmd2]).decode("utf-8")
    for application in applications:
        if application in applist:
            subprocess.Popen(["/bin/bash", "-c", action])
    time.sleep(5)

Cách sử dụng

  • Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng block_apps.py, làm cho nó có thể thực thi được
  • chạy nó bằng lệnh:

    /path/to/block_apps.py <application_1> <application_2> <application_3> etc...
    
  • Quan trọng
    Để giết các block_apps.pykịch bản và khôi phục "bình thường" Cài đặt, sử dụng kịch bản dưới đây (làm cho nó có sẵn dưới một tổ hợp phím tắt):

#!/usr/bin/env python3
import subprocess

cmd = "ps -ef | grep block_apps.py"
run = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("\n")
match = [line for line in run if "block_apps.py" in line]
command = "kill "+match[0].split()[1]
subprocess.Popen(["/bin/bash", "-c", command])

cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]

restore_1 = "xrandr --output "+screen+" --brightness 1"
restore_2 = "xrandr --output "+screen+" --rotate normal"

for item in [restore_1, restore_2]:
    subprocess.Popen(["/bin/bash", "-c", item])

Như mọi khi với các tập lệnh, sao chép nó vào một tập tin trống, lưu nó dưới dạng kill_blockapps.py, làm cho nó có thể thực thi được và chạy nó bằng cách:

/path/to/kill_blockapps.py

Bạn có thể sẽ muốn có cái này dưới phím tắt: Chọn: Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh". Nhấp vào "+" và thêm lệnh như trên.


Công việc tuyệt vời Jacob. Câu trả lời tuyệt vời. Tiếp tục cải thiện nó.
Luis Alvarado

@EricCarvalho Cảm ơn bạn đã chỉnh sửa! bỏ lỡ cái đó
Jacob Vlijm
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.