Script de bash para manter trilha de auditoria / log de arquivos acessados

0

Eu procurei no banco de dados AskUbuntu, mas a coisa mais próxima que eu encontrei foi uma questão sobre como registrar erros.

O que estou procurando é anexar a um arquivo de log / trilha de auditoria toda vez que o sudo gedit / gksu gedit / pkexec gedit for usado. Na realidade, estarei usando um script de wrapper chamado gsu que chama pkexec gedit .

O que eu gostaria de fazer é anexar a um arquivo de auditoria, digamos ~/gedit-log o seguinte:

YYYY-MM-DD hh:mm:ss Count /SystemDirectoryName/SystemFileName

Lembre-se de que posso navegar para / SystemDirectoryName e, em seguida, chamar gsu gedit SystemFileName para que o primeiro parâmetro não possa ser usado automaticamente porque o caminho deve ser prefixado. Portanto, um comando bash "aqui é o nome do arquivo, me dê o caminho completo e o nome do arquivo" é necessário.

A data e a hora atuais devem estar em formato legível por humanos (não o número de segundos de 1970 (hora da época)). A máscara de data e hora no exemplo é provavelmente inadequada e deve estar em conformidade com os padrões do setor.

Um comando é necessário para anexar a string de combinação + CR / LF (Carriage Return Line Feed) ao arquivo de trilha / registro de auditoria.

Na estrada, um programa / roteiro de massagem seria necessário para agrupar todas as vezes que um determinado arquivo foi editado (o / etc / default / grub pode ter muitas edições) no campo "contar" e excluir o estranho registros. Isso provavelmente seria um trabalho diário de cron ?

Pode fazer sentido ter dois campos de data / hora. Um pela primeira vez mudou e um pela última vez mudou.

Espero que este código já exista no Linuxverse ou algo próximo a ele possa ser facilmente adaptado.

O código em si pode ser colocado em um script bash separado para que possa ser adaptado para muitas situações ... ou seja, este usuário editou esse arquivo de folha de pagamento, etc.

    
por WinEunuuchs2Unix 17.11.2016 / 02:16

1 resposta

0

A resposta mais simples para mim é não usar journalctl derivativos, mas sim programação / script de "força bruta".

Aqui está o código.

~/bin/gsu :

#!/bin/bash

# Usage: gsu gedit file1 file2...
#  -OR-  gsu natuilus /dirname

# & is used to spawn process and get prompt back ASAP
# > /dev/null is used to send gtk warnings into dumpster

COMMAND="$1" # extract gedit or nautilus

pkexec "$COMMAND" "${@:2}"

log-file "${@:2}" gsu-log-file-for-"$COMMAND"

/usr/local/bin/log-file :

#! /bin/bash

# NAME: log-file
# PATH: /usr/local/bin
# DESC: Update audit trail/log file with passed parameters.
# CALL: log-file FileName LogFileName
# DATE: Created Nov 18, 2016.
# NOTE: Primarily called from ~/bin/gsu

ABSOLUTE_NAME=$(realpath "$1")
TIME_STAMP=$(date +"%D - %T")
LOG_FILE="$2"

# Does log file need to be created?
if [ ! -f "$LOG_FILE" ]; then
    touch "$LOG_FILE"
    echo "__Date__ - __Time__ - ______File Name______" >> "$LOG_FILE"
    #     MM/DD/YY - hh:mm:ss - "a/b/c/FileName"
fi

echo "$TIME_STAMP" - '"'"$ABSOLUTE_NAME"'"' >> "$LOG_FILE"

exit 0

Conteúdo do arquivo de log gsu-log-file-for-gedit após algumas edições:

__Date__ - __Time__ - ______File Name______
11/18/16 - 19:07:54 - "/etc/default/grub"
11/18/16 - 19:08:34 - "/home/rick/bin/gsu"
11/18/16 - 19:09:26 - "/home/rick/bin/gsu"

Melhorias futuras

Um script de consolidação que terá duas últimas linhas e as mesclará em:

11/18/16 - 19:09:26 - "/home/rick/bin/gsu" (2 edits, first on 11/18/16 - 19:08:34"
    
por WinEunuuchs2Unix 19.11.2016 / 03:21