Gerência do Squid
Publicado por Jonathan Lessa (última atualização em 29/06/2011)
[ Hits: 7.668 ]
Gerenciando o Squid com opções de adicionar/remover usuários, bloquear/liberar sites, verificar status da conexão, verificar status do squid, limpar o cache do squid.
*** Descomentar as linhas abaixo no squid.conf:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/conf/pass.geral
auth_param basic children 5
auth_param basic realm Proxy InfoNet
*** Adicionar as linhas abaixo no squid.conf:
###
#Definindo acls para o script de Manutencao
###
acl sites_liberados_restrito url_regex "/etc/squid/conf/sites_liberados_Restrito"
acl palavras_liberadas_restrito url_regex "/etc/squid/conf/palavras_liberadas_Restrito"
acl sites_bloqueados_restrito2 dstdom_regex "/etc/squid/conf/sites_bloqueados_Restrito2"
acl sites_liberados_geral url_regex "/etc/squid/conf/sites_liberados_Geral"
acl sites_bloqueados_geral url_regex "/etc/squid/conf/sites_bloqueados_Geral"
###
#Definindo acls dos grupos
###
acl gerencia proxy_auth "/etc/squid/conf/users_Gerencia"
acl restrito proxy_auth "/etc/squid/conf/users_Restrito"
acl restrito2 proxy_auth "/etc/squid/conf/users_Restrito2"
http_access allow MAONET gerencia
http_access allow MAONET sites_liberados_geral
http_access deny MAONET sites_bloqueados_geral
http_access allow MAONET restrito2 !sites_bloqueados_restrito2
http_access allow MAONET restrito sites_liberados_restrito
http_access allow MAONET restrito palavras_liberadas_restrito
*** {01.00.001} Comandos a serem executados para devido funcionamento do script
>/etc/squid/conf/sites_liberados_Restrito
>/etc/squid/conf/palavras_liberadas_Restrito
>/etc/squid/conf/sites_bloqueados_Restrito2
>/etc/squid/conf/sites_liberados_Geral
>/etc/squid/conf/sites_bloqueados_Geral
>/etc/squid/conf/users_Gerencia
>/etc/squid/conf/users_Restrito
>/etc/squid/conf/users_Restrito2
chmod 777 /etc/squid/conf/sites_*
chmod 777 /etc/squid/conf/users_*
chmod 777 /etc/squid/conf/palavras_liberadas_Restrito
htpasswd -bc /etc/squid/conf/pass.geral infonet teste
mkdir /var/log/manutencao
>/var/log/manutencao/manutencao.log
chmod -R 777 /var/log/manutencao
mkdir /etc/squid/bkp/
chmod 777 /etc/squid/bkp/
groupadd webmaster
useradd manutencao -g webmaster
passwd manutencao SENHA_DO_USUARIO_MANUTENCAO
Obs.: Caso o IP que esteja aparecendo esteja errado no menu 9, será necessário alterar no script a linha abaixo, informando a interface de conexão correta:
internet=ppp0
*** Descrição dos Grupos: ***
Gerencia: tem acesso a irrestrito
Restrito: tem acesso somente aos sites cadastrados como liberados
Restrito2: tem acesso a todos os sites, exceto os cadastrados como bloqueados
#!/bin/bash #Srcipt para manutencao de usuarios/grupos e controle de acesso SQUID #Autor: Jonathan Lessa -InfoNet - Solucoes Internet #Data: 17/05/2010 #Definicao de variaveis arqusuarios="/etc/squid/conf/pass.geral" dirusuarios="/etc/squid/conf/" dirbackupusuarios="/etc/squid/bkp/" logfile=/var/log/manutencao/manutencao.log internet=ppp0 opcao= grupos[0]="Gerencia" grupos[1]="Restrito" grupos[2]="Restrito2" #grupos[3]="MsnBloqueado" function listarGrupos() { i=0; for grupo in ${grupos[@]} do ((++i)); echo "$i) - $grupo"; done } while true do clear echo " InfoNet - Solucoes Internet Script para manutencao de usuarios e controle de acesso SQUID Selecione a opcao desejada: 1 - Cadastrar usuario 2 - Alterar usuario 3 - Excluir usuario 4 - Listar usuarios 5 - Bloquear site 6 - Liberar/Desloquear site 7 - Listar sites Liberados/Bloqueados 8 - Manutencao do SQUID 9 - Status do sistema 0 - Sair" tput cup 18 0; tput el; read -p "Opcao: " opcao; # [[ $opcao == 0 ]] && break; i=0 existe= clear; case "$opcao" in 1 ) echo "Cadastro e Usuario"; echo "=================="; echo ""; read -p "Digite o nome do usuario: " usuario1; usuario=$(eval echo $usuario1 | tr [[:upper:]] [[:lower:]]) #existe=$( grep ^$usuario':' "$arqusuarios"); grep ^$usuario':' "$arqusuarios"; (( $? != 0)) && { read -p "Digite a senha do usuario: " senha; echo ""; echo "=================================="; echo "Selecione o gupo no qual deseja cadastrar o usuario:"; echo "=================================="; echo "$(listarGrupos)"; echo "0) - Cancelar cadastro" read -p "Grupo: " opgrupo; echo ""; case $opgrupo in [1-${#grupos[@]}] ) { grupo=${grupos[`eval echo $(( opgrupo - 1 ))`]}; arqgrupo=$dirusuarios"users_"$grupo; eval htpasswd -b "$arqusuarios" "$usuario" "$senha" 1>/dev/null 2>/dev/null; echo $usuario >> $arqgrupo; echo $(date +%d%m%Y)" = cadastrado usuario: $usuario senha: $senha grupo: $grupo" >> $logfile; echo Usuario "$usuario" cadastrado com sucesso!; service squid reload 1>/dev/null 2>/dev/null; }; ;; 0 ) echo "Cadastro Cancelado!"; ;; * ) echo "Grupo invalido"; ;; esac; } || { echo ""; echo "Usuario ja existe"; }; echo ""; read -p "Pressione Enter para voltar para o menu principal" OK; ;; 2 ) echo "Alteracao de Usuario"; echo "===================="; echo ""; read -p "informe o login do usuario: " usuario; grep '^'$usuario':' $arqusuarios 1>/dev/null 2>/dev/null; (( $? != 0 )) && { echo ""; echo "Usuario nao encontrado!"; } || { clear; echo Usuario $usuario encontrado. As alteracoes abaixo serao aplicadas a este usuario! echo "===================="; (( $? == 0 )) && { echo "Selecione uma das opcoes a seguir:"; echo "==================================" echo ""; echo "1) Inserir usuario em grupo"; echo "2) Alterar usuario de grupo"; echo "3) Excluir usuario de grupo"; echo "4) Alterar senha de usuario"; echo "0) Voltar ao Menu Principal"; echo ""; read -p "Opcao: " opusuario; case $opusuario in 1 ) clear; echo "A qual Grupo deseja adicionar o usuario ($usuario)?"; echo "$(listarGrupos)"; echo "0) - Cancelar operacao" read -p "Grupo: " opgrupo; echo ""; echo ""; case $opgrupo in [1-${#grupos[@]}] ) { grupo=${grupos[`eval echo $(( opgrupo - 1 ))`]}; arqgrupo=$dirusuarios"users_"$grupo; echo ""; grep '^'$usuario'$' $arqgrupo; (( $? == 0 )) && { echo "Este usuario ja esta neste grupo!"; } || { echo $usuario >> $arqgrupo; echo "$(date +%d%m%Y) = Usuario $usuario cadastrado no grupo: $grupo" >> $logfile; echo "Usuario $usuario cadastrado no grupo $grupo"; }; }; service squid reload 1>/dev/null 2>/dev/null; ;; 0 ) echo "Operacao cancelada!"; ;; * ) echo "Opcao Invalida!"; ;; esac; ;; 2 ) clear; echo "Migrando o usuario ($usuario) de Grupo:"; echo "============================"; echo "$(listarGrupos)"; echo "0) - Cancelar Operacao"; read -p "Grupo Atual: " opgrupoorigem; case $opgrupoorigem in [1-${#grupos[@]}] ) { grupoo=${grupos[`eval echo $(( opgrupoorigem - 1 ))`]}; arqgrupoo=$dirusuarios"users_"$grupoo; grep '^'$usuario'$' $arqgrupoo; echo ""; (( $? != 0 )) && { echo "Este usuario nao esta no grupo informado"; } || { read -p "Novo Grupo : " opgrupodestino; case $opgrupodestino in [1-${#grupos[@]}] ) { grupod=${grupos[`eval echo $(( opgrupodestino - 1 ))`]}; arqgrupod=$dirusuarios"users_"$grupod; grep '^'$usuario'$' $arqgrupod 1>/dev/null 2>/dev/null; (( $? == 0 )) && { echo ""; echo "Este usuario ja esta no Novo Grupo"; } || { eval sed -i.bkp$(date +%d-%m-%Y) /^$usuario$/d $arqgrupoo; echo $usuario >> $arqgrupod; echo $(date +%d%m%Y) " usuario $usuario movido do grupo $grupoo para o grupo $grupod" >> $logfile; echo ""; echo ""; echo "Usuario $usuario movido do grupo $grupoo para o grupo $grupod"; }; }; service squid reload 1>/dev/null 2>/dev/null; ;; 0 ) echo "Operacao Cancelada!"; ;; * ) echo "Opcao Invalida"; ;; esac; }; }; ;; 0 ) echo "Operacao Cancelada!"; ;; * ) echo "Opcao Invalida"; ;; esac; ;; 3 ) clear; clear; echo "Excluindo o usuario ($usuario) de Grupo:"; echo "================================"; echo "$(listarGrupos)"; echo "0) - Cancelar Operacao" read -p "Grupo: " opgrupo; case $opgrupo in [1-${#grupos[@]}] ) { grupo=${grupos[`eval echo $(( opgrupo - 1 ))`]}; arqgrupo=$dirusuarios"users_"$grupo; grep '^'$usuario'$' $arqgrupo 1>/dev/null 2>/dev/null; (( $? == 0 )) && { sed -i.bkp$(date +%d-%m-%Y) /^$usuario$/d $arqgrupo; echo $(date +%d%m%Y) " usuario $usuario removido do grupo $grupo" >> $logfile; echo ""; echo ""; echo "Usuario $usuario removido do grupo $grupo"; service squid reload 1>/dev/null 2>/dev/null; } || { echo""; echo "Usuario nao encontrado neste Grupo!"; }; }; ;; 0 ) echo "Operacao Cancelada!" ;; * ) echo "Opcao invalida!"; ;; esac; ;; 4 ) clear; echo "ALteracao de Senha"; echo "=================="; echo ""; echo "Usuario: $usuario"; read -p "Digite a nova senha: " senha; htpasswd -b $arqusuarios $usuario $senha 1>/dev/null 2>/dev/null; echo "$(date) => Senha do usuario $usuario alterada para $senha" >> $logfile; echo "Senha Alterada!"; service squid reload 1>/dev/null 2>/dev/null; ;; 0 ) ;; * ) echo "Opcao Invalida"; ;; esac; mv -f $dirusuarios*.bkp* $dirbackupusuarios 1>/dev/nulll 2>/dev/null; }; }; echo ""; read -p "Pressione Enter para voltar para o menu principal" OK; ;; 3 ) echo "Exclusao de Usuario"; echo "=================="; echo ""; read -p "Digite o nome do usuario que deseja excluir: " usuario; grep '^'$usuario':' $arqusuarios 1>/dev/null 2>/dev/null; (( $? != 0 )) && { echo "Usuario nao encontrado!"; } || { read -p "Tem certeza que deseja excluir $usuario do acesso a internet? (S/n): " resp; case $resp in [sS] ) eval htpasswd -D $arqusuarios $usuario; for arqgrupos in $(grep -r "^$usuario$" $dirusuarios | cut -d: -f1) do eval sed -i.bkp$(date +%d-%m-%Y) /^$usuario$/d $arqgrupos 1>/dev/null 2>/dev/null; mv -f $dirusuarios"*.bkp*" $dirbackupusuarios 1>/dev/null 2>/dev/null; done; echo "" && echo "Usuario removido"; service squid reload 1>/dev/null 2>/dev/null; ;; [nN] ) echo "" && echo Exclusao Cancelada; ;; * ) echo "Opcao Invalida. Operacao cancelada." ;; esac; } echo ""; read -p "Pressione Enter para voltar para o menu principal" OK; ;; 4 ) clear; echo "Selecione o grupo para listar os usuarios" echo "$(listarGrupos)"; echo "0) - Todos"; # while true # do read -p "Opcao: " opgrupo; case "$opgrupo" in [0-${#grupos[@]}] ) { [ $opgrupo = 0 ] && { clear echo "===================="; echo "Listagem de Usuarios"; echo "===================="; echo ""; contgrupo=0; for grupo in ${grupos[@]} do eval echo "Usuarios do grupo" ${grupos[$contgrupo]}; echo "-------------------------------"; eval cat -n "/etc/squid/conf/users_"${grupos[$contgrupo]}; echo ""; echo "-------------------------------"; (( ++contgrupo )); (( $contgrupo == ${#grupos[@]} )) || { tput sc ; echo "Pressione Enter para listar o proximo Grupo" ; read ok ; tput rc; tput el; }; done; } || { clear; echo "===================="; echo "Listagem de Usuarios"; echo "===================="; echo ""; echo "Usuarios do grupo" ${grupos[`eval echo $(( opgrupo -1 ))`]}; echo "--------------------------------"; cat -n $dirusuarios"users_"${grupos[`eval echo $(( opgrupo -1 ))`]}; echo ""; echo "--------------------------------"; }; };; * ) echo "Opcao invalida!" ;; esac; echo ""; read -p "Pressione enter para voltar ao menu principal..."; ;; 5 ) clear; echo "Bloqueio de Site"; echo "================" && echo ""; echo "digite a URL a ser bloqueada (OBS.: Nao digite o 'www.' Ex.: playboy.com.br ou batepapo.uol.com.br)" && echo ""; read -p "Site: " opsite; [[ -z $opsite ]] || { echo "Selecione o grupo para efetuar o bloqueio do site" echo "$(listarGrupos)"; echo "0) - Todos" && echo ""; read -p "Opcao: " opgrupo && echo ""; case "$opgrupo" in [1-${#grupos[@]}] ) { echo $opsite >> $dirusuarios"sites_bloqueados_""${grupos[`eval echo $(( opgrupo -1 ))`]}"; echo "$(date +%d%m%Y) => a URL $opsite foi bloqueada para o grupo ${grupos[`eval echo $(( opgrupo -1 ))`]}" >> $logfile; echo "Site bloqueado para o grupo "${grupos[`eval echo $(( opgrupo -1 ))`]}; service squid reload 1>/dev/null 2>/dev/null; }; ;; 0 ) echo $opsite >> $dirusuarios"sites_bloqueados_Geral"; echo "Site $opsite inserido na lista de bloqueio geral!"; echo "$(date +%d%m%Y) => a URL $opsite foi bloqueada para todos os grupos" >> $logfile; service squid reload 1>/dev/null 2>/dev/null; ;; * ) echo "Opcao Invalida!"; ;; esac; }; echo "" && read -p "Pressione enter para voltar ao menu principal..."; ;; 6 ) clear; echo "Liberar/Desbloquear Site"; echo "========================" && echo ""; echo "digite a URL a ser liberada/desbloqueada (OBS.: Nao digite o 'www.' Ex.: playboy.com.br ou batepapo.uol.com.br)" && echo ""; read -p "Site: " opsite; [[ -z $opsite ]] || { echo "$(listarGrupos)"; echo "0) - Todos" && echo ""; echo "Selecione o grupo para efetuar o desbloqueio/liberacao do site"; read -p "Grupo: " opgrupo && echo ""; case "$opgrupo" in [1-${#grupos[@]}] ) { grupo=${grupos[`eval echo $(( opgrupo -1 ))`]}; arqgrupo=$dirusuarios"sites_bloqueados_"$grupo; eval sed -i.bkp$(date +%d-%m-%Y) /^$opsite$/d $arqgrupo; echo "$(date +%d%m%Y) => a URL $opsite foi desbloqueada para o grupo $grupo" >> $logfile; echo $opsite >> $dirusuarios"sites_liberados_"$grupo; echo "Site liberado para o grupo $grupo"; service squid reload 1>/dev/null 2>/dev/null; } ;; 0 ) { eval sed -i.bkp$(date +%d%m%Y) /^$opsite$/d $dirusuarios"sites_bloqueados_Geral"; echo "$(date +%d%m%Y) => a URL $opsite foi desbloqueada para todos os gruposo" >> $logfile; echo $opsite >> $dirusuarios"sites_liberados_Geral"; echo "Site liberado para todos!"; echo "$(date +%d%m%Y) => a URL $opsite foi liberada para todos os gruposo" >> $logfile; service squid reload 1>/dev/null 2>/dev/null; } ;; * ) echo "Opcao Invalida!"; ;; esac; mv -f $dirusuarios"*.bkp*" $arqbackupusuarios 1>/dev/null 2>/dev/null; }; echo "" && read -p "Pressione Enter para voltar ao Menu Principal.."; ;; 7 ) clear; echo "Listagem de sites"; echo "================="; echo "Deseja listar os sites (L)iberados ou (B)loqueados?"; read -p "Opcao: " oplistar; echo ""; listar=""; case $oplistar in [Ll] ) listar=liberados; ;; [Bb] ) listar=bloqueados; ;; * ) echo "Opcao Invalida"; esac; [[ ! -z $listar ]] && { echo "Selecione o grupo para listar os sites $listar"; echo "$(listarGrupos)"; echo "0) - Todos"; read -p "Opcao: " opgrupo; case "$opgrupo" in [1-${#grupos[@]}] ) { grupo=${grupos[`eval echo $(( opgrupo -1 ))`]}; arqgrupo=$dirusuarios"sites_"$listar"_"$grupo; echo ">>> Sites $listar para o grupo: $grupo"; echo "=============================="; more $arqgrupo; echo "==============================" && echo ""; } ;; 0 ) { echo ">>> Sites $listar Geral"; echo "=============================="; more $dirusuarios"sites_"$listar"_Geral"; echo "==============================" && echo ""; } ;; * ) echo "Opcao Invalida!!!"; ;; esac; }; echo "" && read -p "Pressione enter para voltar ao menu principal..."; ;; 8 ) clear echo "Manutencao do SQUID" echo echo "Selecione a opcao desejada:" echo # echo "1 - Gerar relatorio de acesso agora" echo "1 - Limpar o cache" echo "2 - Reiniciar o SQUID" echo "3 - Parar o iptables" echo "4 - Iniciar ou reiniciar o iptables" echo "0 - Voltar ao menu principal" read -p "Opcao: " op8; case $op8 in # 1 ) echo "Gerando relatorio... Aguarde!" # data=`date -d yesterday "+%d/%m/%Y"`-`date "+%d/%m/%Y"` # /usr/bin/sarg -i -f /etc/sarg/sarg-daily.conf -d $data # echo "Operacao concluida" && sleep 2 # ;; 1 ) echo "Aguarde... limpando o cache do SQUID"; service squid stop; rm -fr /var/spool/squid/*; service squid start ; echo "Cache excluido com sucesso!"; ;; 2 ) echo "Aguarde... Reiniciando o SQUID" service squid restart; echo "SQUID reiniciado com sucesso"; ;; 3 ) echo "Parando o iptables..." service iptables stop 1>/dev/null 2>/dev/null && echo""; echo "O iptables foi desligado"; ;; 4 ) echo "Reiniciando o iptables" /etc/rc.d/firewall.sh 1>/dev/null 2>/dev/null && echo""; echo "O iptables foi inicializado"; ;; 0 ) echo "Cancelando Operacao..." ;; * ) echo "Opcao Invalida"; ;; esac; echo "" && read -p "Pressione Enter para voltar ao Menu Principal"; ;; 9 ) conexao=inativa squid=parado clear echo "Obtendo Informacoes do sistema... Aguarde!" #ifconfig | grep ppp0; ping -c 2 200.241.52.1 | grep "100% packet loss" 1>/dev/null 2>/dev/null; (( $? != 0)) && { conexao=ativa; ip=$(ifconfig $internet | grep inet | awk '{print $2}' | awk -F : '{print $2}'); } || { echo "Aguarde! conectando..." && /etc/rc.d/velox_test.pl; #ifconfig | grep ppp0; ping -c 2 200.241.52.1 | grep "100% packet loss" 1>/dev/null 2>/dev/null; (( $? != 0)) && { conexao=ativa; ip=$(ifconfig $internet | grep inet | awk '{print $2}' | awk -F : '{print $2}'); echo "Conexao estabelecida"; echo "IP da conexao: $ip"; }; }; echo "" && echo "Data do sistema: $(date +%A,\ %d\ de\ %B\ de\ %Y\ Hora:\ %H:%M)"; echo "" && echo "Status da conexao: $conexao"; [[ $conexao == "inativa" ]] && { echo "" && echo "Nao foi possivel se comunicar com o servidor da InfoNet."; echo "" && echo "Entre em contato com o Suporte Tecnico da InfoNet: (79) 2106-8000"; } || { echo "" && echo "Conexao com a internet OK"; echo "IP da conexao: $ip"; }; echo ""; echo "-----------------" echo "Analise do disco:"; echo "-----------------" echo "Tamanho total do HD: $(df -h | sed 's/[ ]\+/:/g' | grep "/"$ | cut -d: -f2)"; echo "Espaco utilizado: $(df -h | sed 's/[ ]\+/:/g' | grep "/"$ | cut -d: -f3) = $(df -h | sed 's/[ ]\+/:/g' | grep "/"$ | cut -d: -f5) em uso"; echo "Espaco disponivel: $(df -h | sed 's/[ ]\+/:/g' | grep "/"$ | cut -d: -f4)" echo infhd=$(echo $(df -h | grep "/"$) | cut -d" " -f5); hd=$(echo $infhd | cut -d" " -f2 | cut -d% -f1); (( $hd >= 95 )) && { echo "" && echo "Atencao! pouco espaco em disco. Limpando o disco... Aguarde!"; service squid stop; cp -a /var/log/squid/access.log /var/log/access.log; rm -f /var/log/squid/*; mv /var/log/access.log /var/log/squid/access.log; rm -rf /var/spool/squid/*; service squid start; echo "" && echo "Limpeza de disco efetuada com sucesso..." }; echo ""; service squid status | grep "morto" 1>/dev/null 2>/dev/null; (( $? != 0 )) && { echo "SQUID esta rodando"; } || { echo "O SQUID esta parado. Iniciando o SQUID... Aguarde!"; killall -9 squid; service squid start; } echo "" && read -p "Pressione enter para voltar ao menu principal"; ;; 10 ) clear echo "Bloqueio de MSN" echo"" echo "1 - Bloquear Usuarios" echo "2 - Desbloquear Usuarios" echo "3 - Listar Usuarios Desbloqeuados" echo "0 - Retornar ao Menu Principal" read -p "Opcao: " opcaomsn && echo ""; case $opcaomsn in 1 ) echo "Digite o login do usuario que deseja bloquear" && echo ""; read -p "Usuario: " usuariomsn; grep '^'$usuariomsn':' $arqusuarios 1>/dev/null 2>/dev/null; (( $? == 0 )) && { echo $usuariomsn >> $dirusuarios"users_bloqueio_MSN"; echo "$(date) => o MSN foi bloqueado para o usuario $usuariomsn">>$logfile; echo ""; echo "============================" echo ""; echo "Usuario $usuariomsn bloqueado para acesso ao MSN"; echo ""; } || echo "Usuario nao encontrado!"; ;; 2 ) echo "Digite o login do usuario que deseja desbloquear" && echo ""; read -p "Usuario: " usuariomsn && echo ""; grep '^'$usuariomsn'$' $dirusuarios"users_bloqueio_MSN" 1>/dev/null 2>/dev/null; (( $? == 0 )) && { sed -i.bkp /^$usuariomsn$/d $dirusuarios"users_bloqueio_MSN"; echo "$(date +%d%m%Y) => o MSN foi desbloqueado para o usuario $usuariomsn">>$logfile; echo ""; echo ""; echo "Usuario $usuariomsn desbloqueado para acesso ao MSN"; } || echo "Usuario não encontrado"; ;; 3 ) echo "Usuarios bloqueados para acesso ao MSN:"; echo "======================================="; echo ""; cat -n $dirusuarios"users_bloqueio_MSN" | more; echo ""; ;; 0 ) echo "Operacao Cancelada"; ;; * ) echo "Opcao Invalida!"; ;; esac; echo ""; read -p "Pressione Enter para voltar ao Menu Principal..."; ;; 0 ) echo "Encerrando o script..." sleep 2; exit; ;; esac; done
Atualizar repositório no Linux desabilitando a hibernação do sistema
passa2 - Um sistema de backup/sincronização/cópia de arquivos em SHell Script
Tabela de cores em shellscript
Baixar flatpak para um arquivo local
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta