Pertanyaan Cara memblokir aplikasi tertentu agar tidak dibuka di akun tertentu


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

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


13
2017-11-12 02:47


asal


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


Jawaban:


A. Opsi konfigurasi

Jika blok tersebut dimaksudkan untuk memblokir pengguna yang tidak berpengalaman dari menggunakan aplikasi tertentu, mengedit (salinan lokal) file desktop aplikasi (seperti yang dijelaskan di [1]) Mungkin adalah 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 ini tidak sesuai untuk situasi tanpa pengawasan dengan pengguna berpengalaman. Dalam situasi "rumah" dengan pengguna rata-rata, itu akan cukup dalam banyak kasus.

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

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

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

    • ganti garisnya

      Exec=gedit %U
      

      oleh:

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

      hapus garis (untuk contoh gedit):

      Actions=Window;Document;
      

      dan bagian (s) seperti:

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

    Sejak saat itu (setelah logout / log in) pengguna akan melihat pesan ini jika dia mencoba membuka gedit dari Dash, atau mencoba membuka file yang terhubung ke aplikasi:

    enter image description here

    • Menyembunyikan aplikasi dari Dash (ukuran opsional)

      Setelah kami melakukan perubahan di atas, memiliki gedit.desktop file masih terbuka, kita dapat menambahkan baris tambahan:

      NoDisplay=true
      

      Dengan menambahkan baris ini, gedit bahkan tidak akan muncul di Dash.

    Membuka

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

2.Membuatnya sedikit lebih sulit untuk mencari tahu

Sementara, setelah mengedit .desktop file, aplikasi tidak akan muncul di Dash lagi, Dash pencarian akan tetap menampilkan yang baru kita buat gedit.desktop file, yang mungkin secara tidak sengaja memberikan petunjuk cara menghindar dari blok aplikasi.

enter image description here

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

enter image description here

3. (Tidak) menggunakan terminal / baris perintah

Mengarahkan ulang gedit perintah (1)

Mengedit .desktop file mencegah menggunakan aplikasi dari Dash, tetapi jika pengguna mengetahui AltF2kombinasi dan perintah untuk menjalankan aplikasi, dia akan tetap dapat memulai aplikasi, seperti halnya dengan terminal. Yang bagus dan mudah untuk mengatur ukuran ekstra adalah untuk membuat (jika belum ada) direktori ~/bindan buat skrip kecil di direktori:

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

Buat itu dapat dieksekusi dan beri nama setelah aplikasi; gedit pada kasus ini.

Sejak ~/bin dalam PATH, menjalankan perintah akan memanggil skrip bukan "nyata" gedit aplikasi. Hasilnya, sama saja You are not allowed to use this application -message akan muncul

Mengarahkan ulang gedit perintah (2)

Cara lain (dengan efek yang lebih terbatas, lihat catatan) untuk mengalihkan perintah aplikasi adalah dengan menambahkan alias ke .bashrc mengajukan:

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 ukuran tambahan, karena hanya mencegah aplikasi dipanggil dari terminal secara langsung. Klik ganda pada (mis.) .txt Namun file akan tetap membuka aplikasi.

Buatlah penggunaan terminal menjadi sulit atau tidak mungkin sama sekali

Untuk mencegah penggunaan terminal, Anda juga bisa melakukan trik yang sama pada gnome-terminal.desktop - file 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 yang diedit dari .desktop file (seperti dalam 1.)

Jika Anda menjalankan skrip di bawah ini dengan salah satu argumen block atau unblock (kamu harus jalankan dengan salah satunya), Anda akan disajikan daftar dengan file desktop (global), mewakili aplikasi yang Anda instal:

enter image description here

Pilih satu, dan aplikasi Anda diblokir atau tidak diblokir, tergantung pada argumen yang Anda jalankan.

Catatan

Anda mungkin harus logout / 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 dalam file kosong, simpan sebagai block_apps.py dan jalankan dengan:

python3 /path/to/block_apps.py block

atau

python3 /path/to/block_apps.py unblock

B. Opsi skrip (s)

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

1. Script untuk memanipulasi layar ketika 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, mis. (dengan asumsi Anda membuat skrip yang 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 tidak mengomentari salah satu baris:

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

atau

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

Skripnya:

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

enter image description here

atau mengubahnya terbalik (action = "xrandr --output "+screen+" --rotate inverted"):
(siapa bilang Unity tidak mengizinkan untuk menempatkan peluncur di kanan?)

enter image description here

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)

Bagaimana cara menggunakan

  • Salin skrip ke dalam file kosong, simpan sebagai block_apps.py, membuatnya bisa dieksekusi
  • jalankan dengan perintah:

    /path/to/block_apps.py <application_1> <application_2> <application_3> etc...
    
  • Penting
    Untuk membunuh itu block_apps.py skrip dan pulihkan pengaturan "normal", gunakan skrip di bawah ini (buat tersedia di bawah kombinasi tombol pintas):

#!/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, membuatnya dapat dieksekusi dan menjalankannya dengan:

/path/to/kill_blockapps.py

Anda mungkin ingin memiliki yang ini di bawah tombol pintas: Pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Kustom". Klik "+" dan tambahkan perintah seperti di atas.


15
2017-11-12 19:55



Kerja hebat, Yakub. Jawaban yang bagus. Terus perbaiki. - Luis Alvarado♦
@LuisAlvarado Terima kasih! dan saya pasti akan :) - Jacob Vlijm
@EricCarvalho Terima kasih atas pengeditannya! merindukan itu. - Jacob Vlijm