sysaudit
Publicado por Pedro Fernandes (última atualização em 11/12/2021)
[ Hits: 697 ]
Homepage: https://github.com/PedroF37
Script para auditar 2 itens no sistema:
1. Itens com bit SUID|SGID
2. Contas de sistema (com shell false|nologin)
Script faz contagem de contas de sistema (com shell false|nologin) e de itens com bit suid|sgid, armazena relatórios detalhados em 2 arquivos.
Os relatórios são nomeados com a data no formato "%d%m%y%s", assim que for paranoico pode rodar 1000 vezes no mesmo dia que o script distingue os vários relatórios kk.
O script depois de rodar verifica se tem diferenças entre os relatórios atuais e o ultimo relatório e avisa se tiver diferença. Exemplo:
'Número de itens com bit suid|sgid no relatório anterior: '
'5'
'Número de itens com bit suid|sgid no relatório atual: '
'30000'
Como o script cria os relatórios detalhados, o usuário pode ver detalhadamente os relatórios.
O script se for rodado como root, também ativa o atributo de imutável para os relatórios, mas se for rodado como usuário normal
não ativa. Mas roda!!!
O script tem 2 variáveis para o usuário configurar que são:
BaseRptDir - nesta é para especificar o diretório onde se vai colocar os relatórios. O script cria o diretório, então só precisa de especificar
(Caminho Absoluto ok!!) Exemplo: /home/Reports
RootUser - nesta coloca 0 ou deixa em branco para rodar script como usuário comum e sem ativar o atributo imutável, ou, coloca 1 para rodar como root
e ativar o atributo imutável.
#!/bin/bash # -------------------------------------------------------- # # SCRIPT sysaudit # AUTOR Pedro Fernandes # E-MAIL pedrobfernandes37@gmail.com # DATA 25-05-2021 # -------------------------------------------------------- # # DESCRIÇÃO: # Script que audita 2 itens no sistema: # 1. Itens com bit SUID/SGID # 2. Contas de sistema (com shell false/nologin) # -------------------------------------------------------- # # FUNCIONAMENTO: # O script cria um diretório base, e dois subdiretórios # que usa para armazenar os arquivos de relatório cada # um em seu subdiretório. # O script nomeia cada arquivo com a data do dia, e # produz uma diferença breve entre o relatório atual # e o anterior na tela. O output mostrado pelo script # é como este: # 'Número de contas no relatório anterior:' # '50' # 'Número de contas no relatório atual:' # '1500' # O scrpit produz relatórios detalhados, então, você # pode olhar detalhadamente as diferenças nos arquivos # dentro dos diretórios. # Adicionalmente, o script, se for rodado como root # configura os arquivos com o atributo imutável, # usando o comando chattr. # -------------------------------------------------------- # # CONFIGURAÇÃO PARA USUÁRIO FAZER: # Tem duas variáveis no inicio do script para você # configurar. Elas são: # BaseRptDir: Aqui você especifica o nome do diretório # para guardar os relatórios. Não precisa # criar, só tem que especificar. O script # cria para você, contando com que tenha # permissão. Como Sempre, caminho absoluto # Exemplo: /home/Reports # RootUser: Aqui você coloca 0 ou deixa em branco # para não rodar o script como root e não # configurar atributo de imutável para os # relatórios. Coloca 1 para rodar como root # e ativar atributo de imutável. Qualquer # outra coisa dá erro e termina script. # -------------------------------------------------------- # ###### PARÂMETROS ### Você configura aqui! BaseRptDir='' RootUser='' ### A partir daqui não mexer ok!! Imutable='false' DateRpt=$(date +%d%m%y%s) Registry=/etc/passwd SysAccSubDir=$BaseRptDir/SystemAccounts FileBitSubDir=$BaseRptDir/FilePermissions OutSysAccRpt=$SysAccSubDir/Accounts-${DateRpt}.rpt OutFileBitRpt=$FileBitSubDir/FilePermissions-${DateRpt}.rpt # -------------------------------------------------------- # ##### FUNÇÕES function ErrorExit { echo "$@" >&2 echo Terminando script... >&2 exit 1 } function CompareItem { local PreviousReport=$(ls -1t ${2}/*.rpt | sed -n '2p') if [ -z "$PreviousReport" ] then echo Não existem relatórios anteriores para comparar. echo else echo Procurando diferenças entre relatório atual echo e o relatório anterior... echo local Differences=$(diff -q ${1} ${PreviousReport}) if [ -z "$Differences" ] then echo Não existem diferenças entre o relatório atual echo e o último relatório. echo else echo O relatório atual e o último relatório direrem. echo local PreviousCount=$(awk '/^NÚMERO/{print $NF}' \ ${PreviousReport}) local CurrentCount=$(awk '/^NÚMERO/{print $NF}' ${1}) echo '###############################################' echo Número de itens em relatório anterior: echo "$PreviousCount" echo '###############################################' echo echo '###############################################' echo Número de itens em relatório atual: echo "$CurrentCount" echo '##############################################' echo fi fi return } # -------------------------------------------------------- # ##### VERIFICAÇÕES case "$RootUser" in 0 | '') Imutable='false' ;; 1) Imutable='true' [ $UID -ne 0 ] && { ErrorExit 'Não está logado[a] como root ou sudo.' } ;; *) ErrorExit Variável RootUser foi mal configurada. ;; esac [ -z "$BaseRptDir" ] && { ErrorExit Diretório para guardar relatórios não especificado. } if [ ! -d "$BaseRptDir" ] then mkdir $BaseRptDir 2> /dev/null || { ErrorExit "Erro ao criar $BaseRptDir. Você tem permissão para o diretório?" } mkdir $SysAccSubDir mkdir $FileBitSubDir fi # -------------------------------------------------------- # ##### CONTAS DE SISTEMA (false/nologin) clear echo '***Compondo relatório de contas de sistema***' echo awk ' BEGIN { FS=":"; count=0; print "CONTAS DE SISTEMA COM SHELL FALSE|NOLOGIN:\n"; print "====================================================\n"; printf "%4s \t %s \t\t\t %s\n", "No.", "Conta", "Shell"; print "\n====================================================\n"; } { if ( $NF ~ /(false$|nologin$)/ ) { count++; printf "%2i\t%-15s \t%-15s\n", count, $1, $NF; } } END { print "\n====================================================\n"; print "NÚMERO TOTAL DE CONTAS: ", count; print "\n====================================================\n"; } ' $Registry > $OutSysAccRpt echo Relatório completo. echo CompareItem $OutSysAccRpt $SysAccSubDir echo # -------------------------------------------------------- # ##### ITENS COM BIT SUID|SGID echo '***Compondo relatório de itens com bit SUID|SGID***' echo find / -perm /6000 2> /dev/null | \ awk ' BEGIN { print "ITENS NO SISTEMA COM BIT SUID|SGID:\n"; print "========================================\n"; printf "%4s \t %6s\n", "No.", "Item"; print "\n========================================\n"; } { printf "%2i\t%-15s\n", NR, $0; } END { print "\n========================================\n"; print "NÚMERO TOTAL DE ITENS: ", NR; print "\n========================================\n" } ' > $OutFileBitRpt echo Relatório completo. echo CompareItem $OutFileBitRpt $FileBitSubDir echo # -------------------------------------------------------- # ##### IMUTÁVEL OU NÃO?? [ "$Imutable" == 'true' ] && { chattr +i $OutSysAccRpt chattr +i $OutFileBitRpt } # -------------------------------------------------------- # ##### FIM!! echo Todos os itens foram auditados. echo Você pode ver relatórios detalhados echo na hierarquia de pastas em $BaseRptDir echo Terminando script... exit 0 # -------------------------------------------------------- #
script limpeza de sistemas linux
Cadastrar máquina Win2K ou XP no Linux para Domínio
Instalador do MPlayer e mais algumas coisas
Wrapper do dd com algumas medidas de segurança
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)