Belirli uygulamaların belirli hesaplarda açılmasını engelleme


13

Belirli uygulamaların belirli hesaplarda açılmasını engelleme (örneğin: John hesabının Firefox veya Gimp'i açmasını durdurma). Bunun GUI için olduğu ve terminal için olmadığı ve sadece belirli kullanıcılar için geçerli olacağı varsayılmaktadır, bu nedenle örneğin X kullanıcısı Gimp'i açabiliyor, ancak Firefox'u açamıyor, Z kullanıcısı Yazılım Merkezi'ni açabiliyor ancak VirtualBox'ı açamıyor.

Yeni bir Ubuntu kullanıcısı için bunu yapmanın iyi ve kolay yolu var.


ACL'ler belirli dosyalara yerleştirilsin mi?
mdpc

Gerekli güvenlik seviyesi nedir? Burada kullanılabilir cevaplar olur mu: askubuntu.com/questions/447043/…
Jacob Vlijm

Şu anda güvenlik seviyesi asgaridir. Kullanıcıların yalnızca (herhangi bir yolla) herhangi bir uygulamaya erişiminin engellenmesi gerekir. Tahmin edebileceğim kullanıcılar Linux hakkında çok az bilgiye sahipler ve muhtemelen terminali asla kullanmayacaklar, ancak bu konuda herhangi bir bilgi ekleyebilirsiniz.
Luis Alvarado

Bunu yapmak için yeterince bilgim yok, ama belki de tüm kritik uygulamaları sadece bir grup tarafından erişilebilir olacak şekilde ayarlayabilirsiniz. Ardından, tam erişim için bu gruba gelişmiş kullanıcılar ekleyebilirsiniz. Kısıtlı kullanıcılar için sudo (root'a değil) ile sudoer'lardaki uygun girişlerin yanı sıra, duruma göre diğer komutlara parola korumalı erişim sağlamak için kullanabilirsiniz.
Joe

AppArmor'un yapması gerektiğini düşündüğüm şey bu, ama bunun "kolay" bir yol olarak nitelendirildiğini düşünmüyorum.
muru

Yanıtlar:


15

A. Konfigürasyon seçenekleri

Blok, çok deneyimli olmayan kullanıcıların belirli uygulamaları kullanmasını engellemek istiyorsa, uygulamanın masaüstü dosyasını (açıklandığı gibi [1]) düzenlemek (yerel bir kopyası ) muhtemelen en hızlı ve en kolay yoldur.
Ek bir engel oluşturmak ve / veya kullanıcının uygulamayı ( [2]ve [3]) engellemek için ne yaptığımızı çok kolay öğrenmesini önlemek için bazı ek şeyler yapılabilir .

Kurulum, deneyimli kullanıcılarla katılımsız durumlar için uygun değildir. Ortalama kullanıcılı "ev" durumlarında, birçok durumda yeterli olacaktır.

1. .desktop dosyasını düzenleyerek (yerel sürümü) gedit engelleme örneği

  • Uygulamanın masaüstü dosyasını kopyalayın /usr/share/applicationsiçin ~/.local/share/applications:

    cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
    
  • Dosyayı düzenleyin: açık bir gedit penceresinin üzerine sürükleyerek gedit ile açın (hala yapabilirsiniz :)).

    • hattı değiştir

      Exec=gedit %U
      

      tarafından:

      Exec=zenity --info --text 'You are not allowed to use this application'
      
    • Uygulamanın kısayollardan birinden başlatılmasını önlemek için (olası) kısayolları kaldırın:

      çizgiyi kaldırın (gedit örneği için):

      Actions=Window;Document;
      

      ve bölüm (ler) gibi:

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

    O andan itibaren (oturumu kapattıktan / oturum açtıktan sonra) kullanıcı Dash'ten gedit'i açmaya çalışır veya uygulamaya bağlı bir dosyayı açmaya çalışırsa bu mesajı görür:

    resim açıklamasını buraya girin

    • Uygulamayı Dash'ten gizleme (isteğe bağlı hesaplama)

      Yukarıdaki değişiklikleri yaptıktan sonra gedit.desktopdosyayı hala açık tutarak ek bir satır ekleyebiliriz:

      NoDisplay=true
      

      Bu satırı eklediğinizde gedit, Dash'te bile görünmez.

    Geri alma

    Geri almak için yerel .desktopdosyayı~/.local/share/applications

2. bulmak biraz daha zor hale getirmek

.desktopDosyayı düzenledikten sonra , uygulama Dash'te artık görünmezken, Dash arama yeni oluşturulan gedit.desktopdosyamızı göstermeye devam eder , bu da istemeden uygulama bloğundan nasıl kaçacağına dair bir ipucu verebilir.

resim açıklamasını buraya girin

Bundan kaçınmak için dizini ~/.local/share/applicationsDash aramasından hariç tutmalı ve arama geçmişini temizlemeliyiz.
Sistem Ayarları> "Güvenlik ve Gizlilik"> "Dosyalar ve Uygulamalar" ı açın (sekme). Dizini ~/.local/share/applicationsarama dışında bırakmak için listeye ekleyin .

resim açıklamasını buraya girin

3. (Not) terminal / komut satırını kullanma

geditKomutu yeniden yönlendirme(1)

.desktopDosyayı düzenlemek uygulamayı Dash'ten kullanmayı engeller, ancak kullanıcı AltF2kombinasyonu ve uygulamayı çalıştırma komutunu biliyorsa , tıpkı terminalde olduğu gibi uygulamayı başlatabilir. Güzel ve kolay bir ekstra önlem ayarlamak (henüz yoksa) dizini ~/binoluşturmak ve dizinde küçük bir komut dosyası oluşturmaktır:

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

Yürütülebilir hale getirin ve uygulamadan sonra adlandırın; geditbu durumda.

İçinde ~/binolduğundan PATH, komutu çalıştırmak "gerçek" gedituygulama yerine komut dosyasını çağırır . Sonuç olarak, aynı You are not allowed to use this applicationmesaj

geditKomutu yeniden yönlendirme(2)

Uygulamanın komutunu yeniden yönlendirmenin başka bir yolu da (notu daha fazladır) .bashrcdosyaya bir takma ad eklemektir :

gedit ~/.bashrc

satırı ekleyin (gedit örneği):

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

Not : Bu sadece ekstra bir önlem olarak kullanılmalıdır, çünkü sadece uygulamanın doğrudan terminalden çağrılmasını önler. .txtAncak (örn.) Bir dosyaya çift ​​tıklamak yine de uygulamayı açacaktır.

Terminal kullanımını zor veya imkansız hale getirin

Terminalin kullanımını önlemek için, gnome-terminal.desktop- dosyasında olduğu gibi aynı numarayı yapabilir [1]ve / veya terminali çalıştırmak için varsayılan kısayol tuşu bileşimini değiştirebilirsiniz (Sistem Ayarları> "Klavye"> "Kısayollar"> "Başlangıçlar" )


4. .desktopDosyanın düzenlenmiş bir sürümünü otomatik olarak oluşturmak (veya geri almak) için küçük bir araç (1.'de olduğu gibi)

Aşağıdaki betiği bağımsız değişkenle blockveya unblock( ikisinden biriyle çalıştırmanız gerekir) çalıştırırsanız, yüklü uygulamalarınızı temsil eden (genel) masaüstü dosyaları içeren bir liste sunulur:

resim açıklamasını buraya girin

Birini seçtiğinizde, uyguladığınız bağımsız değişkene bağlı olarak uygulamanız engellenir veya engellenmez.

Not

Çalışması için oturumu kapatmanız / oturum açmanız gerekebilir.

Senaryo

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

Komut dosyasını boş bir dosyaya kopyalayın, farklı kaydedin block_apps.pyve şunlardan birini kullanarak çalıştırın:

python3 /path/to/block_apps.py block

veya

python3 /path/to/block_apps.py unblock

B. Komut dosyasıyla yazılmış seçenekler

Belirli uygulamaları engelleme, arka planda bir komut dosyası çalıştırılarak da yapılabilir. "Yasak" uygulamalardan biri çalıştırılırsa, komut dosyasının belirli eylemleri gerçekleştirmesi gerekir.

1. Yasaklanmış uygulamalar kullanıldığında ekranı değiştirmek için kullanılan komut dosyası.

Aşağıdaki komut dosyası, kullanıcı tanımlı uygulamaları engellemek için esnek bir yol sunar. Basit bir komutla çalışır, yasak uygulamalar argüman olarak, örneğin (betiği çalıştırılabilir yaptığınızı varsayarak):

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

Bunun gibi uygulamaları engellemenin avantajı esnek olmasıdır; tek bir hesapta bile, diğer ayarlar bağımsız değişken olarak kullanılarak farklı ayarlar kullanılabilir.

Bu ne yapar

Satırlardan birinin yorumunu kaldırarak:

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

veya

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

Senaryo ya:

ekranı karartır ( action = "xrandr --output "+screen+" --brightness 0"):

resim açıklamasını buraya girin

veya baş aşağı çevirir ( action = "xrandr --output "+screen+" --rotate inverted"):
( Unity'nin fırlatıcıyı sağa koymasına izin vermediğini kim söyledi? )

resim açıklamasını buraya girin

Senaryo

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

Nasıl kullanılır

  • Komut dosyasını boş bir dosyaya kopyalayın, farklı kaydedin block_apps.py, yürütülebilir yapın
  • komut ile çalıştırın:

    /path/to/block_apps.py <application_1> <application_2> <application_3> etc...
    
  • Önemli
    To öldürmekblock_apps.py (kısayol tuş kombinasyonunu altında kullanılabilir hale) aşağıdaki komut dosyasını kullanmak, komut ve "normal" ayarlarını geri:

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

Her zaman olduğu gibi komut dosyalarında boş bir dosyaya kopyalayın, farklı kaydedin kill_blockapps.py, yürütülebilir yapın ve şu şekilde çalıştırın:

/path/to/kill_blockapps.py

Muhtemelen bunu bir kısayol tuşu altında kullanmak isteyeceksiniz: Seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve komutu yukarıdaki gibi ekleyin.


Harika iş Jacob. Mükemmel cevap. Geliştirmeye devam edin.
Luis Alvarado

@EricCarvalho Düzenleme için teşekkürler! Bunu özledim.
Jacob Vlijm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.