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.