Cara memblokir aplikasi tertentu agar tidak dibuka di akun tertentu

13

Cara memblokir aplikasi tertentu agar tidak dibuka pada akun tertentu (mis: Hentikan akun John dari membuka Firefox atau Gimp). Diasumsikan ini untuk GUI dan bukan terminal dan hanya akan berlaku untuk pengguna tertentu, jadi misalnya pengguna X dapat membuka Gimp tetapi bukan Firefox, pengguna Z dapat membuka Pusat Perangkat Lunak tetapi bukan VirtualBox.

Apa cara yang baik dan mudah untuk melakukan ini untuk pengguna baru Ubuntu.

Luis Alvarado
sumber
Letakkan ACL pada file tertentu?
mdpc
Apa tingkat keamanan yang diperlukan? Apakah akan ada jawaban yang dapat digunakan di sini: askubuntu.com/questions/447043/…
Jacob Vlijm
Saat ini tingkat keamanan minimal. Pengguna hanya perlu ditolak akses (dengan cara apa pun) ke semua jenis aplikasi. Para pengguna saya kira memiliki pengetahuan yang rendah tentang Linux dan mungkin tidak akan pernah menggunakan terminal tetapi Anda bisa menambahkan informasi tentang itu.
Luis Alvarado
Saya tidak cukup tahu untuk benar-benar melakukannya, tetapi mungkin Anda dapat mengatur semua aplikasi penting agar dapat diakses hanya oleh grup. Lalu, Anda bisa menambahkan pengguna tingkat lanjut ke grup itu untuk akses penuh. Untuk pengguna terbatas, Anda bisa menggunakan sudo (bukan untuk me-root) bersama dengan entri yang sesuai di sudoers untuk memberi mereka akses yang dilindungi kata sandi ke perintah lain berdasarkan kasus per kasus.
Joe
Inilah yang saya bayangkan dimaksudkan AppArmor, tapi saya pikir itu tidak memenuhi syarat sebagai cara "mudah".
muru

Jawaban:

15

A. Opsi konfigurasi

Jika blok dimaksudkan untuk memblokir pengguna yang tidak berpengalaman menggunakan aplikasi tertentu, mengedit (salinan lokal) file desktop aplikasi (seperti dijelaskan dalam [1]) mungkin merupakan cara tercepat dan termudah.
Beberapa hal tambahan dapat dilakukan untuk membuat penghalang tambahan dan / atau untuk mencegah fakta bahwa pengguna mengetahui terlalu mudah apa yang telah kami lakukan untuk memblokir aplikasi ( [2]dan [3]).

Pengaturan tidak cocok untuk situasi tanpa pengawasan dengan pengguna berpengalaman. Dalam situasi "rumah" dengan rata-rata pengguna akan cukup dalam banyak kasus.

1.Contoh untuk memblokir gedit dengan mengedit (versi lokal) file .desktop

  • Salin file desktop aplikasi /usr/share/applicationske ~/.local/share/applications:

    cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
    
  • Edit file: buka dengan gedit (selagi masih bisa :)) dengan menyeretnya ke jendela gedit yang terbuka.

    • ganti salurannya

      Exec=gedit %U
      

      oleh:

      Exec=zenity --info --text 'You are not allowed to use this application'
      
    • hapus (mungkin) jalan pintas, untuk mencegah memulai aplikasi dari salah satu jalan pintas:

      hapus baris (untuk contoh gedit):

      Actions=Window;Document;
      

      dan bagian seperti:

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

    Sejak saat itu (setelah keluar / masuk) pengguna akan melihat pesan ini jika ia mencoba membuka gedit dari Dash, atau mencoba membuka file yang ditautkan ke aplikasi:

    masukkan deskripsi gambar di sini

    • Menyembunyikan aplikasi dari Dash (ukuran opsional)

      Setelah kami membuat perubahan di atas, setelah gedit.desktopfile masih terbuka, kami dapat menambahkan baris tambahan:

      NoDisplay=true
      

      Dengan menambahkan baris ini, geditbahkan tidak akan muncul di Dash.

    Batalkan

    Untuk membatalkan, cukup hapus .desktopfile lokal dari~/.local/share/applications

2.Membuatnya sedikit lebih sulit untuk diketahui

Sementara, setelah mengedit .desktopfile, aplikasi tidak akan muncul di Dash lagi, pencarian Dash masih akan menampilkan gedit.desktopfile kami yang baru dibuat , yang mungkin secara tidak sengaja memberi petunjuk bagaimana cara keluar dari blok aplikasi.

masukkan deskripsi gambar di sini

Untuk menghindarinya, kita harus mengecualikan direktori ~/.local/share/applicationsdari pencarian Dash dan menghapus histori pencarian.
Buka Pengaturan Sistem> "Keamanan & Privasi"> "File & Aplikasi" (tab). Tambahkan direktori ~/.local/share/applicationske daftar untuk dikecualikan dari pencarian.

masukkan deskripsi gambar di sini

3. (Tidak) menggunakan terminal / baris perintah

Mengarahkan geditperintah(1)

Mengedit .desktopfile mencegah menggunakan aplikasi dari Dash, tetapi jika pengguna tahu AltF2kombinasi dan perintah untuk menjalankan aplikasi, ia masih dapat memulai aplikasi, seperti halnya dengan terminal. Ukuran ekstra yang bagus dan mudah diatur adalah membuat (jika belum ada) direktori ~/bindan membuat skrip kecil di direktori:

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

Jadikan itu dapat dieksekusi dan beri nama setelah aplikasi; geditpada kasus ini.

Karena ~/binsudah dalam PATH, menjalankan perintah akan memanggil skrip alih-alih aplikasi "nyata" gedit. Akibatnya, pesan yang sama You are not allowed to use this applicationakan muncul

Mengarahkan geditperintah(2)

Cara lain (dengan efek lebih terbatas, lihat catatan) untuk mengarahkan ulang perintah aplikasi adalah menambahkan alias ke .bashrcfile:

gedit ~/.bashrc

tambahkan baris (contoh gedit):

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

Catatan : ini hanya untuk digunakan sebagai tindakan tambahan, karena hanya mencegah aplikasi dipanggil dari terminal secara langsung. Mengklik dua kali pada file (misalnya) .txtmasih akan membuka aplikasi.

Jadikan penggunaan terminal sulit atau tidak mungkin sama sekali

Untuk mencegah penggunaan terminal, Anda juga dapat melakukan trik yang sama pada gnome-terminal.desktopfile - seperti di [1], dan / atau mengubah kombinasi tombol pintas default untuk menjalankan terminal (Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pemula" )


4. Alat kecil untuk secara otomatis membuat (atau membatalkan) versi .desktopfile yang diedit (seperti pada 1.)

Jika Anda menjalankan skrip di bawah ini dengan argumen blockatau unblock(Anda harus menjalankannya dengan salah satu), Anda akan disajikan daftar dengan file desktop (global), yang mewakili aplikasi yang diinstal:

masukkan deskripsi gambar di sini

Pilih satu, dan aplikasi Anda diblokir atau diblokir, tergantung pada argumen Anda menjalankannya.

Catatan

Anda mungkin harus keluar / masuk untuk membuatnya berfungsi.

Naskah

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

Salin skrip ke file kosong, simpan sebagai block_apps.pydan jalankan dengan:

python3 /path/to/block_apps.py block

atau

python3 /path/to/block_apps.py unblock

B. Opsi skrip

Memblokir aplikasi tertentu juga bisa dilakukan dengan menjalankan skrip di latar belakang. Script harus mengambil tindakan tertentu jika salah satu aplikasi "terlarang" dijalankan.

1. Skrip untuk memanipulasi layar saat aplikasi terlarang digunakan.

Skrip di bawah ini menawarkan cara yang fleksibel untuk memblokir aplikasi yang ditentukan pengguna. Ini berjalan dengan perintah sederhana, dengan aplikasi terlarang sebagai argumen, misalnya (dengan asumsi Anda membuat skrip dapat dieksekusi):

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

Keuntungan memblokir aplikasi seperti ini adalah fleksibel; bahkan dalam satu akun, pengaturan yang berbeda dapat digunakan, cukup dengan menggunakan aplikasi lain sebagai argumen.

Apa yang dilakukannya

Dengan mengomentari salah satu kalimat:

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

atau

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

Naskahnya juga:

hitam layar ( action = "xrandr --output "+screen+" --brightness 0"):

masukkan deskripsi gambar di sini

atau membalikkannya ( action = "xrandr --output "+screen+" --rotate inverted"):
( siapa bilang Unity tidak mengizinkan peluncur di sebelah kanan? )

masukkan deskripsi gambar di sini

Naskah

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

Cara Penggunaan

  • Salin skrip ke file kosong, simpan sebagai block_apps.py, buat itu dapat dieksekusi
  • jalankan dengan perintah:

    /path/to/block_apps.py <application_1> <application_2> <application_3> etc...
    
  • Penting
    Untuk membunuh para block_apps.pynaskah dan mengembalikan pengaturan "normal", menggunakan script di bawah ini (membuatnya tersedia di bawah kombinasi tombol shortcut):

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

Seperti biasa dengan skrip, salin ke file kosong, simpan sebagai kill_blockapps.py, buat itu dapat dieksekusi dan jalankan dengan:

/path/to/kill_blockapps.py

Anda mungkin ingin memilikinya di bawah tombol pintas: Pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah seperti di atas.

Yakub Vlijm
sumber
Kerja bagus, Yakub. Jawaban yang sangat bagus. Terus tingkatkan itu.
Luis Alvarado
@EricCarvalho Terima kasih atas hasil edit! merindukan yang itu.
Jacob Vlijm