विशिष्ट खातों को विशिष्ट खातों में खोलने से कैसे रोकें


13

कुछ अनुप्रयोगों को खोलने से कुछ अनुप्रयोगों को कैसे अवरुद्ध करें (जैसे: फ़ायरफ़ॉक्स या जिम्प खोलने से जॉन को रोकें)। यह माना जाता है कि यह जीयूआई के लिए है न कि टर्मिनल और केवल विशिष्ट उपयोगकर्ताओं के लिए लागू होगा, इसलिए उदाहरण के लिए उपयोगकर्ता एक्स जिम्प खोल सकता है लेकिन फ़ायरफ़ॉक्स नहीं, उपयोगकर्ता जेड सॉफ्टवेयर सेंटर खोल सकता है लेकिन वर्चुअलबॉक्स नहीं।

उबंटू के नए उपयोगकर्ता के लिए ऐसा करने के लिए क्या अच्छा और आसान तरीका है।


विशिष्ट फ़ाइलों पर ACLs लगाएं?
mdpc

सुरक्षा का आवश्यक स्तर क्या है? क्या यहाँ प्रयोग करने योग्य उत्तर होंगे: askubuntu.com/questions/447043/…
जैकब व्लिजम

अभी सुरक्षा स्तर न्यूनतम है। उपयोगकर्ताओं को केवल किसी भी प्रकार के ऐप तक पहुंच (किसी भी तरह से) से वंचित रहने की आवश्यकता होगी। जिन उपयोगकर्ताओं को मैं अनुमान लगाऊंगा उनमें लिनक्स का ज्ञान कम होगा और वे शायद टर्मिनल का उपयोग कभी नहीं करेंगे लेकिन आप इसके बारे में कोई भी जानकारी जोड़ सकते हैं।
लुइस अल्वाराडो

मैं वास्तव में ऐसा करने के लिए पर्याप्त नहीं जानता, लेकिन हो सकता है कि आप केवल एक समूह द्वारा सुलभ होने के लिए सभी महत्वपूर्ण अनुप्रयोगों को सेटअप कर सकें। फिर, आप उन्नत उपयोगकर्ताओं को पूरी पहुँच के लिए उस समूह में जोड़ सकते हैं। प्रतिबंधित उपयोगकर्ताओं के लिए, आप sudoers में उपयुक्त प्रविष्टियों के साथ sudo का उपयोग कर सकते हैं (रूट करने के लिए नहीं) उन्हें केस कमांड के आधार पर किसी अन्य कमांड पर पासवर्ड से सुरक्षित एक्सेस देने के लिए।
जो

यह वही है जो मैं कल्पना करता हूं कि AppArmor करने के लिए है, लेकिन मुझे नहीं लगता कि यह एक "आसान" तरीका है।
मूरू

जवाबों:


15

A. विन्यास विकल्प

यदि ब्लॉक का मतलब कुछ अनुप्रयोगों के उपयोग से नहीं-अनुभवी उपयोगकर्ताओं को ब्लॉक करना है, तो एप्लिकेशन की डेस्कटॉप फ़ाइल (जैसा कि वर्णित है [1]) की संपादन (एक स्थानीय प्रतिलिपि ) संभवतः सबसे तेज़ और सबसे आसान तरीका है।
अतिरिक्त बाधा और / या इस तथ्य को रोकने के लिए कुछ अतिरिक्त चीजें की जा सकती हैं कि उपयोगकर्ता यह आसानी से पता लगा ले कि हमने एप्लिकेशन ( [2]और [3]) को ब्लॉक करने के लिए क्या किया है ।

अनुभवी उपयोगकर्ताओं के साथ अनअटेंडेड स्थितियों के लिए सेट अप फिट नहीं है। औसत उपयोगकर्ताओं के साथ "घर" स्थितियों में यह कई मामलों में पर्याप्त होगा।

1. संपादन के लिए gedit (एक स्थानीय संस्करण) .desktop फ़ाइल को अवरुद्ध करने के लिए नमूना

  • में आवेदन के डेस्कटॉप फाइल कॉपी /usr/share/applicationsकरने के लिए ~/.local/share/applications:

    cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
    
  • फाइल को एडिट करें: इसे एक खुले गैडिट विंडो के ऊपर खींचकर इसे गेडिट (जब आप अभी भी :) कर सकते हैं) के साथ खोलें।

    • लाइन की जगह

      Exec=gedit %U
      

      द्वारा:

      Exec=zenity --info --text 'You are not allowed to use this application'
      
    • शॉर्टकट में से किसी एक को शुरू करने से रोकने के लिए (संभव) शॉर्टकटों को हटा दें:

      लाइन को हटाएं (gedit उदाहरण के लिए):

      Actions=Window;Document;
      

      और अनुभाग: जैसे:

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

    तब से (लॉग आउट / लॉग इन करने के बाद) उपयोगकर्ता इस संदेश को देखेगा कि क्या वह डैश से गेडिट खोलने की कोशिश करता है, या एप्लिकेशन से जुड़ी एक फ़ाइल खोलने की कोशिश करता है:

    यहाँ छवि विवरण दर्ज करें

    • डैश से एप्लिकेशन को छिपाना (वैकल्पिक उपाय)

      उपरोक्त परिवर्तन करने के बाद, gedit.desktopफ़ाइल अभी भी खुली हुई है, हम एक अतिरिक्त पंक्ति जोड़ सकते हैं:

      NoDisplay=true
      

      इस लाइन को जोड़ने से, geditडैश में दिखाई भी नहीं देगा।

    पूर्ववत करें

    पूर्ववत करने के लिए, बस स्थानीय .desktopफ़ाइल को हटा दें~/.local/share/applications

2. यह पता लगाने के लिए थोड़ा और अधिक कठिन है

हालांकि, .desktopफ़ाइल को संपादित करने के बाद , एप्लिकेशन डैश में दिखाई नहीं देगा, डैश खोज अभी भी हमारी नई बनाई गई gedit.desktopफ़ाइल दिखाएगी , जो अनजाने में एक संकेत दे सकती है कि आवेदन ब्लॉक से कैसे बचा जाए।

यहाँ छवि विवरण दर्ज करें

इससे बचने के लिए, हमें ~/.local/share/applicationsडैश खोज से निर्देशिका को बाहर करना चाहिए और खोज इतिहास को साफ़ करना चाहिए ।
सिस्टम सेटिंग्स खोलें> "सुरक्षा और गोपनीयता"> "फ़ाइलें और अनुप्रयोग" (टैब)। निर्देशिका ~/.local/share/applicationsको खोज से बाहर करने के लिए सूची में जोड़ें ।

यहाँ छवि विवरण दर्ज करें

3. (Not) टर्मिनल / कमांड लाइन का उपयोग करना

geditआदेश को पुनर्निर्देशित करना(1)

.desktopफ़ाइल को संपादित करने से डैश से एप्लिकेशन का उपयोग करने से रोकता है, लेकिन यदि उपयोगकर्ता को AltF2एप्लिकेशन को चलाने के लिए संयोजन और कमांड पता है, तो वह टर्मिनल के साथ ही, अभी भी एप्लिकेशन को शुरू करने में सक्षम होगा। अतिरिक्त उपाय स्थापित करने के लिए एक अच्छा और आसान तरीका है (यदि यह अभी तक मौजूद नहीं है) तो निर्देशिका ~/binबनाने और निर्देशिका में एक छोटी स्क्रिप्ट बनाने के लिए है:

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

इसे निष्पादन योग्य बनाएं और आवेदन के बाद इसे नाम दें; geditइस मामले में।

चूंकि ~/binमें है PATH, कमांड चलाने से "वास्तविक" geditएप्लिकेशन के बजाय स्क्रिप्ट को कॉल किया जाएगा । परिणामस्वरूप, वही You are not allowed to use this application-message दिखाई देगा

geditआदेश को पुनर्निर्देशित करना(2)

एप्लिकेशन के आदेश को पुनर्निर्देशित करने का एक और तरीका (अधिक सीमित प्रभाव के साथ, नोट देखें) .bashrcफ़ाइल में एक उपनाम जोड़ना है :

gedit ~/.bashrc

लाइन जोड़ें (उदाहरण उदाहरण):

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

नोट : यह केवल एक अतिरिक्त उपाय के रूप में उपयोग किया जाना है, क्योंकि यह केवल एप्लिकेशन को टर्मिनल से सीधे कॉल करने से रोकता है। .txtहालाँकि (अभी ) फ़ाइल पर डबल क्लिक करने पर भी एप्लिकेशन खुल जाएगा।

टर्मिनल का उपयोग कठिन या असंभव सब पर करें

टर्मिनल के उपयोग को रोकने के लिए, आप उसी तरह की ट्रिक को भी कर सकते हैं gnome-terminal.desktop- जैसे कि फ़ाइल में [1]और / या टर्मिनल को चलाने के लिए डिफ़ॉल्ट शॉर्टकट कुंजी संयोजन को बदल दें (सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "स्टार्टर्स" )


4. .desktopफ़ाइल का एक संपादित संस्करण स्वचालित रूप से बनाने (या पूर्ववत करने का छोटा उपकरण) (जैसा कि 1. में है)

यदि आप नीचे दिए गए स्क्रिप्ट को तर्क के साथ चलाते हैं blockया unblock(आपको इसे या तो एक के साथ चलाना होगा ), तो आपको (वैश्विक) डेस्कटॉप फ़ाइलों के साथ एक सूची प्रस्तुत की जाएगी, जो आपके इंस्टॉल किए गए अनुप्रयोगों का प्रतिनिधित्व करेंगे:

यहाँ छवि विवरण दर्ज करें

आप जिस तर्क से इसे चलाते हैं, उसके आधार पर एक को चुनें, और आपका एप्लिकेशन ब्लॉक या अनब्लॉक हो गया है।

ध्यान दें

इसे काम करने के लिए आपको लॉग आउट / लॉग इन करना पड़ सकता है।

लिपी

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

स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे सहेजें block_apps.pyऔर इसे या तो चलाएं:

python3 /path/to/block_apps.py block

या

python3 /path/to/block_apps.py unblock

बी स्क्रिप्टेड विकल्प

पृष्ठभूमि में स्क्रिप्ट चलाकर कुछ अनुप्रयोगों को अवरुद्ध भी किया जा सकता है। यदि "निषिद्ध" एप्लिकेशन चलाया जाता है तो स्क्रिप्ट को कुछ क्रियाएं करनी होंगी।

1. निषिद्ध अनुप्रयोगों का उपयोग किए जाने पर स्क्रीन में हेरफेर करने के लिए स्क्रिप्ट।

नीचे दी गई स्क्रिप्ट उपयोगकर्ता परिभाषित अनुप्रयोगों को अवरुद्ध करने का एक लचीला तरीका प्रदान करती है। यह एक साधारण आदेश के साथ चलता है, एक तर्क के रूप में निषिद्ध अनुप्रयोगों के साथ, जैसे (यह मानते हुए कि आपने स्क्रिप्ट को निष्पादन योग्य बनाया है):

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

इस तरह से अनुप्रयोगों को अवरुद्ध करने का लाभ यह है कि यह लचीला है; यहां तक ​​कि एक खाते के भीतर, विभिन्न सेटिंग्स का उपयोग किया जा सकता है, बस अन्य अनुप्रयोगों को तर्क के रूप में उपयोग करके।

यह क्या करता है

अन-लाइन्स में से किसी एक पर टिप्पणी करके:

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

या

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

स्क्रिप्ट या तो:

स्क्रीन को काला करता है ( action = "xrandr --output "+screen+" --brightness 0"):

यहाँ छवि विवरण दर्ज करें

या इसे उल्टा कर देता है ( action = "xrandr --output "+screen+" --rotate inverted"):
( किसने कहा कि एकता सही पर लॉन्चर लगाने की अनुमति नहीं देती है? )

यहाँ छवि विवरण दर्ज करें

लिपी

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

कैसे इस्तेमाल करे

  • स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे सहेजें block_apps.py, इसे निष्पादन योग्य बनाएं
  • इसे कमांड द्वारा चलाएं:

    /path/to/block_apps.py <application_1> <application_2> <application_3> etc...
    
  • महत्वपूर्ण
    करने के लिए मारनेblock_apps.py स्क्रिप्ट और बहाल "सामान्य" सेटिंग्स, नीचे (यह एक शॉर्टकट कुंजी संयोजन के तहत उपलब्ध बनाने) स्क्रिप्ट का उपयोग करें:

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

हमेशा स्क्रिप्ट की तरह, इसे एक खाली फ़ाइल में कॉपी करें, इसे इस रूप में सहेजें kill_blockapps.py, इसे निष्पादन योग्य बनाएं और इसे इसके द्वारा चलाएं:

/path/to/kill_blockapps.py

आप शायद इसे एक शॉर्टकट कुंजी के तहत रखना चाहेंगे: चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और ऊपर के रूप में कमांड जोड़ें।


महान काम जैकब। बहुत बढ़िया जवाब। इसे सुधारते रहें।
लुइस अल्वाराडो

@ EricCarvalho संपादन के लिए धन्यवाद! उस एक को याद किया।
जैकब व्लिजम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.