Exclui o usuário de usar programas instalados em todo o sistema

2

Eu criei recentemente um novo usuário. Eu quero permitir que este usuário use apenas um ou dois programas, mas eu tenho muitos aplicativos instalados em todo o sistema. Existe uma maneira fácil de excluir um usuário específico do uso de aplicativos (sem reinstalar tudo novamente)?

    
por kleinempfaenger 13.04.2014 / 02:35

3 respostas

4

Abaixo, uma combinação de medidas que você pode tomar para restringir os usuários localmente de usar aplicativos definidos. Eles não são destinados (nem adequados) para uso não supervisionado, em espaços públicos, por exemplo, mas criam um desktop restrito utilizável. É principalmente a combinação de medidas que torna mais difícil ignorar. Além disso, se alguém conseguir lançar um aplicativo "proibido", ele será registrado.

A resposta é um pouco extensa. A configuração não é e você é assistido por dois scripts.

Qual é a configuração de

  • Uma seleção de software, indisponível na interface, editando o arquivo de área de trabalho local por um script (mais abaixo)
  • Disponibilizando o terminal apenas por senha, é mais difícil executar os aplicativos do terminal.
  • Alterando a combinação de teclas padrão de abertura do terminal, em vez de ctrl t
  • Registrando o uso de uma "lista negra" de software que você define, caso algum usuário inteligente possa superar sua configuração

Como configurar

Configurando uma ampla seleção de softwares, não disponíveis na interface.

  • Faça login na conta de usuário que você deseja restringir
  • Crie uma pasta (temporária) (não importa onde, na área de trabalho, por exemplo) para editar arquivos.
  • Navegue até o diretório /usr/share/applications Selecione todos os aplicativos (arquivos de área de trabalho) dos quais você deseja excluir o usuário (não selecione todos sem procurar, alguns deles são necessários para configurar sua área de trabalho)
  • Copie esses arquivos da área de trabalho para o diretório temporário que você criou, para edição em massa.
  • Copie o texto abaixo, cole-o em um arquivo vazio, salve-o na mesma pasta temporária que no_openapp.py .
  • CD no diretório (!) e execute-o com o comando: python3 no_openapp.py .

O script fez algumas coisas:

1] Crie uma lista negra de comandos (para uso posterior, veja mais abaixo) 2] Edite os arquivos da área de trabalho para mostrar uma mensagem em vez de executar o aplicativo. Se você mover os arquivos da área de trabalho para ~/.local/share/applications , no próximo login os aplicativos não serão executados a partir do Unity ou do Dash.

#!/usr/bin/python3

import os
import getpass
import subprocess


desktopfile_dir = os.getcwd()
file_list = os.listdir(os.getcwd())
edit_subjects = [desktopfile_dir+"/"+item for item in file_list]

def create_blacklist():
    command_list = []
    for item in edit_subjects:
        with open(item) as blacklist_source:
            searchlines = blacklist_source.readlines()
        try:
            native_command = [
                line for line in searchlines if line.startswith("Exec=")
                ][0].replace("Exec=", "").replace("\n", "")
            cleaned_command = native_command.split(" ")[0]
            command_list.append(cleaned_command)
        except IndexError:
            pass

    with open(desktopfile_dir+"/blacklist.txt", "wt") as created_blacklist:
        created_blacklist.write(str(command_list))

def make_unavailable():
    for item in edit_subjects:
        try:
            with open(item, "r") as make_unav:
                lines = make_unav.readlines()
                line_range = range(0, len(lines))
                for index in line_range:
                    if lines[index].startswith("Exec="):
                        lines[index] = 'Exec=zenity --info --text="You are not allowed to use this application"\n'
                    else:
                        pass
            with open(item, "wt") as make_unav:
                for line in lines:
                    make_unav.write(line)
        except (IsADirectoryError, IndexError, PermissionError):
            pass


create_blacklist()
make_unavailable()

Restringir o uso do terminal

  • torne o terminal acessível com uma senha, como este post .
  • se o usuário estiver familiarizado com a combinação de teclas ctrl alt t , altere a combinação padrão:

    Sistema > Preferências > Atalhos de teclado > combinações de teclas (guia).

Caso você tenha um wizzkid contornando suas medidas, pegue-o

  • Caso um usuário consiga executar um aplicativo proibido, certifique-se de pegá-lo. Para isso, usamos a lista negra, criada no primeiro passo.
  • crie uma pasta em um local oculto. Copie o "blacklist.txt", criado na etapa um para o diretório.
  • copie o texto abaixo, cole-o em um arquivo de texto vazio e salve-o no mesmo diretório da lista negra, como processes.py .
  • abra uma janela de terminal, digite crontab -e . adicione a seguinte linha ao arquivo crontab:

    * * * * * cd /path/to/script; python3 processes.py

A lista negra é uma lista de nomes de processos. O script verifica cada minuto se um dos aplicativos da lista negra está em execução e mantém registro em um arquivo de log (no mesmo diretório em que o script está localizado). O nome do arquivo de log é log.txt. Opcionalmente, você pode fazer o script matar o aplicativo proibido (não o padrão). Para fazê-lo matar o (s) aplicativo (s), altere a linha kill_apps = "no" para kill_apps = "yes" (na seção head do sript).

#!/usr/bin/python3

import os
import datetime
import subprocess
import getpass

curr_dir = os.getcwd()
curruser = getpass.getuser()

# should forbidden applications be killed?
kill_apps = "yes"

def produce_commands_ofapp():
    with open(curr_dir+"/blacklist.txt", "r") as blacklist:
        blacklist = eval(blacklist.read())
    return blacklist

def createlist_runningprocs():
    processesb = subprocess.Popen(["ps", "-u", curruser], stdout=subprocess.PIPE)
    process_listb = (processesb.communicate()[0].decode("utf-8")).split("\n")
    return process_listb

def runsornot():
    check_blacklist = produce_commands_ofapp()
    runningprocs_list = createlist_runningprocs()
    found_matches = [item for item in check_blacklist
                       if item[:15] in str(runningprocs_list)]
    if len(found_matches) != 0:
        with open(curr_dir+"/log.txt", "a+") as logfile:
            logfile.write(str(found_matches)+" "+str(datetime.datetime.now())+"\n")
    else:
        pass
    if kill_apps == "yes":
        for application in found_matches:
            kill_forbidden(application)
    else:
        pass

def kill_forbidden(app_command):
    # get the pid length of system
    get_size = subprocess.Popen(
        ["cat", "/proc/sys/kernel/pid_max"],
        stdout=subprocess.PIPE
        )
    size = len((get_size.communicate()[0].decode("utf-8")).replace("\n", ""))
    # get the appropriate pid line & pid
    process_list = createlist_runningprocs()
    appr_pid = [
        line for line in process_list if \
        app_command[:15] in line][0][:size+1].replace(" ", "")
    # kill the found process
    subprocess.Popen(["kill", "-9", appr_pid])

runsornot()

Como dito, a configuração pode ser ignorada. No entanto, a combinação de medidas e o fato de você ter que saber quais são, fazem dela uma defesa razoável no caso de um uso médio com um conhecimento médio sobre como manipular o sistema.

    
por Jacob Vlijm 23.04.2014 / 18:26
2

Obrigado pelas suas respostas. Já cheguei a isso manipulando as permissões dos arquivos bin do programa. Instalei a antiga ferramenta de administração de usuários do gnome, que permite gerenciar grupos. Jogos de grupo não verificados para o usuário, que não tem permissão para abrir determinados programas. Em seguida, alterei o grupo e as permissões dos arquivos bin:

jogos chgrp do sudo / caminho / para / jogo

sudo chmod 750 / caminho / para / jogo

Agora, o usuário pode ver os arquivos da área de trabalho no Dash, mas eles não serão exibidos após o clique.

Saudações

    
por kleinempfaenger 23.04.2014 / 19:37
0

Isso é muito, muito difícil. Eu nunca vi nenhuma configuração que chegue perto de fazer isso e na maioria das vezes, quando as pessoas querem isso, eu tenho sido capaz de fornecer soluções muito melhores, porque não havia realmente nenhum ponto em restringir o usuário para começar - eles apenas não sabia quais outras opções o Ubuntu tem.

No entanto, você pode fazer isso executando toda a sessão do usuário em um contêiner lxc executando o Xspice, que simplesmente não possui nenhum outro aplicativo instalado. Será um grande projeto, mas se e quando funcionar, provavelmente será o melhor isolamento que você poderá obter. Essa idéia é baseada em um post de Serge Hallyn recentemente encontrado no Planet Ubuntu e você certamente vai querer lê-lo: link

É complicado, baseado em novas tecnologias que ainda não foram lançadas, não conheço ninguém que realmente tenha tentado isso para esses propósitos - mas, em teoria, deveria funcionar. :)

Eu certamente recomendaria que você investigasse outras maneiras de realizar seu verdadeiro objetivo, o que provavelmente não está realmente impedindo o uso de aplicativos, mas sim outra coisa.

    
por Jo-Erlend Schinstad 23.04.2014 / 19:04